diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index bda8001d6..87bd3a768 100755
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -23,7 +23,6 @@
-
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 000000000..e520b8638
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 049601360..b482b7197 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -61,16 +61,16 @@ dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.3'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.3'
- implementation 'androidx.core:core-ktx:1.3.0-beta01'
+ implementation 'androidx.core:core-ktx:1.3.0-rc01'
implementation 'androidx.fragment:fragment-ktx:1.2.4'
implementation 'androidx.appcompat:appcompat:1.2.0-beta01'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta4'
- implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-beta01'
+ implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-rc01'
implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha02'
implementation 'androidx.viewpager2:viewpager2:1.1.0-alpha01'
- implementation 'androidx.preference:preference:1.1.0'
+ implementation 'androidx.preference:preference-ktx:1.1.1'
implementation 'androidx.work:work-runtime-ktx:2.3.4'
- implementation 'com.google.android.material:material:1.2.0-alpha05'
+ implementation 'com.google.android.material:material:1.2.0-alpha06'
implementation 'androidx.room:room-runtime:2.2.5'
implementation 'androidx.room:room-ktx:2.2.5'
@@ -86,7 +86,7 @@ dependencies {
implementation 'com.squareup.okio:okio:2.5.0'
implementation 'org.jsoup:jsoup:1.13.1'
- implementation 'org.koin:koin-android:2.1.4'
+ implementation 'org.koin:koin-android:2.1.5'
implementation 'io.coil-kt:coil:0.9.5'
implementation 'com.davemorrissey.labs:subsampling-scale-image-view:3.10.0'
implementation 'com.tomclaw.cache:cache:1.0'
diff --git a/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt b/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt
index f3bdb6e05..22d02b08b 100644
--- a/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt
+++ b/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt
@@ -73,6 +73,11 @@ class AppSettings private constructor(resources: Resources, private val prefs: S
true
)
+ val readerAnimation by BoolPreferenceDelegate(
+ resources.getString(R.string.key_reader_animation),
+ false
+ )
+
private var sourcesOrderStr by NullableStringPreferenceDelegate(resources.getString(R.string.key_sources_order))
var sourcesOrder: List
diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/details/ChaptersFragment.kt b/app/src/main/java/org/koitharu/kotatsu/ui/details/ChaptersFragment.kt
index 84585a070..0dec517ec 100644
--- a/app/src/main/java/org/koitharu/kotatsu/ui/details/ChaptersFragment.kt
+++ b/app/src/main/java/org/koitharu/kotatsu/ui/details/ChaptersFragment.kt
@@ -1,5 +1,6 @@
package org.koitharu.kotatsu.ui.details
+import android.app.ActivityOptions
import android.os.Bundle
import android.view.View
import androidx.core.view.isVisible
@@ -68,12 +69,19 @@ class ChaptersFragment : BaseFragment(R.layout.fragment_chapters), MangaDetailsV
override fun onFavouriteChanged(categories: List) = Unit
override fun onItemClick(item: MangaChapter, position: Int, view: View) {
+ val options = ActivityOptions.makeScaleUpAnimation(
+ view,
+ 0,
+ 0,
+ view.measuredWidth,
+ view.measuredHeight
+ )
startActivity(
ReaderActivity.newIntent(
context ?: return,
manga ?: return,
item.id
- )
+ ), options.toBundle()
)
}
diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/MainActivity.kt b/app/src/main/java/org/koitharu/kotatsu/ui/main/MainActivity.kt
index f68e9558f..1e16a5811 100644
--- a/app/src/main/java/org/koitharu/kotatsu/ui/main/MainActivity.kt
+++ b/app/src/main/java/org/koitharu/kotatsu/ui/main/MainActivity.kt
@@ -1,9 +1,11 @@
package org.koitharu.kotatsu.ui.main
+import android.app.ActivityOptions
import android.content.SharedPreferences
import android.content.res.ColorStateList
import android.content.res.Configuration
import android.graphics.Color
+import android.os.Build
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
@@ -45,7 +47,6 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
-
drawerToggle =
ActionBarDrawerToggle(this, drawer, toolbar, R.string.open_menu, R.string.close_menu)
drawer.addDrawerListener(drawerToggle)
@@ -119,7 +120,16 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
}
override fun onOpenReader(state: ReaderState) {
- startActivity(ReaderActivity.newIntent(this, state))
+ val options = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ ActivityOptions.makeClipRevealAnimation(
+ fab, 0, 0, fab.measuredWidth, fab.measuredHeight
+ )
+ } else {
+ ActivityOptions.makeScaleUpAnimation(
+ fab, 0, 0, fab.measuredWidth, fab.measuredHeight
+ )
+ }
+ startActivity(ReaderActivity.newIntent(this, state), options?.toBundle())
}
override fun onError(e: Throwable) {
diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListFragment.kt b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListFragment.kt
index 2f34178be..d94f1500c 100644
--- a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListFragment.kt
+++ b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListFragment.kt
@@ -237,6 +237,7 @@ abstract class MangaListFragment : BaseFragment(R.layout.fragment_list), Mang
ListMode.GRID -> GridLayoutManager(ctx, UiUtils.resolveGridSpanCount(ctx))
else -> LinearLayoutManager(ctx)
}
+ recyclerView.recycledViewPool.clear()
recyclerView.adapter = adapter
recyclerView.addItemDecoration(
when (mode) {
diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/reader/standard/PageAnimTransformer.kt b/app/src/main/java/org/koitharu/kotatsu/ui/reader/standard/PageAnimTransformer.kt
new file mode 100644
index 000000000..584f7cf64
--- /dev/null
+++ b/app/src/main/java/org/koitharu/kotatsu/ui/reader/standard/PageAnimTransformer.kt
@@ -0,0 +1,36 @@
+package org.koitharu.kotatsu.ui.reader.standard
+
+import android.view.View
+import androidx.viewpager2.widget.ViewPager2
+
+class PageAnimTransformer : ViewPager2.PageTransformer {
+
+ override fun transformPage(page: View, position: Float) {
+ page.apply {
+ val pageWidth = width
+ when {
+ position < -1 -> alpha = 0f
+ position <= 0 -> { // [-1,0]
+ alpha = 1f
+ translationX = 0f
+ translationZ = 0f
+ scaleX = 1 + FACTOR * position
+ scaleY = 1f
+ }
+ position <= 1 -> { // (0,1]
+ alpha = 1f
+ translationX = pageWidth * -position
+ translationZ = -1f
+ scaleX = 1f
+ scaleY = 1f
+ }
+ else -> alpha = 0f
+ }
+ }
+ }
+
+ private companion object {
+
+ const val FACTOR = 0.1f
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/reader/standard/PagerReaderFragment.kt b/app/src/main/java/org/koitharu/kotatsu/ui/reader/standard/PagerReaderFragment.kt
index 934966e6f..a0168839d 100644
--- a/app/src/main/java/org/koitharu/kotatsu/ui/reader/standard/PagerReaderFragment.kt
+++ b/app/src/main/java/org/koitharu/kotatsu/ui/reader/standard/PagerReaderFragment.kt
@@ -1,10 +1,14 @@
package org.koitharu.kotatsu.ui.reader.standard
+import android.content.Context
+import android.content.SharedPreferences
import android.os.Bundle
import android.view.View
import kotlinx.android.synthetic.main.fragment_reader_standard.*
+import org.koin.android.ext.android.inject
import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.core.model.MangaPage
+import org.koitharu.kotatsu.core.prefs.AppSettings
import org.koitharu.kotatsu.ui.reader.ReaderState
import org.koitharu.kotatsu.ui.reader.base.AbstractReader
import org.koitharu.kotatsu.ui.reader.base.BaseReaderAdapter
@@ -12,19 +16,34 @@ import org.koitharu.kotatsu.ui.reader.base.GroupedList
import org.koitharu.kotatsu.utils.ext.doOnPageChanged
import org.koitharu.kotatsu.utils.ext.withArgs
-class PagerReaderFragment : AbstractReader(R.layout.fragment_reader_standard) {
+class PagerReaderFragment : AbstractReader(R.layout.fragment_reader_standard),
+ SharedPreferences.OnSharedPreferenceChangeListener {
private var paginationListener: PagerPaginationListener? = null
+ private val settings by inject()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
paginationListener = PagerPaginationListener(adapter!!, 2, this)
pager.adapter = adapter
+ if (settings.readerAnimation) {
+ pager.setPageTransformer(PageAnimTransformer())
+ }
pager.offscreenPageLimit = 2
pager.registerOnPageChangeCallback(paginationListener!!)
pager.doOnPageChanged(::notifyPageChanged)
}
+ override fun onAttach(context: Context) {
+ super.onAttach(context)
+ settings.subscribe(this)
+ }
+
+ override fun onDetach() {
+ settings.unsubscribe(this)
+ super.onDetach()
+ }
+
override fun onDestroyView() {
paginationListener = null
super.onDestroyView()
@@ -47,6 +66,18 @@ class PagerReaderFragment : AbstractReader(R.layout.fragment_reader_standard) {
override fun restorePageScroll(position: Int, scroll: Float) = Unit
+ override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
+ when (key) {
+ getString(R.string.key_reader_animation) -> {
+ if (settings.readerAnimation) {
+ pager.setPageTransformer(PageAnimTransformer())
+ } else {
+ pager.setPageTransformer(null)
+ }
+ }
+ }
+ }
+
companion object {
fun newInstance(state: ReaderState) = PagerReaderFragment().withArgs(1) {
diff --git a/app/src/main/res/layout/dialog_favorite_categories.xml b/app/src/main/res/layout/dialog_favorite_categories.xml
index 3c0668c4c..bb45c4550 100644
--- a/app/src/main/res/layout/dialog_favorite_categories.xml
+++ b/app/src/main/res/layout/dialog_favorite_categories.xml
@@ -26,6 +26,7 @@
android:layout_height="wrap_content"
android:orientation="vertical"
android:scrollbars="vertical"
+ android:overScrollMode="never"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/item_category_checkable" />
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index ac2d48d4a..817bc82bf 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -131,5 +131,6 @@
Здесь будет оборажаться манга, которую Вы читаете. Вы можете найти, что почитать, в боковом меню
У Вас пока нет сохранённой манги. Вы можете сохранить мангу из онлайн каталога или импортировать из файла
Полка с мангой
- Recent manga
+ Недавняя манга
+ Анимация листания
\ No newline at end of file
diff --git a/app/src/main/res/values/constants.xml b/app/src/main/res/values/constants.xml
index 16921fa9d..f46ccf0fc 100644
--- a/app/src/main/res/values/constants.xml
+++ b/app/src/main/res/values/constants.xml
@@ -19,6 +19,7 @@
notifications_sound
notifications_vibrate
notifications_light
+ reader_animation
domain
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ae01da578..0a1b6791f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -133,4 +133,5 @@
You have not any saved manga yet. You can save it from online sources or import from file
Manga shelf
Recent manga
+ Pages animation
\ No newline at end of file
diff --git a/app/src/main/res/xml/pref_main.xml b/app/src/main/res/xml/pref_main.xml
index 23e193ef6..65e159f2d 100644
--- a/app/src/main/res/xml/pref_main.xml
+++ b/app/src/main/res/xml/pref_main.xml
@@ -51,6 +51,12 @@
app:allowDividerAbove="true"
app:iconSpaceReserved="false" />
+
+
+
+
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 30ef65d92..34514cebf 100644
--- a/build.gradle
+++ b/build.gradle
@@ -9,7 +9,7 @@ buildscript {
}
}
dependencies {
- classpath 'com.android.tools.build:gradle:4.1.0-alpha05'
+ classpath 'com.android.tools.build:gradle:4.1.0-alpha06'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 19bece88e..6abb2b438 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Sat Mar 28 11:01:15 EET 2020
+#Sat Apr 18 10:00:24 EEST 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.4-rc-1-all.zip