From 6ec86348369de85a271b5a90a884834f953a6a99 Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Sat, 4 Nov 2023 16:08:33 -0600 Subject: [PATCH] Fix a few more issues (and maintain horizontal scroll position!) --- .../cloudstream3/ui/account/AccountHelper.kt | 7 +++++++ .../ui/account/AccountSelectActivity.kt | 10 ++++----- .../ui/account/AccountViewModel.kt | 21 ++++++++++++++----- 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountHelper.kt index 60ec0f83..79cd0b2d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountHelper.kt @@ -14,6 +14,7 @@ import androidx.core.view.isGone import androidx.core.view.isVisible import androidx.core.widget.doOnTextChanged import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.google.android.material.bottomsheet.BottomSheetDialog import com.lagradost.cloudstream3.AcraApplication.Companion.removeKeys @@ -320,6 +321,12 @@ object AccountHelper { accountEditCallback = { viewModel.handleAccountUpdate(it, activity) }, accountDeleteCallback = { viewModel.handleAccountUpdate(activity) } ) + + activity.observe(viewModel.selectedKeyIndex) { selectedKeyIndex -> + // Scroll to current account (which is focused by default) + val layoutManager = recyclerView.layoutManager as LinearLayoutManager + layoutManager.scrollToPositionWithOffset(selectedKeyIndex, 0) + } } } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountSelectActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountSelectActivity.kt index 231fe91e..aca72335 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountSelectActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountSelectActivity.kt @@ -116,12 +116,12 @@ class AccountSelectActivity : AppCompatActivity() { viewModel.toggleIsEditing() } - } - if (isTvSettings()) { - recyclerView.spanCount = if (accounts.count() <= 6) { - accounts.count() - } else 6 + if (isTvSettings()) { + recyclerView.spanCount = if (liveAccounts.count() + 1 <= 6) { + liveAccounts.count() + 1 + } else 6 + } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountViewModel.kt index 4240d1f1..7074b2c4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountViewModel.kt @@ -4,13 +4,17 @@ import android.content.Context import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import com.lagradost.cloudstream3.AcraApplication.Companion.context import com.lagradost.cloudstream3.ui.account.AccountHelper.showPinInputDialog import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.DataStoreHelper.getAccounts import com.lagradost.cloudstream3.utils.DataStoreHelper.setAccount class AccountViewModel : ViewModel() { - private val _accounts: MutableLiveData> = MutableLiveData(DataStoreHelper.accounts.toList()) + private val _accounts: MutableLiveData> = MutableLiveData( + context?.let { getAccounts(it) } ?: DataStoreHelper.accounts.toList() + ) + val accounts: LiveData> = _accounts private val _isEditing = MutableLiveData(false) @@ -19,9 +23,8 @@ class AccountViewModel : ViewModel() { private val _isAllowedLogin = MutableLiveData(false) val isAllowedLogin: LiveData = _isAllowedLogin - fun handleAccountUpdate(context: Context) { - _accounts.postValue(getAccounts(context)) - } + private val _selectedKeyIndex = MutableLiveData(0) + val selectedKeyIndex: LiveData = _selectedKeyIndex fun setIsEditing(value: Boolean) { _isEditing.postValue(value) @@ -31,11 +34,16 @@ class AccountViewModel : ViewModel() { _isEditing.postValue(!(_isEditing.value ?: false)) } + fun handleAccountUpdate(context: Context) { + _accounts.postValue(getAccounts(context)) + _selectedKeyIndex.postValue(DataStoreHelper.selectedKeyIndex) + } + fun handleAccountUpdate( account: DataStoreHelper.Account, context: Context ) { - val currentAccounts = DataStoreHelper.accounts.toMutableList() + val currentAccounts = getAccounts(context).toMutableList() val overrideIndex = currentAccounts.indexOfFirst { it.keyIndex == account.keyIndex } @@ -51,6 +59,7 @@ class AccountViewModel : ViewModel() { DataStoreHelper.accounts = currentAccounts.toTypedArray() _accounts.postValue(getAccounts(context)) + _selectedKeyIndex.postValue(account.keyIndex) } fun handleAccountSelect( @@ -68,11 +77,13 @@ class AccountViewModel : ViewModel() { if (pin == null) return@showPinInputDialog // Pin is correct, proceed _isAllowedLogin.postValue(true) + _selectedKeyIndex.postValue(account.keyIndex) setAccount(account, true) } } else { // No PIN set for the selected account, proceed _isAllowedLogin.postValue(true) + _selectedKeyIndex.postValue(account.keyIndex) setAccount(account, true) } }