From 3cca4623ada9f95c84a6c57eb7c4a03912298eeb Mon Sep 17 00:00:00 2001 From: Bnyro Date: Wed, 19 Mar 2025 21:00:27 +0100 Subject: [PATCH] feat: add full local mode option to home screen --- .../libretube/ui/activities/MainActivity.kt | 6 +- .../ui/activities/WelcomeActivity.kt | 16 +++- .../libretube/ui/models/WelcomeViewModel.kt | 15 +++- app/src/main/res/layout/activity_welcome.xml | 87 +++++++++++++++---- 4 files changed, 101 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt b/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt index 1830ec8a9..00165c914 100644 --- a/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt +++ b/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt @@ -108,7 +108,11 @@ class MainActivity : BaseActivity() { startActivity(noInternetIntent) finish() return - } else if (PreferenceHelper.getString(PreferenceKeys.FETCH_INSTANCE, "").isEmpty()) { + } + + val isAppConfigured = PreferenceHelper.getBoolean(PreferenceKeys.LOCAL_FEED_EXTRACTION, false) || + PreferenceHelper.getString(PreferenceKeys.FETCH_INSTANCE, "").isNotEmpty() + if (!isAppConfigured) { val welcomeIntent = Intent(this, WelcomeActivity::class.java) startActivity(welcomeIntent) finish() diff --git a/app/src/main/java/com/github/libretube/ui/activities/WelcomeActivity.kt b/app/src/main/java/com/github/libretube/ui/activities/WelcomeActivity.kt index 46b003634..19a6d2e00 100644 --- a/app/src/main/java/com/github/libretube/ui/activities/WelcomeActivity.kt +++ b/app/src/main/java/com/github/libretube/ui/activities/WelcomeActivity.kt @@ -7,6 +7,7 @@ import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.viewModels import androidx.core.view.isGone +import androidx.core.view.isVisible import com.github.libretube.databinding.ActivityWelcomeBinding import com.github.libretube.ui.adapters.InstancesAdapter import com.github.libretube.ui.base.BaseActivity @@ -36,18 +37,25 @@ class WelcomeActivity : BaseActivity() { binding.instancesRecycler.adapter = adapter binding.okay.setOnClickListener { - viewModel.saveSelectedInstance() + viewModel.onConfirmSettings() } binding.restore.setOnClickListener { restoreFilePicker.launch(BackupRestoreSettings.JSON) } - viewModel.uiState.observe(this) { (selectedIndex, instances, error, navigateToMain) -> - binding.okay.isEnabled = selectedIndex != null + binding.operationModeGroup.addOnButtonCheckedListener { _, checkedId, isChecked -> + if (checkedId == binding.fullLocalModeToggleGroupButton.id) viewModel.setFullLocalModeEnabled(isChecked) + } + + viewModel.uiState.observe(this) { (fullLocalMode, selectedIndex, instances, error, navigateToMain) -> + binding.okay.isEnabled = fullLocalMode || selectedIndex != null binding.progress.isGone = instances.isNotEmpty() - adapter.submitList(instances) + binding.instancesContainer.isVisible = !fullLocalMode + binding.localModeInfoContainer.isVisible = fullLocalMode + + if (!fullLocalMode) adapter.submitList(instances) error?.let { Toast.makeText(this, it, Toast.LENGTH_LONG).show() diff --git a/app/src/main/java/com/github/libretube/ui/models/WelcomeViewModel.kt b/app/src/main/java/com/github/libretube/ui/models/WelcomeViewModel.kt index e21e40b60..1da24cb74 100644 --- a/app/src/main/java/com/github/libretube/ui/models/WelcomeViewModel.kt +++ b/app/src/main/java/com/github/libretube/ui/models/WelcomeViewModel.kt @@ -46,13 +46,23 @@ class WelcomeViewModel( } } + fun setFullLocalModeEnabled(enabled: Boolean) { + savedStateHandle[UI_STATE] = _uiState.value.copy(fullLocalMode = enabled) + } + fun setSelectedInstanceIndex(index: Int) { savedStateHandle[UI_STATE] = _uiState.value.copy(selectedInstanceIndex = index) } - fun saveSelectedInstance() { + fun onConfirmSettings() { + val fullLocalMode = _uiState.value.fullLocalMode val selectedInstanceIndex = _uiState.value.selectedInstanceIndex - if (selectedInstanceIndex == null) { + + if (fullLocalMode) { + PreferenceHelper.putBoolean(PreferenceKeys.FULL_LOCAL_MODE, true) + PreferenceHelper.putBoolean(PreferenceKeys.LOCAL_FEED_EXTRACTION, true) + refreshAndNavigate() + } else if (selectedInstanceIndex == null) { savedStateHandle[UI_STATE] = _uiState.value.copy(error = R.string.choose_instance) } else { PreferenceHelper.putString( @@ -91,6 +101,7 @@ class WelcomeViewModel( @Parcelize data class UiState( + val fullLocalMode: Boolean = false, val selectedInstanceIndex: Int? = null, val instances: List = emptyList(), @StringRes val error: Int? = null, diff --git a/app/src/main/res/layout/activity_welcome.xml b/app/src/main/res/layout/activity_welcome.xml index 48c40bef3..630dd655a 100644 --- a/app/src/main/res/layout/activity_welcome.xml +++ b/app/src/main/res/layout/activity_welcome.xml @@ -45,13 +45,6 @@ android:text="@string/welcome" android:textSize="18sp" /> - - - + android:orientation="vertical"> + + + + + + + + + + + + + + + + + + + + + + +