Skip to content

Commit

Permalink
Remove many lint warnings
Browse files Browse the repository at this point in the history
  • Loading branch information
rsiebert committed Nov 23, 2023
1 parent c1f4ec4 commit 718ec7d
Show file tree
Hide file tree
Showing 40 changed files with 332 additions and 275 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,15 @@ abstract class BaseFragment : Fragment() {

sharedPreferences = PreferenceManager.getDefaultSharedPreferences(activity)
baseViewModel = ViewModelProvider(requireActivity())[BaseViewModel::class.java]
baseViewModel.connectionToServerAvailableLiveData.observe(viewLifecycleOwner, { isAvailable ->
baseViewModel.connectionToServerAvailableLiveData.observe(viewLifecycleOwner) { isAvailable ->
Timber.d("Received live data, connection to server availability changed to $isAvailable")
isConnectionToServerAvailable = isAvailable
})
}

baseViewModel.isUnlockedLiveData.observe(viewLifecycleOwner, { unlocked ->
baseViewModel.isUnlockedLiveData.observe(viewLifecycleOwner) { unlocked ->
Timber.d("Received live data, unlocked changed to $unlocked")
isUnlocked = unlocked
})
}

connection = baseViewModel.connection
htspVersion = baseViewModel.htspVersion
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,10 @@ import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.asLiveData
import androidx.preference.PreferenceManager
import org.tvheadend.data.AppRepository
import org.tvheadend.data.entity.Connection
import org.tvheadend.tvhclient.BuildConfig
import org.tvheadend.tvhclient.MainApplication
import org.tvheadend.tvhclient.MainRepository
import org.tvheadend.tvhclient.MainRepository.Companion.UNLOCKER
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package org.tvheadend.tvhclient.ui.common

import android.annotation.SuppressLint
import android.graphics.Bitmap
import android.graphics.Color
import android.graphics.drawable.Drawable
import android.os.Build
import android.text.SpannableString
import android.text.SpannableStringBuilder
import android.text.format.DateUtils
import android.text.style.ForegroundColorSpan
import android.util.SparseArray
import android.view.View
Expand Down Expand Up @@ -571,7 +571,7 @@ fun setLocalizedDate(view: TextView, date: Long) {

var localizedDate = ""

var dateDiff = date/ONE_DAY - System.currentTimeMillis()/ONE_DAY
val dateDiff = date/ONE_DAY - System.currentTimeMillis()/ONE_DAY

when (dateDiff.toInt()) {
0 -> localizedDate = view.context.getString(R.string.today)
Expand Down Expand Up @@ -608,6 +608,7 @@ fun setLocalizedDate(view: TextView, date: Long) {
* @param showGenreColors True to show the color, false otherwise
* @param offset Positive offset from 0 to 100 to increase the transparency of the color
*/
@SuppressLint("ResourceAsColor")
@BindingAdapter("genreColor", "showGenreColor", "genreColorAlphaOffset", "genreColorItemName")
fun setGenreColor(view: TextView, contentType: Int, showGenreColors: Boolean, offset: Int, itemName: String?) {
val context = view.context
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.tvheadend.tvhclient.ui.common


import android.annotation.SuppressLint
import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
Expand Down Expand Up @@ -319,8 +320,8 @@ private fun removeSelectedSeriesRecording(context: Context, recording: SeriesRec

fun showConfirmationToRemoveSelectedTimerRecording(context: Context, recording: TimerRecording, callback: RecordingRemovedInterface?): Boolean {
val recordingName = recording.name ?: ""
val name = if (recordingName.isNotEmpty()) recordingName else ""
val displayTitle = if (name.isNotEmpty()) name else recording.title ?: ""
val name = recordingName.ifEmpty { "" }
val displayTitle = name.ifEmpty { recording.title ?: "" }
Timber.d("Removing timer recording $displayTitle")

MaterialDialog(context).show {
Expand Down Expand Up @@ -436,6 +437,7 @@ private fun removeAllTimerRecordings(context: Context, items: List<TimerRecordin
}.start()
}

@SuppressLint("CheckResult")
fun recordSelectedProgramWithCustomProfile(context: Context, eventId: Int, channelId: Int, serverProfileNames: Array<String>, serverProfile: ServerProfile?): Boolean {
// Get the selected recording profile to highlight the
// correct item in the list of the selection dialog
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class NetworkStatusReceiver(private val viewModel: NetworkStatusInterface) : Bro
}

@Suppress("DEPRECATION")
fun isNetworkAvailable(context: Context): Boolean {
private fun isNetworkAvailable(context: Context): Boolean {
val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
val activeNetworkInfo = connectivityManager.activeNetworkInfo
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,11 @@ import android.content.SharedPreferences
import android.content.pm.PackageManager
import android.content.res.Configuration
import android.database.Cursor
import android.os.*
import android.os.Build
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.os.StrictMode
import android.provider.SearchRecentSuggestions
import android.view.KeyEvent
import android.view.Menu
Expand All @@ -26,21 +30,40 @@ import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.preference.PreferenceManager
import com.google.android.gms.cast.framework.*
import com.google.android.gms.cast.framework.CastButtonFactory
import com.google.android.gms.cast.framework.CastContext
import com.google.android.gms.cast.framework.CastSession
import com.google.android.gms.cast.framework.CastState
import com.google.android.gms.cast.framework.CastStateListener
import com.google.android.gms.cast.framework.IntroductoryOverlay
import com.google.android.gms.cast.framework.SessionManagerListener
import org.tvheadend.api.AuthenticationFailureReason
import org.tvheadend.api.AuthenticationStateResult
import org.tvheadend.api.ConnectionFailureReason
import org.tvheadend.api.ConnectionStateResult
import org.tvheadend.tvhclient.BuildConfig
import org.tvheadend.tvhclient.MainApplication
import org.tvheadend.tvhclient.R
import org.tvheadend.tvhclient.service.ConnectionService
import org.tvheadend.tvhclient.service.SyncState
import org.tvheadend.tvhclient.service.SyncStateReceiver
import org.tvheadend.tvhclient.service.SyncStateResult
import org.tvheadend.tvhclient.ui.base.BaseViewModel
import org.tvheadend.tvhclient.ui.common.*
import org.tvheadend.tvhclient.ui.common.interfaces.*
import org.tvheadend.tvhclient.ui.common.NetworkStatus
import org.tvheadend.tvhclient.ui.common.NetworkStatusReceiver
import org.tvheadend.tvhclient.ui.common.SnackbarMessageReceiver
import org.tvheadend.tvhclient.ui.common.SuggestionProvider
import org.tvheadend.tvhclient.ui.common.WakeOnLanTask
import org.tvheadend.tvhclient.ui.common.interfaces.BackPressedInterface
import org.tvheadend.tvhclient.ui.common.interfaces.ClearSearchResultsOrPopBackStackInterface
import org.tvheadend.tvhclient.ui.common.interfaces.HideNavigationDrawerInterface
import org.tvheadend.tvhclient.ui.common.interfaces.LayoutControlInterface
import org.tvheadend.tvhclient.ui.common.interfaces.SearchRequestInterface
import org.tvheadend.tvhclient.ui.common.interfaces.ShowProgramListFragmentInterface
import org.tvheadend.tvhclient.ui.common.interfaces.ToolbarInterface
import org.tvheadend.tvhclient.ui.common.onAttach
import org.tvheadend.tvhclient.ui.common.showConfirmationToReconnectToServer
import org.tvheadend.tvhclient.ui.common.showOrCancelNotificationDiskSpaceIsLow
import org.tvheadend.tvhclient.ui.common.showOrCancelNotificationProgramIsCurrentlyBeingRecorded
import org.tvheadend.tvhclient.ui.features.dvr.recordings.download.DownloadPermissionGrantedInterface
import org.tvheadend.tvhclient.ui.features.information.ChangeLogFragment
import org.tvheadend.tvhclient.ui.features.information.PrivacyPolicyFragment
Expand All @@ -51,7 +74,13 @@ import org.tvheadend.tvhclient.ui.features.navigation.NavigationViewModel
import org.tvheadend.tvhclient.ui.features.playback.external.CastSessionManagerListener
import org.tvheadend.tvhclient.ui.features.programs.ProgramListFragment
import org.tvheadend.tvhclient.ui.features.startup.StartupFragment
import org.tvheadend.tvhclient.util.extensions.*
import org.tvheadend.tvhclient.util.extensions.getCastContext
import org.tvheadend.tvhclient.util.extensions.getCastSession
import org.tvheadend.tvhclient.util.extensions.gone
import org.tvheadend.tvhclient.util.extensions.sendSnackbarMessage
import org.tvheadend.tvhclient.util.extensions.showSnackbarMessage
import org.tvheadend.tvhclient.util.extensions.visible
import org.tvheadend.tvhclient.util.extensions.visibleOrGone
import org.tvheadend.tvhclient.util.getThemeId
import timber.log.Timber

Expand Down Expand Up @@ -204,20 +233,18 @@ class MainActivity : AppCompatActivity(), ToolbarInterface, LayoutControlInterfa
Timber.d("Delayed search timer elapsed, starting search")
}

baseViewModel.isUnlockedLiveData.observe(this, { isUnlocked ->
baseViewModel.isUnlockedLiveData.observe(this) { isUnlocked ->
Timber.d("Received live data, isUnlocked value changed to $isUnlocked")
if (isUnlocked) {
baseViewModel.isUnlocked = isUnlocked || BuildConfig.OVERRIDE_UNLOCKED
}
})
baseViewModel.isUnlocked = isUnlocked || BuildConfig.OVERRIDE_UNLOCKED
}

baseViewModel.startupCompleteLiveData.observe(this, { event ->
baseViewModel.startupCompleteLiveData.observe(this) { event ->
val isComplete = event.getContentIfNotHandled() ?: false
Timber.d("Received live data, startup complete value changed to $isComplete")
if (isComplete) {
startupIsCompleteObserveMainLiveData()
}
})
}

// In case an orientation change occurred assume the startup is complete and start observing the
// other required live data. Without that navigation and connectivity changes would not work anymore
Expand All @@ -230,45 +257,50 @@ class MainActivity : AppCompatActivity(), ToolbarInterface, LayoutControlInterfa
private fun startupIsCompleteObserveMainLiveData() {
Timber.d("Startup complete, observing other required live data")

baseViewModel.networkStatusLiveData.observe(this, { event ->
baseViewModel.networkStatusLiveData.observe(this) { event ->
event.getContentIfNotHandled()?.let {
Timber.d("Network status changed to $it")
connectToServer(it)
}
})
}

baseViewModel.connectionToServerAvailableLiveData.observe(this, { isAvailable ->
baseViewModel.connectionToServerAvailableLiveData.observe(this) { isAvailable ->
Timber.d("Connection to server availability changed to $isAvailable")
invalidateOptionsMenu()
statusViewModel.stopDiskSpaceUpdateHandler()
if (isAvailable) {
statusViewModel.startDiskSpaceUpdateHandler()
}
})
}

navigationViewModel.getNavigationMenuId().observe(this, { event ->
navigationViewModel.getNavigationMenuId().observe(this) { event ->
event.getContentIfNotHandled()?.let {
Timber.d("Navigation menu id changed to $it")
baseViewModel.clearSearchQuery()
navigationDrawer.handleDrawerItemSelected(it)
}
})
statusViewModel.showRunningRecordingCount.observe(this, { show ->
}
statusViewModel.showRunningRecordingCount.observe(this) { show ->
showOrCancelNotificationProgramIsCurrentlyBeingRecorded(this, statusViewModel.runningRecordingCount, show)
})
statusViewModel.showLowStorageSpace.observe(this, { show ->
}
statusViewModel.showLowStorageSpace.observe(this) { show ->
showOrCancelNotificationDiskSpaceIsLow(this, statusViewModel.availableStorageSpace, show)
})
baseViewModel.snackbarMessageLiveData.observe(this, { event ->
}
baseViewModel.snackbarMessageLiveData.observe(this) { event ->
event.getContentIfNotHandled()?.let {
this.showSnackbarMessage(it)
}
})
baseViewModel.isUnlockedLiveData.observe(this, { unlocked ->
}
baseViewModel.isUnlockedLiveData.observe(this) { unlocked ->
Timber.d("Received live data, unlocked changed to $unlocked")
invalidateOptionsMenu()
miniController.visibleOrGone(isUnlocked && sharedPreferences.getBoolean("casting_minicontroller_enabled", resources.getBoolean(R.bool.pref_default_casting_minicontroller_enabled)))
})
miniController.visibleOrGone(
isUnlocked && sharedPreferences.getBoolean(
"casting_minicontroller_enabled",
resources.getBoolean(R.bool.pref_default_casting_minicontroller_enabled)
)
)
}

Timber.d("Done initializing")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.tvheadend.tvhclient.ui.features.channels

import android.annotation.SuppressLint
import android.content.Context
import android.os.Bundle
import android.os.Handler
Expand Down Expand Up @@ -69,23 +70,23 @@ class ChannelListFragment : BaseFragment(), RecyclerViewClickInterface, ChannelT
binding.searchProgress.visibleOrGone(baseViewModel.isSearchActive)

Timber.d("Observing selected time")
channelViewModel.selectedTime.observe(viewLifecycleOwner, { time ->
channelViewModel.selectedTime.observe(viewLifecycleOwner) { time ->
Timber.d("View model returned selected time $time")
if (time != null) {
selectedTime = time
}
})
}

Timber.d("Observing channel tags")
channelViewModel.channelTags.observe(viewLifecycleOwner, { tags ->
channelViewModel.channelTags.observe(viewLifecycleOwner) { tags ->
if (tags != null) {
Timber.d("View model returned ${tags.size} channel tags")
channelTags = tags
}
})
}

Timber.d("Observing channels")
channelViewModel.channels.observe(viewLifecycleOwner, { channels ->
channelViewModel.channels.observe(viewLifecycleOwner) { channels ->
if (channels != null) {
Timber.d("View model returned ${channels.size} channels")
recyclerViewAdapter.addItems(channels.toMutableList())
Expand All @@ -100,11 +101,11 @@ class ChannelListFragment : BaseFragment(), RecyclerViewClickInterface, ChannelT
if (isDualPane && recyclerViewAdapter.itemCount > 0) {
showProgramListOfSelectedChannelInDualPane(channelViewModel.selectedListPosition)
}
})
}

channelViewModel.channelCount.observe(viewLifecycleOwner, { count ->
channelViewModel.channelCount.observe(viewLifecycleOwner) { count ->
channelCount = count
})
}

// Initiate a timer that will update the view model data every minute
// so that the progress bars will be displayed correctly
Expand All @@ -124,7 +125,7 @@ class ChannelListFragment : BaseFragment(), RecyclerViewClickInterface, ChannelT
// so the recording status of the particular program can be updated. This is required
// because the programs are not updated automatically when recordings change.
Timber.d("Observing recordings")
channelViewModel.recordings.observe(viewLifecycleOwner, { recordings ->
channelViewModel.recordings.observe(viewLifecycleOwner) { recordings ->
if (recordings != null) {
Timber.d("View model returned ${recordings.size} recordings")
recyclerViewAdapter.addRecordings(recordings)
Expand All @@ -138,20 +139,20 @@ class ChannelListFragment : BaseFragment(), RecyclerViewClickInterface, ChannelT
}
}
}
})
}
}

private fun observeSearchQuery() {
Timber.d("Observing search query")
baseViewModel.searchQueryLiveData.observe(viewLifecycleOwner, { query ->
baseViewModel.searchQueryLiveData.observe(viewLifecycleOwner) { query ->
if (query.isNotEmpty()) {
Timber.d("View model returned search query '$query'")
onSearchRequested(query)
} else {
Timber.d("View model returned empty search query")
onSearchResultsCleared()
}
})
}
}

private fun showStatusInToolbar() {
Expand Down Expand Up @@ -232,6 +233,7 @@ class ChannelListFragment : BaseFragment(), RecyclerViewClickInterface, ChannelT
}.also { dialogDismissHandler.postDelayed(it, 60000) }
}

@SuppressLint("CheckResult")
private fun showSearchForChannelsDialog(context: Context): Boolean {
MaterialDialog(context).show {
title(res = R.string.search_for_channels)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ class CompletedRecordingListFragment : RecordingListFragment() {
super.onViewCreated(view, savedInstanceState)

Timber.d("Observing recordings")
recordingViewModel.completedRecordings.observe(viewLifecycleOwner, { recordings ->
recordingViewModel.completedRecordings.observe(viewLifecycleOwner) { recordings ->
Timber.d("View model returned ${recordings.size} recordings")
addRecordingsAndUpdateUI(recordings)
})
}
}

override fun onPrepareOptionsMenu(menu: Menu) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ class FailedRecordingListFragment : RecordingListFragment() {
super.onViewCreated(view, savedInstanceState)

Timber.d("Observing recordings")
recordingViewModel.failedRecordings.observe(viewLifecycleOwner, { recordings ->
recordingViewModel.failedRecordings.observe(viewLifecycleOwner) { recordings ->
Timber.d("View model returned ${recordings.size} recordings")
addRecordingsAndUpdateUI(recordings)
})
}
}

override fun getQueryHint(): String {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,11 @@ class RecordingDetailsFragment : BaseFragment(), RecordingRemovedInterface, Down
}

Timber.d("Observing recording")
recordingViewModel.recordingLiveData.observe(viewLifecycleOwner, {
recordingViewModel.recordingLiveData.observe(viewLifecycleOwner) {
Timber.d("View model returned a recording")
recording = it
showRecordingDetails()
})
}
}

private fun showRecordingDetails() {
Expand Down
Loading

0 comments on commit 718ec7d

Please sign in to comment.