mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-29 16:30:31 +05:30
[Welcome Activity] Add button to restore backup and skip instance selection
This commit is contained in:
parent
1cffeeb9c9
commit
ee302dc166
@ -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()
|
||||
}
|
||||
}
|
||||
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
@ -66,16 +66,29 @@
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@id/okay"
|
||||
android:layout_width="wrap_content"
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="end"
|
||||
android:layout_marginHorizontal="15dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginEnd="15dp"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:alpha="0.5"
|
||||
android:text="@string/okay" />
|
||||
android:layout_marginBottom="5dp">
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@id/restore"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="start"
|
||||
android:text="@string/restore" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@id/okay"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="end"
|
||||
android:alpha="0.5"
|
||||
android:text="@string/okay" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
@ -54,15 +54,28 @@
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/okay"
|
||||
android:layout_width="wrap_content"
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="end"
|
||||
android:layout_marginHorizontal="15dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginEnd="15dp"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:alpha="0.5"
|
||||
android:text="@string/okay" />
|
||||
android:layout_marginBottom="5dp">
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/restore"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="start"
|
||||
android:text="@string/restore" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/okay"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="end"
|
||||
android:alpha="0.5"
|
||||
android:text="@string/okay" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
</LinearLayout>
|
Loading…
x
Reference in New Issue
Block a user