Conversation
| R.id.createPlaylistFragment, | ||
| R.id.playlistFragment -> { | ||
| // Скрываем BottomNavigationView | ||
| bottomNavigationView.visibility = View.GONE |
There was a problem hiding this comment.
У view есть удобный экстеншен: View.isVisible = true/false, которая заменяет привычное нам View.visibility = View.VISIBLE/View.GONE
|
|
||
| override suspend fun removeTrackFromPlaylist(playlistId: Long, trackId: Long) { | ||
| Log.d(TAG, "removeTrackFromPlaylist: playlistId=$playlistId, trackId=$trackId") | ||
| val playlist = getPlaylistById(playlistId) |
There was a problem hiding this comment.
можно сделать ранний выход, тогда не потребуется оборачивать код ниже в if-блок:
val playlist = getPlaylistById(playlistId) ?: return
| Log.d("PlaylistInteractor", "========== DELETE PLAYLIST CALLED ==========") | ||
| Log.d("PlaylistInteractor", "deletePlaylist called with id: $playlistId") | ||
| Log.d("PlaylistInteractor", "Thread: ${Thread.currentThread().name}") |
There was a problem hiding this comment.
при многострочном логировании можно применять строку с форматированием:
Log.d("PlaylistInteractor", """что-то на несколько строк""".trimIndent() или .trimMargin())
| private var isEditMode = false | ||
| private var editingPlaylist: Playlist? = null | ||
| private var originalCoverPath: String? = null |
There was a problem hiding this comment.
лучше разруливать и хранить все на уровне вьюмодели, а для редактирования можно хранить только id плейлиста
фрагменты/активити должны отвечать только за отрисовку
| private val _showEmptyShareMessage = MutableLiveData<Boolean>() | ||
| val showEmptyShareMessage: LiveData<Boolean> = _showEmptyShareMessage |
There was a problem hiding this comment.
для одиночных операция вроде показа тостов/снекбаров или навигации лучше посмотреть в сторону SingleLiveData - это обертка над liveData которая делает их максимально одиночными (события не будут повторяться при смене конфигурации)
| appendLine(playlist.description) | ||
| } | ||
| val tracksCountText = when { | ||
| tracks.size % 10 == 1 && tracks.size % 100 != 11 -> "${tracks.size} трек" |
There was a problem hiding this comment.
Воспользуйся лучше plurals, в андроиде уже реализована логика, с помощью которой для каждой локали будет подбираться соответствующее окончание. Почитать о том, как это использовать, можно в официальной документации - https://developer.android.com/guide/topics/resources/string-resource#Plurals
| private val _playlist = MutableLiveData<Playlist?>() | ||
| val playlist: LiveData<Playlist?> = _playlist | ||
|
|
||
| private val _tracks = MutableLiveData<List<Track>>() | ||
| val tracks: LiveData<List<Track>> = _tracks | ||
|
|
||
| private val _totalDuration = MutableLiveData<String>() | ||
| val totalDuration: LiveData<String> = _totalDuration | ||
|
|
||
| private val _shareText = MutableLiveData<String?>() | ||
| val shareText: LiveData<String?> = _shareText | ||
|
|
||
| private val _showEmptyShareMessage = MutableLiveData<Boolean>() | ||
| val showEmptyShareMessage: LiveData<Boolean> = _showEmptyShareMessage |
There was a problem hiding this comment.
Очень много лайвдат - попробуй разделить на две:
- отвечает за стейт экрана (список, заголовок и прочая информация)
- SingleLiveData (комменты выше) - обрабатывать единичные ивенты (шаринг текста/показ тоста и тд)
| } | ||
| } | ||
|
|
||
| private fun getTracksCountText(count: Int): String { |
There was a problem hiding this comment.
это второй метод с тем же поведением, лучше обратись к plurals
No description provided.