Skip to content

Commit abf7ccf

Browse files
authored
Merge pull request #92 from timusus/fix/autoclear-crash
Fixes a crash when attempting to update QueueFragment from sheet upda…
2 parents c0774f7 + b75af96 commit abf7ccf

File tree

1 file changed

+29
-16
lines changed
  • androidApp/main/app/src/main/java/com/simplecityapps/shuttle/ui/screens/queue

1 file changed

+29
-16
lines changed

androidApp/main/app/src/main/java/com/simplecityapps/shuttle/ui/screens/queue/QueueFragment.kt

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView
2929
import com.simplecityapps.shuttle.R
3030
import com.simplecityapps.shuttle.ui.common.TagEditorMenuSanitiser
3131
import com.simplecityapps.shuttle.ui.common.autoCleared
32+
import com.simplecityapps.shuttle.ui.common.autoClearedNullable
3233
import com.simplecityapps.shuttle.ui.common.dialog.EditTextAlertDialog
3334
import com.simplecityapps.shuttle.ui.common.dialog.ShowExcludeDialog
3435
import com.simplecityapps.shuttle.ui.common.dialog.TagEditorAlertDialog
@@ -67,7 +68,7 @@ class QueueFragment :
6768
private var adapter: RecyclerAdapter? = null
6869
private var recyclerView: FastScrollRecyclerView? = null
6970

70-
private var toolbar: Toolbar by autoCleared()
71+
private var toolbar: Toolbar? by autoClearedNullable()
7172
private var toolbarTitleTextView: TextView by autoCleared()
7273
private var toolbarSubtitleTextView: TextView by autoCleared()
7374
private var progressBar: ProgressBar by autoCleared()
@@ -123,28 +124,31 @@ class QueueFragment :
123124
view.findParentMultiSheetView()?.addSheetStateChangeListener(sheetStateChangeListener)
124125

125126
toolbar = view.findViewById(R.id.toolbar)
126-
toolbar.inflateMenu(R.menu.menu_up_next)
127-
toolbar.setOnMenuItemClickListener { menuItem ->
127+
toolbar!!.inflateMenu(R.menu.menu_up_next)
128+
toolbar!!.setOnMenuItemClickListener { menuItem ->
128129
when (menuItem.itemId) {
129130
R.id.scrollToCurrent -> {
130131
presenter.scrollToCurrent()
131132
true
132133
}
134+
133135
R.id.playlist -> {
134-
playlistMenuView.createPlaylistMenu(toolbar.menu)
136+
playlistMenuView.createPlaylistMenu(toolbar!!.menu)
135137
true
136138
}
139+
137140
R.id.clearQueue -> {
138141
presenter.clearQueue()
139142
true
140143
}
144+
141145
else -> {
142146
playlistMenuView.handleMenuItem(menuItem, PlaylistData.Queue)
143147
}
144148
}
145149
}
146150

147-
toolbar.setOnClickListener {
151+
toolbar!!.setOnClickListener {
148152
view.findParentMultiSheetView()?.let { multiSheetView ->
149153
if (multiSheetView.currentSheet != MultiSheetView.Sheet.SECOND) {
150154
multiSheetView.expandSheet(MultiSheetView.Sheet.SECOND)
@@ -157,9 +161,9 @@ class QueueFragment :
157161
presenter.bindView(this)
158162
playlistMenuPresenter.bindView(playlistMenuView)
159163

160-
playlistMenuView.createPlaylistMenu(toolbar.menu)
164+
playlistMenuView.createPlaylistMenu(toolbar!!.menu)
161165

162-
val trialMenuItem = toolbar.menu.findItem(R.id.trial)
166+
val trialMenuItem = toolbar!!.menu.findItem(R.id.trial)
163167
trialMenuItem.actionView.setOnClickListener {
164168
TrialDialogFragment.newInstance().show(childFragmentManager)
165169
}
@@ -169,13 +173,15 @@ class QueueFragment :
169173
is TrialState.Pretrial, is TrialState.Paid, is TrialState.Unknown -> {
170174
trialMenuItem.isVisible = false
171175
}
176+
172177
is TrialState.Trial -> {
173178
trialMenuItem.isVisible = true
174179
val daysRemainingText: TextView = trialMenuItem.actionView.findViewById(R.id.daysRemaining)
175180
daysRemainingText.text = TimeUnit.MILLISECONDS.toDays(trialState.timeRemaining).toString()
176181
val progress: CircularProgressView = trialMenuItem.actionView.findViewById(R.id.progress)
177182
progress.setProgress((trialState.timeRemaining / trialManager.trialLength.toDouble()).toFloat())
178183
}
184+
179185
is TrialState.Expired -> {
180186
trialMenuItem.isVisible = true
181187
val daysRemainingText: TextView = trialMenuItem.actionView.findViewById(R.id.daysRemaining)
@@ -314,20 +320,24 @@ class QueueFragment :
314320
presenter.removeFromQueue(queueItem)
315321
return@setOnMenuItemClickListener true
316322
}
323+
317324
R.id.playNext -> {
318325
presenter.playNext(queueItem)
319326
return@setOnMenuItemClickListener true
320327
}
328+
321329
R.id.exclude -> {
322330
ShowExcludeDialog(requireContext(), queueItem.song.name) {
323331
presenter.exclude(queueItem)
324332
}
325333
return@setOnMenuItemClickListener true
326334
}
335+
327336
R.id.editTags -> {
328337
presenter.editTags(queueItem)
329338
return@setOnMenuItemClickListener true
330339
}
340+
331341
else -> {
332342
playlistMenuView.handleMenuItem(menuItem, PlaylistData.Songs(queueItem.song))
333343
}
@@ -347,16 +357,18 @@ class QueueFragment :
347357
private val sheetStateChangeListener = object : MultiSheetView.SheetStateChangeListener {
348358

349359
override fun onSheetStateChanged(sheet: Int, state: Int) {
350-
toolbar.menu.findItem(R.id.scrollToCurrent)?.isVisible = sheet == MultiSheetView.Sheet.SECOND && state == BottomSheetBehavior.STATE_EXPANDED
351-
toolbar.menu.findItem(R.id.playlist)?.isVisible = sheet == MultiSheetView.Sheet.SECOND && state == BottomSheetBehavior.STATE_EXPANDED
352-
toolbar.menu.findItem(R.id.clearQueue)?.isVisible = sheet == MultiSheetView.Sheet.SECOND && state == BottomSheetBehavior.STATE_EXPANDED
360+
toolbar?.let { toolbar ->
361+
toolbar.menu.findItem(R.id.scrollToCurrent)?.isVisible = sheet == MultiSheetView.Sheet.SECOND && state == BottomSheetBehavior.STATE_EXPANDED
362+
toolbar.menu.findItem(R.id.playlist)?.isVisible = sheet == MultiSheetView.Sheet.SECOND && state == BottomSheetBehavior.STATE_EXPANDED
363+
toolbar.menu.findItem(R.id.clearQueue)?.isVisible = sheet == MultiSheetView.Sheet.SECOND && state == BottomSheetBehavior.STATE_EXPANDED
353364

354-
if (sheet == MultiSheetView.Sheet.SECOND && state == BottomSheetBehavior.STATE_EXPANDED) {
355-
toolbar.menu.findItem(R.id.trial).isVisible = false
356-
}
357-
if (sheet == MultiSheetView.Sheet.SECOND && state == BottomSheetBehavior.STATE_COLLAPSED) {
358-
if (trialManager.trialState.value is TrialState.Trial || trialManager.trialState.value is TrialState.Expired) {
359-
toolbar.menu.findItem(R.id.trial).isVisible = true
365+
if (sheet == MultiSheetView.Sheet.SECOND && state == BottomSheetBehavior.STATE_EXPANDED) {
366+
toolbar.menu.findItem(R.id.trial).isVisible = false
367+
}
368+
if (sheet == MultiSheetView.Sheet.SECOND && state == BottomSheetBehavior.STATE_COLLAPSED) {
369+
if (trialManager.trialState.value is TrialState.Trial || trialManager.trialState.value is TrialState.Expired) {
370+
toolbar.menu.findItem(R.id.trial).isVisible = true
371+
}
360372
}
361373
}
362374
}
@@ -382,6 +394,7 @@ class QueueFragment :
382394
is NetworkResult.Success -> {
383395
PromoCodeDialogFragment.newInstance(result.body.promoCode).show(childFragmentManager)
384396
}
397+
385398
is NetworkResult.Failure -> {
386399
Toast.makeText(requireContext(), "Failed to retrieve promo code", Toast.LENGTH_LONG).show()
387400
}

0 commit comments

Comments
 (0)