Use Jetpack Compose for interceptor activity
This commit is contained in:
parent
bda2f81c66
commit
9051178701
@ -2,19 +2,33 @@ package exh.ui.intercept
|
|||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.MenuItem
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.core.view.isVisible
|
import androidx.compose.foundation.layout.Column
|
||||||
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
|
import androidx.compose.foundation.layout.padding
|
||||||
|
import androidx.compose.foundation.layout.size
|
||||||
|
import androidx.compose.material3.CircularProgressIndicator
|
||||||
|
import androidx.compose.material3.MaterialTheme
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.collectAsState
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.res.stringResource
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import eu.kanade.domain.chapter.model.Chapter
|
import eu.kanade.domain.chapter.model.Chapter
|
||||||
import eu.kanade.domain.manga.model.Manga
|
import eu.kanade.domain.manga.model.Manga
|
||||||
|
import eu.kanade.presentation.components.AppBar
|
||||||
|
import eu.kanade.presentation.components.Scaffold
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.databinding.EhActivityInterceptBinding
|
|
||||||
import eu.kanade.tachiyomi.source.online.UrlImportableSource
|
import eu.kanade.tachiyomi.source.online.UrlImportableSource
|
||||||
import eu.kanade.tachiyomi.ui.base.activity.BaseActivity
|
import eu.kanade.tachiyomi.ui.base.activity.BaseActivity
|
||||||
import eu.kanade.tachiyomi.ui.main.MainActivity
|
import eu.kanade.tachiyomi.ui.main.MainActivity
|
||||||
import eu.kanade.tachiyomi.ui.manga.MangaController
|
import eu.kanade.tachiyomi.ui.manga.MangaController
|
||||||
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
|
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
|
||||||
|
import eu.kanade.tachiyomi.util.view.setComposeContent
|
||||||
import exh.GalleryAddEvent
|
import exh.GalleryAddEvent
|
||||||
import exh.GalleryAdder
|
import exh.GalleryAdder
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
@ -27,35 +41,60 @@ import kotlinx.coroutines.launch
|
|||||||
class InterceptActivity : BaseActivity() {
|
class InterceptActivity : BaseActivity() {
|
||||||
private var statusJob: Job? = null
|
private var statusJob: Job? = null
|
||||||
|
|
||||||
lateinit var binding: EhActivityInterceptBinding
|
private val status: MutableStateFlow<InterceptResult> = MutableStateFlow(InterceptResult.Idle)
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
binding = EhActivityInterceptBinding.inflate(layoutInflater)
|
setComposeContent {
|
||||||
setContentView(binding.root)
|
InterceptActivityContent(status.collectAsState().value)
|
||||||
|
}
|
||||||
// Show back button
|
|
||||||
setSupportActionBar(binding.toolbar)
|
|
||||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
|
||||||
|
|
||||||
processLink()
|
processLink()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processLink() {
|
@Composable
|
||||||
if (Intent.ACTION_VIEW == intent.action) {
|
private fun InterceptActivityContent(status: InterceptResult) {
|
||||||
binding.interceptProgress.isVisible = true
|
Scaffold(
|
||||||
binding.interceptStatus.setText(R.string.loading_manga)
|
topBar = {
|
||||||
loadGallery(intent.dataString!!)
|
AppBar(
|
||||||
|
title = stringResource(R.string.app_name),
|
||||||
|
navigateUp = ::onBackPressed,
|
||||||
|
)
|
||||||
|
},
|
||||||
|
) {
|
||||||
|
Column(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxSize()
|
||||||
|
.padding(it),
|
||||||
|
horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
|
verticalArrangement = Arrangement.spacedBy(8.dp, Alignment.CenterVertically),
|
||||||
|
) {
|
||||||
|
when (status) {
|
||||||
|
InterceptResult.Idle, InterceptResult.Loading -> {
|
||||||
|
Text(
|
||||||
|
text = stringResource(R.string.loading_manga),
|
||||||
|
style = MaterialTheme.typography.titleLarge,
|
||||||
|
)
|
||||||
|
CircularProgressIndicator(modifier = Modifier.size(56.dp))
|
||||||
|
}
|
||||||
|
is InterceptResult.Success -> Text(
|
||||||
|
text = stringResource(R.string.launching_app),
|
||||||
|
style = MaterialTheme.typography.titleLarge,
|
||||||
|
)
|
||||||
|
is InterceptResult.Failure -> Text(
|
||||||
|
text = stringResource(R.string.error_with_reason, status.reason),
|
||||||
|
style = MaterialTheme.typography.titleLarge,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
private fun processLink() {
|
||||||
when (item.itemId) {
|
if (Intent.ACTION_VIEW == intent.action) {
|
||||||
android.R.id.home -> onBackPressed()
|
loadGallery(intent.dataString!!)
|
||||||
else -> return super.onOptionsItemSelected(item)
|
|
||||||
}
|
}
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
@ -65,8 +104,6 @@ class InterceptActivity : BaseActivity() {
|
|||||||
.onEach {
|
.onEach {
|
||||||
when (it) {
|
when (it) {
|
||||||
is InterceptResult.Success -> {
|
is InterceptResult.Success -> {
|
||||||
binding.interceptProgress.isVisible = false
|
|
||||||
binding.interceptStatus.setText(R.string.launching_app)
|
|
||||||
onBackPressed()
|
onBackPressed()
|
||||||
startActivity(
|
startActivity(
|
||||||
if (it.chapter != null) {
|
if (it.chapter != null) {
|
||||||
@ -80,8 +117,6 @@ class InterceptActivity : BaseActivity() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
is InterceptResult.Failure -> {
|
is InterceptResult.Failure -> {
|
||||||
binding.interceptProgress.isVisible = false
|
|
||||||
binding.interceptStatus.text = getString(R.string.error_with_reason, it.reason)
|
|
||||||
MaterialAlertDialogBuilder(this)
|
MaterialAlertDialogBuilder(this)
|
||||||
.setTitle(R.string.chapter_error)
|
.setTitle(R.string.chapter_error)
|
||||||
.setMessage(getString(R.string.could_not_open_manga, it.reason))
|
.setMessage(getString(R.string.could_not_open_manga, it.reason))
|
||||||
@ -90,8 +125,7 @@ class InterceptActivity : BaseActivity() {
|
|||||||
.setOnDismissListener { onBackPressed() }
|
.setOnDismissListener { onBackPressed() }
|
||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
InterceptResult.Idle -> Unit
|
else -> Unit
|
||||||
InterceptResult.Loading -> Unit
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.launchIn(lifecycleScope)
|
.launchIn(lifecycleScope)
|
||||||
@ -104,8 +138,6 @@ class InterceptActivity : BaseActivity() {
|
|||||||
|
|
||||||
private val galleryAdder = GalleryAdder()
|
private val galleryAdder = GalleryAdder()
|
||||||
|
|
||||||
val status: MutableStateFlow<InterceptResult> = MutableStateFlow(InterceptResult.Idle)
|
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
fun loadGallery(gallery: String) {
|
fun loadGallery(gallery: String) {
|
||||||
// Do not load gallery if already loading
|
// Do not load gallery if already loading
|
||||||
@ -126,7 +158,6 @@ class InterceptActivity : BaseActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Synchronized
|
|
||||||
private fun loadGalleryEnd(gallery: String, source: UrlImportableSource? = null) {
|
private fun loadGalleryEnd(gallery: String, source: UrlImportableSource? = null) {
|
||||||
// Load gallery async
|
// Load gallery async
|
||||||
lifecycleScope.launch(Dispatchers.IO) {
|
lifecycleScope.launch(Dispatchers.IO) {
|
||||||
|
@ -1,51 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<com.google.android.material.appbar.TachiyomiAppBarLayout
|
|
||||||
android:id="@+id/appbar"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
app:elevation="0dp">
|
|
||||||
|
|
||||||
<com.google.android.material.appbar.MaterialToolbar
|
|
||||||
android:id="@+id/toolbar"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="?attr/actionBarSize"
|
|
||||||
android:theme="?attr/actionBarTheme"/>
|
|
||||||
|
|
||||||
</com.google.android.material.appbar.TachiyomiAppBarLayout>
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_gravity="center"
|
|
||||||
android:gravity="center"
|
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/intercept_status"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="8dp"
|
|
||||||
android:text="@string/loading_manga"
|
|
||||||
android:textAppearance="?attr/textAppearanceTitleLarge" />
|
|
||||||
|
|
||||||
<com.google.android.material.progressindicator.CircularProgressIndicator
|
|
||||||
android:id="@+id/intercept_progress"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center"
|
|
||||||
android:indeterminate="true"
|
|
||||||
app:indicatorSize="56dp"/>
|
|
||||||
</LinearLayout>
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
|
Loading…
x
Reference in New Issue
Block a user