diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9b1949a57..bad45ea16 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -92,7 +92,7 @@ android:windowSoftInputMode="adjustResize" /> (), ListStateHolderListener, OnListItemClickListener, SectionedSelectionController.Callback { @@ -74,7 +75,7 @@ class BookmarksFragment : BaseFragment(), ListStateHo override fun onItemClick(item: Bookmark, view: View) { if (selectionController?.onItemClick(item.manga, item.pageId) != true) { val intent = ReaderActivity.newIntent(view.context, item) - startActivity(intent) + startActivity(intent, scaleUpActivityOptionsOf(view).toBundle()) } } diff --git a/app/src/main/java/org/koitharu/kotatsu/details/ui/ChaptersFragment.kt b/app/src/main/java/org/koitharu/kotatsu/details/ui/ChaptersFragment.kt index 0fb3dce40..c0e5328ac 100644 --- a/app/src/main/java/org/koitharu/kotatsu/details/ui/ChaptersFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/details/ui/ChaptersFragment.kt @@ -1,6 +1,5 @@ package org.koitharu.kotatsu.details.ui -import android.app.ActivityOptions import android.os.Bundle import android.view.* import android.widget.AdapterView @@ -30,7 +29,7 @@ import org.koitharu.kotatsu.reader.ui.ReaderActivity import org.koitharu.kotatsu.reader.ui.ReaderState import org.koitharu.kotatsu.utils.RecyclerViewScrollCallback import org.koitharu.kotatsu.utils.ext.addMenuProvider -import org.koitharu.kotatsu.utils.ext.end +import org.koitharu.kotatsu.utils.ext.scaleUpActivityOptionsOf import kotlin.math.roundToInt class ChaptersFragment : @@ -93,14 +92,13 @@ class ChaptersFragment : (activity as? DetailsActivity)?.showChapterMissingDialog(item.chapter.id) return } - val options = ActivityOptions.makeScaleUpAnimation(view, 0, 0, view.width, view.height) startActivity( ReaderActivity.newIntent( context = view.context, manga = viewModel.manga.value ?: return, state = ReaderState(item.chapter.id, 0, 0), ), - options.toBundle() + scaleUpActivityOptionsOf(view).toBundle() ) } diff --git a/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsFragment.kt b/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsFragment.kt index e8c0af413..9655378bf 100644 --- a/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsFragment.kt @@ -1,6 +1,5 @@ package org.koitharu.kotatsu.details.ui -import android.app.ActivityOptions import android.os.Bundle import android.text.method.LinkMovementMethod import android.view.* @@ -83,8 +82,10 @@ class DetailsFragment : } override fun onItemClick(item: Bookmark, view: View) { - val options = ActivityOptions.makeScaleUpAnimation(view, 0, 0, view.width, view.height) - startActivity(ReaderActivity.newIntent(view.context, item), options.toBundle()) + startActivity( + ReaderActivity.newIntent(view.context, item), + scaleUpActivityOptionsOf(view).toBundle(), + ) } override fun onItemLongClick(item: Bookmark, view: View): Boolean { @@ -277,10 +278,9 @@ class DetailsFragment : ) } R.id.imageView_cover -> { - val options = ActivityOptions.makeScaleUpAnimation(v, 0, 0, v.width, v.height) startActivity( ImageActivity.newIntent(v.context, manga.largeCoverUrl.ifNullOrEmpty { manga.coverUrl }), - options.toBundle() + scaleUpActivityOptionsOf(v).toBundle() ) } } diff --git a/app/src/main/java/org/koitharu/kotatsu/details/ui/scrobbling/ScrobblingInfoBottomSheet.kt b/app/src/main/java/org/koitharu/kotatsu/details/ui/scrobbling/ScrobblingInfoBottomSheet.kt index e03ba4e6c..bea2c7f76 100644 --- a/app/src/main/java/org/koitharu/kotatsu/details/ui/scrobbling/ScrobblingInfoBottomSheet.kt +++ b/app/src/main/java/org/koitharu/kotatsu/details/ui/scrobbling/ScrobblingInfoBottomSheet.kt @@ -1,6 +1,5 @@ package org.koitharu.kotatsu.details.ui.scrobbling -import android.app.ActivityOptions import android.content.Intent import android.os.Bundle import android.text.method.LinkMovementMethod @@ -30,6 +29,7 @@ import org.koitharu.kotatsu.scrobbling.ui.selector.ScrobblingSelectorBottomSheet import org.koitharu.kotatsu.utils.ext.crossfade import org.koitharu.kotatsu.utils.ext.enqueueWith import org.koitharu.kotatsu.utils.ext.getDisplayMessage +import org.koitharu.kotatsu.utils.ext.scaleUpActivityOptionsOf class ScrobblingInfoBottomSheet : BaseBottomSheet(), @@ -93,7 +93,7 @@ class ScrobblingInfoBottomSheet : R.id.button_menu -> menu?.show() R.id.imageView_cover -> { val coverUrl = viewModel.scrobblingInfo.value?.coverUrl ?: return - val options = ActivityOptions.makeScaleUpAnimation(v, 0, 0, v.width, v.height) + val options = scaleUpActivityOptionsOf(v) startActivity(ImageActivity.newIntent(v.context, coverUrl), options.toBundle()) } } diff --git a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/FavouriteCategoriesActivity.kt b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/FavouriteCategoriesActivity.kt index c047541d4..193743334 100644 --- a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/FavouriteCategoriesActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/FavouriteCategoriesActivity.kt @@ -1,6 +1,5 @@ package org.koitharu.kotatsu.favourites.ui.categories -import android.app.ActivityOptions import android.content.Context import android.content.Intent import android.os.Bundle @@ -29,6 +28,7 @@ import org.koitharu.kotatsu.list.ui.model.ListModel import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.utils.ext.getDisplayMessage import org.koitharu.kotatsu.utils.ext.measureHeight +import org.koitharu.kotatsu.utils.ext.scaleUpActivityOptionsOf class FavouriteCategoriesActivity : BaseActivity(), @@ -105,8 +105,7 @@ class FavouriteCategoriesActivity : return } val intent = FavouritesActivity.newIntent(this, item) - val options = - ActivityOptions.makeScaleUpAnimation(view, view.width / 2, view.height / 2, view.width, view.height) + val options = scaleUpActivityOptionsOf(view) startActivity(intent, options.toBundle()) } diff --git a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/adapter/CategoryAD.kt b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/adapter/CategoryAD.kt index 5ca53ad84..b01278817 100644 --- a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/adapter/CategoryAD.kt +++ b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/adapter/CategoryAD.kt @@ -33,8 +33,8 @@ fun categoryAD( ) { val eventListener = object : OnClickListener, OnLongClickListener, OnTouchListener { - override fun onClick(v: View) = clickListener.onItemClick(item.category, v) - override fun onLongClick(v: View) = clickListener.onItemLongClick(item.category, v) + override fun onClick(v: View) = clickListener.onItemClick(item.category, binding.imageViewCover1) + override fun onLongClick(v: View) = clickListener.onItemLongClick(item.category, binding.imageViewCover1) override fun onTouch(v: View?, event: MotionEvent): Boolean = item.isReorderMode && event.actionMasked == MotionEvent.ACTION_DOWN && clickListener.onDragHandleTouch(this@adapterDelegateViewBinding) diff --git a/app/src/main/java/org/koitharu/kotatsu/list/ui/model/ListHeader.kt b/app/src/main/java/org/koitharu/kotatsu/list/ui/model/ListHeader.kt index 94f13444c..15f184160 100644 --- a/app/src/main/java/org/koitharu/kotatsu/list/ui/model/ListHeader.kt +++ b/app/src/main/java/org/koitharu/kotatsu/list/ui/model/ListHeader.kt @@ -3,6 +3,7 @@ package org.koitharu.kotatsu.list.ui.model import androidx.annotation.StringRes import org.koitharu.kotatsu.parsers.model.SortOrder +@Deprecated("") data class ListHeader( val text: CharSequence?, @StringRes val textRes: Int, diff --git a/app/src/main/java/org/koitharu/kotatsu/local/ui/LocalListViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/local/ui/LocalListViewModel.kt index e8490f9d9..c3a38bc9a 100644 --- a/app/src/main/java/org/koitharu/kotatsu/local/ui/LocalListViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/local/ui/LocalListViewModel.kt @@ -16,7 +16,10 @@ import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.download.ui.service.DownloadService import org.koitharu.kotatsu.history.domain.HistoryRepository import org.koitharu.kotatsu.list.ui.MangaListViewModel -import org.koitharu.kotatsu.list.ui.model.* +import org.koitharu.kotatsu.list.ui.model.EmptyState +import org.koitharu.kotatsu.list.ui.model.LoadingState +import org.koitharu.kotatsu.list.ui.model.toErrorState +import org.koitharu.kotatsu.list.ui.model.toUi import org.koitharu.kotatsu.local.domain.LocalMangaRepository import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.utils.SingleLiveEvent @@ -36,7 +39,6 @@ class LocalListViewModel( val importProgress = MutableLiveData(null) private val listError = MutableStateFlow(null) private val mangaList = MutableStateFlow?>(null) - private val headerModel = ListHeader(null, R.string.local_storage, null) private var importJob: Job? = null override val content = combine( @@ -55,15 +57,9 @@ class LocalListViewModel( actionStringRes = R.string._import, ) ) - else -> ArrayList(list.size + 1).apply { - add(headerModel) - list.toUi(this, mode) - } + else -> list.toUi(mode) } - }.asLiveDataDistinct( - viewModelScope.coroutineContext + Dispatchers.Default, - listOf(LoadingState) - ) + }.asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) init { onRefresh() diff --git a/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt b/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt index 7c6f382ca..4a6f8c16a 100644 --- a/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt @@ -260,8 +260,10 @@ class MainActivity : } private fun onOpenReader(manga: Manga) { - // val options = ActivityOptions.makeScaleUpAnimation(binding.fab, 0, 0, binding.fab.width, binding.fab.height) - startActivity(ReaderActivity.newIntent(this, manga)) + val options = binding.fab?.let { + scaleUpActivityOptionsOf(it).toBundle() + } + startActivity(ReaderActivity.newIntent(this, manga), options) } private fun onError(e: Throwable) { diff --git a/app/src/main/java/org/koitharu/kotatsu/search/ui/MangaListActivity.kt b/app/src/main/java/org/koitharu/kotatsu/search/ui/MangaListActivity.kt index 43859bb68..daa0e9f5f 100644 --- a/app/src/main/java/org/koitharu/kotatsu/search/ui/MangaListActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/search/ui/MangaListActivity.kt @@ -31,7 +31,7 @@ class MangaListActivity : BaseActivity() { finishAfterTransition() return } - title = source.title + title = if (source == MangaSource.LOCAL) getString(R.string.local_storage) else source.title val fm = supportFragmentManager if (fm.findFragmentById(R.id.container) == null) { fm.commit { diff --git a/app/src/main/java/org/koitharu/kotatsu/suggestions/ui/SuggestionsViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/suggestions/ui/SuggestionsViewModel.kt index 42f0c093a..40ec8487c 100644 --- a/app/src/main/java/org/koitharu/kotatsu/suggestions/ui/SuggestionsViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/suggestions/ui/SuggestionsViewModel.kt @@ -8,7 +8,10 @@ import kotlinx.coroutines.flow.onStart import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.list.ui.MangaListViewModel -import org.koitharu.kotatsu.list.ui.model.* +import org.koitharu.kotatsu.list.ui.model.EmptyState +import org.koitharu.kotatsu.list.ui.model.LoadingState +import org.koitharu.kotatsu.list.ui.model.toErrorState +import org.koitharu.kotatsu.list.ui.model.toUi import org.koitharu.kotatsu.suggestions.domain.SuggestionRepository import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct import org.koitharu.kotatsu.utils.ext.onFirst @@ -18,8 +21,6 @@ class SuggestionsViewModel( settings: AppSettings, ) : MangaListViewModel(settings) { - private val headerModel = ListHeader(null, R.string.suggestions, null) - override val content = combine( repository.observeAll(), createListModeFlow() @@ -33,10 +34,7 @@ class SuggestionsViewModel( actionStringRes = 0, ) ) - else -> buildList(list.size + 1) { - add(headerModel) - list.toUi(this, mode) - } + else -> list.toUi(mode) } }.onStart { loadingCounter.increment() diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/ext/AndroidExt.kt b/app/src/main/java/org/koitharu/kotatsu/utils/ext/AndroidExt.kt index 175ec6c4c..9a1c726ab 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/ext/AndroidExt.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/ext/AndroidExt.kt @@ -1,5 +1,6 @@ package org.koitharu.kotatsu.utils.ext +import android.app.ActivityOptions import android.content.Context import android.content.SharedPreferences import android.content.pm.ResolveInfo @@ -10,6 +11,7 @@ import android.net.NetworkRequest import android.net.Uri import android.os.Build import android.provider.Settings +import android.view.View import android.view.ViewGroup import android.view.ViewPropertyAnimator import android.view.Window @@ -130,4 +132,12 @@ inline fun ViewGroup.findChild(): T? { inline fun ViewGroup.findDescendant(): T? { return descendants.find { it is T } as? T -} \ No newline at end of file +} + +fun scaleUpActivityOptionsOf(view: View): ActivityOptions = ActivityOptions.makeScaleUpAnimation( + view, + 0, + 0, + view.width, + view.height, +) \ No newline at end of file