Skip to content

Commit c853a53

Browse files
authored
Merge pull request #6929 from Bnyro/master
fix: crash when instances refreshed during instance selection (out of bounds)
2 parents b83b2ea + 234f90f commit c853a53

3 files changed

Lines changed: 7 additions & 2 deletions

File tree

app/src/main/java/com/github/libretube/ui/activities/WelcomeActivity.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import com.github.libretube.ui.adapters.InstancesAdapter
1818
import com.github.libretube.ui.base.BaseActivity
1919
import com.github.libretube.ui.models.WelcomeModel
2020
import com.github.libretube.ui.preferences.BackupRestoreSettings
21+
import com.google.common.collect.ImmutableList
2122
import kotlinx.coroutines.CoroutineScope
2223
import kotlinx.coroutines.Dispatchers
2324
import kotlinx.coroutines.launch
@@ -49,7 +50,7 @@ class WelcomeActivity : BaseActivity() {
4950
// ALl the binding values are optional due to two different possible layouts (normal, landscape)
5051
viewModel.instances.observe(this) { instances ->
5152
binding.instancesRecycler.layoutManager = LinearLayoutManager(this@WelcomeActivity)
52-
binding.instancesRecycler.adapter = InstancesAdapter(instances, viewModel.selectedInstanceIndex.value) { index ->
53+
binding.instancesRecycler.adapter = InstancesAdapter(ImmutableList.copyOf(instances), viewModel.selectedInstanceIndex.value) { index ->
5354
viewModel.selectedInstanceIndex.value = index
5455
binding.okay.alpha = 1f
5556
}

app/src/main/java/com/github/libretube/ui/adapters/InstancesAdapter.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ import com.github.libretube.R
88
import com.github.libretube.api.obj.PipedInstance
99
import com.github.libretube.databinding.InstanceRowBinding
1010
import com.github.libretube.ui.viewholders.InstancesViewHolder
11+
import com.google.common.collect.ImmutableList
1112

1213
class InstancesAdapter(
13-
private val instances: List<PipedInstance>,
14+
private val instances: ImmutableList<PipedInstance>,
1415
initialSelectionApiIndex: Int?,
1516
private val onSelectInstance: (index: Int) -> Unit
1617
) : RecyclerView.Adapter<InstancesViewHolder>() {

app/src/main/java/com/github/libretube/ui/preferences/InstanceSettings.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import com.github.libretube.ui.dialogs.DeleteAccountDialog
2626
import com.github.libretube.ui.dialogs.LoginDialog
2727
import com.github.libretube.ui.dialogs.LogoutDialog
2828
import com.google.android.material.dialog.MaterialAlertDialogBuilder
29+
import com.google.common.collect.ImmutableList
2930
import kotlinx.coroutines.Dispatchers
3031
import kotlinx.coroutines.launch
3132
import kotlinx.coroutines.withContext
@@ -184,6 +185,8 @@ class InstanceSettings : BasePreferenceFragment() {
184185
val layoutInflater = LayoutInflater.from(context)
185186
val binding = SimpleOptionsRecyclerBinding.inflate(layoutInflater)
186187
binding.optionsRecycler.layoutManager = LinearLayoutManager(context)
188+
189+
val instances = ImmutableList.copyOf(this.instances)
187190
binding.optionsRecycler.adapter = InstancesAdapter(instances, selectedIndex) {
188191
selectedInstance = instances[it].apiUrl
189192
}

0 commit comments

Comments
 (0)