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 b4d32844d3..ef2cc37f2c 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
@@ -3,6 +3,7 @@ package com.github.libretube.ui.activities
import android.content.Intent
import android.os.Bundle
import android.widget.Toast
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.view.isGone
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.get
@@ -10,15 +11,34 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.github.libretube.R
import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.databinding.ActivityWelcomeBinding
+import com.github.libretube.helpers.BackupHelper
import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.ui.adapters.InstancesAdapter
import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.models.WelcomeModel
+import com.github.libretube.ui.preferences.BackupRestoreSettings
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
class WelcomeActivity : BaseActivity() {
private lateinit var binding: ActivityWelcomeBinding
private var viewModel: WelcomeModel? = null
+ private val restoreFilePicker =
+ registerForActivityResult(ActivityResultContracts.GetContent()) { uri ->
+ if (uri == null) return@registerForActivityResult
+ CoroutineScope(Dispatchers.IO).launch {
+ BackupHelper.restoreAdvancedBackup(this@WelcomeActivity, uri)
+
+ // only skip the welcome activity if the restored backup contains an instance
+ if (PreferenceHelper.getString(PreferenceKeys.FETCH_INSTANCE, "").isNotEmpty()) {
+ withContext(Dispatchers.Main) { startMainActivity() }
+ }
+ }
+ }
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProvider(this).get()
@@ -26,6 +46,7 @@ class WelcomeActivity : BaseActivity() {
binding = ActivityWelcomeBinding.inflate(layoutInflater)
setContentView(binding.root)
+ // ALl the binding values are optional due to two different possible layouts (normal, landscape)
viewModel!!.instances.observe(this) { instances ->
binding.instancesRecycler?.layoutManager = LinearLayoutManager(this@WelcomeActivity)
binding.instancesRecycler?.adapter = InstancesAdapter(instances, viewModel!!) { index ->
@@ -42,12 +63,20 @@ class WelcomeActivity : BaseActivity() {
val selectedInstance =
viewModel!!.instances.value!![viewModel!!.selectedInstanceIndex.value!!]
PreferenceHelper.putString(PreferenceKeys.FETCH_INSTANCE, selectedInstance.apiUrl)
- val mainActivityIntent = Intent(this@WelcomeActivity, MainActivity::class.java)
- startActivity(mainActivityIntent)
- finish()
+ startMainActivity()
} else {
Toast.makeText(this, R.string.choose_instance, Toast.LENGTH_LONG).show()
}
}
+
+ binding.restore?.setOnClickListener {
+ restoreFilePicker.launch(BackupRestoreSettings.JSON)
+ }
+ }
+
+ private fun startMainActivity() {
+ val mainActivityIntent = Intent(this@WelcomeActivity, MainActivity::class.java)
+ startActivity(mainActivityIntent)
+ finish()
}
}
diff --git a/app/src/main/java/com/github/libretube/ui/preferences/BackupRestoreSettings.kt b/app/src/main/java/com/github/libretube/ui/preferences/BackupRestoreSettings.kt
index 37b87be9d1..68f844e0e6 100644
--- a/app/src/main/java/com/github/libretube/ui/preferences/BackupRestoreSettings.kt
+++ b/app/src/main/java/com/github/libretube/ui/preferences/BackupRestoreSettings.kt
@@ -52,10 +52,11 @@ class BackupRestoreSettings : BasePreferenceFragment() {
override val titleResourceId: Int = R.string.backup_restore
// backup and restore database
- private val getBackupFile = registerForActivityResult(ActivityResultContracts.GetContent()) {
- it?.let {
+ private val getBackupFile =
+ registerForActivityResult(ActivityResultContracts.GetContent()) { uri ->
+ if (uri == null) return@registerForActivityResult
CoroutineScope(Dispatchers.IO).launch {
- BackupHelper.restoreAdvancedBackup(requireContext(), it)
+ BackupHelper.restoreAdvancedBackup(requireContext(), uri)
withContext(Dispatchers.Main) {
// could fail if fragment is already closed
runCatching {
@@ -64,12 +65,10 @@ class BackupRestoreSettings : BasePreferenceFragment() {
}
}
}
- }
- private val createBackupFile = registerForActivityResult(CreateDocument(JSON)) {
- it?.let {
- CoroutineScope(Dispatchers.IO).launch {
- BackupHelper.createAdvancedBackup(requireContext(), it, backupFile)
- }
+ private val createBackupFile = registerForActivityResult(CreateDocument(JSON)) { uri ->
+ if (uri == null) return@registerForActivityResult
+ CoroutineScope(Dispatchers.IO).launch {
+ BackupHelper.createAdvancedBackup(requireContext(), uri, backupFile)
}
}
@@ -78,19 +77,17 @@ class BackupRestoreSettings : BasePreferenceFragment() {
*/
private val getSubscriptionsFile = registerForActivityResult(
ActivityResultContracts.GetContent()
- ) {
- it?.let {
- lifecycleScope.launch(Dispatchers.IO) {
- ImportHelper.importSubscriptions(requireActivity(), it, importFormat)
- }
+ ) { uri ->
+ if (uri == null) return@registerForActivityResult
+ lifecycleScope.launch(Dispatchers.IO) {
+ ImportHelper.importSubscriptions(requireActivity(), uri, importFormat)
}
}
- private val createSubscriptionsFile = registerForActivityResult(CreateDocument(JSON)) {
- it?.let {
- lifecycleScope.launch(Dispatchers.IO) {
- ImportHelper.exportSubscriptions(requireActivity(), it, importFormat)
- }
+ private val createSubscriptionsFile = registerForActivityResult(CreateDocument(JSON)) { uri ->
+ if (uri == null) return@registerForActivityResult
+ lifecycleScope.launch(Dispatchers.IO) {
+ ImportHelper.exportSubscriptions(requireActivity(), uri, importFormat)
}
}
@@ -197,6 +194,6 @@ class BackupRestoreSettings : BasePreferenceFragment() {
}
companion object {
- private const val JSON = "application/json"
+ const val JSON = "application/json"
}
}
diff --git a/app/src/main/res/layout-land/activity_welcome.xml b/app/src/main/res/layout-land/activity_welcome.xml
index c7bf5acb1e..f6777cbfd9 100644
--- a/app/src/main/res/layout-land/activity_welcome.xml
+++ b/app/src/main/res/layout-land/activity_welcome.xml
@@ -66,16 +66,29 @@
-
+ android:layout_marginBottom="5dp">
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_welcome.xml b/app/src/main/res/layout/activity_welcome.xml
index 56b1d15ee1..df99d84306 100644
--- a/app/src/main/res/layout/activity_welcome.xml
+++ b/app/src/main/res/layout/activity_welcome.xml
@@ -54,15 +54,28 @@
-
+ android:layout_marginBottom="5dp">
+
+
+
+
+
+
\ No newline at end of file