diff --git a/app/src/main/java/ani/dantotsu/media/manga/mangareader/BaseImageAdapter.kt b/app/src/main/java/ani/dantotsu/media/manga/mangareader/BaseImageAdapter.kt index 6a18b9e8..d1732b5a 100644 --- a/app/src/main/java/ani/dantotsu/media/manga/mangareader/BaseImageAdapter.kt +++ b/app/src/main/java/ani/dantotsu/media/manga/mangareader/BaseImageAdapter.kt @@ -89,7 +89,7 @@ abstract class BaseImageAdapter( } } else { val detector = GestureDetectorCompat(view.context, object : GesturesListener() { - override fun onSingleClick(event: MotionEvent) = activity.handleController() + override fun onSingleClick(event: MotionEvent) = activity.handleController(event = event) }) view.findViewById(R.id.imgProgCover).apply { setOnTouchListener { _, event -> @@ -112,6 +112,9 @@ abstract class BaseImageAdapter( activity.lifecycleScope.launch { loadImage(holder.bindingAdapterPosition, view) } } + abstract fun isZoomed(): Boolean + abstract fun setZoom(zoom: Float) + abstract suspend fun loadImage(position: Int, parent: View): Boolean companion object { diff --git a/app/src/main/java/ani/dantotsu/media/manga/mangareader/ImageAdapter.kt b/app/src/main/java/ani/dantotsu/media/manga/mangareader/ImageAdapter.kt index 97651499..45ae40f0 100644 --- a/app/src/main/java/ani/dantotsu/media/manga/mangareader/ImageAdapter.kt +++ b/app/src/main/java/ani/dantotsu/media/manga/mangareader/ImageAdapter.kt @@ -91,4 +91,14 @@ open class ImageAdapter( } override fun getItemCount(): Int = images.size + + override fun isZoomed(): Boolean { + val imageView = activity.findViewById(R.id.imgProgImageNoGestures) + return imageView.scale > imageView.minScale + } + + override fun setZoom(zoom: Float) { + val imageView = activity.findViewById(R.id.imgProgImageNoGestures) + imageView.setScaleAndCenter(zoom, imageView.center) + } } diff --git a/app/src/main/java/ani/dantotsu/media/manga/mangareader/MangaReaderActivity.kt b/app/src/main/java/ani/dantotsu/media/manga/mangareader/MangaReaderActivity.kt index d6d72871..067ee56f 100644 --- a/app/src/main/java/ani/dantotsu/media/manga/mangareader/MangaReaderActivity.kt +++ b/app/src/main/java/ani/dantotsu/media/manga/mangareader/MangaReaderActivity.kt @@ -6,6 +6,7 @@ import android.app.AlertDialog import android.content.Context import android.content.Intent import android.content.res.Configuration +import android.content.res.Resources import android.graphics.Bitmap import android.os.Build import android.os.Bundle @@ -702,8 +703,60 @@ class MangaReaderActivity : AppCompatActivity() { goneTimer.schedule(timerTask, controllerDuration) } - fun handleController(shouldShow: Boolean? = null) { + enum class pressPos { + LEFT, RIGHT, CENTER + } + + fun handleController(shouldShow: Boolean? = null, event: MotionEvent? = null) { + var pressLocation = pressPos.CENTER if (!sliding) { + if (event != null && settings.default.layout == PAGED) { + if (event.action != MotionEvent.ACTION_UP) return + val x = event.rawX.toInt() + val y = event.rawY.toInt() + val screenWidth = Resources.getSystem().displayMetrics.widthPixels + //if in the 1st 1/5th of the screen width, left and lower than 1/5th of the screen height, left + if (screenWidth / 5 in (x + 1).. screenWidth - screenWidth / 5 && y > screenWidth / 5) { + pressLocation = if (settings.default.direction == RIGHT_TO_LEFT) { + pressPos.LEFT + } else { + pressPos.RIGHT + } + } + } + + // if pressLocation is left or right go to previous or next page (paged mode only) + if (pressLocation == pressPos.LEFT) { + + if (binding.mangaReaderPager.currentItem > 0) { + //if the current images zoomed in, go back to normal before going to previous page + if (imageAdapter?.isZoomed() == true) { + imageAdapter?.setZoom(1f) + } + binding.mangaReaderPager.currentItem -= 1 + return + } + + } else if (pressLocation == pressPos.RIGHT) { + if (binding.mangaReaderPager.currentItem < maxChapterPage - 1) { + //if the current images zoomed in, go back to normal before going to next page + if (imageAdapter?.isZoomed() == true) { + imageAdapter?.setZoom(1f) + } + //if right to left, go to previous page + binding.mangaReaderPager.currentItem += 1 + return + } + } + if (!settings.showSystemBars) { hideBars() checkNotch() @@ -796,7 +849,7 @@ class MangaReaderActivity : AppCompatActivity() { private fun progress(runnable: Runnable) { if (maxChapterPage - currentChapterPage <= 1 && Anilist.userid != null) { - if (showProgressDialog) { + if (showProgressDialog) { val dialogView = layoutInflater.inflate(R.layout.item_custom_dialog, null) val checkbox = dialogView.findViewById(R.id.dialog_checkbox) @@ -805,8 +858,9 @@ class MangaReaderActivity : AppCompatActivity() { saveData("${media.id}_progressDialog", isChecked) showProgressDialog = !isChecked } - val incognito = currContext()?.getSharedPreferences("Dantotsu", Context.MODE_PRIVATE) - ?.getBoolean("incognito", false) ?: false + val incognito = + currContext()?.getSharedPreferences("Dantotsu", Context.MODE_PRIVATE) + ?.getBoolean("incognito", false) ?: false AlertDialog.Builder(this, R.style.MyPopup) .setTitle(getString(R.string.title_update_progress)) .apply { @@ -818,7 +872,7 @@ class MangaReaderActivity : AppCompatActivity() { .setCancelable(false) .setPositiveButton(getString(R.string.yes)) { dialog, _ -> saveData("${media.id}_save_progress", true) - updateProgress( + updateProgress( media, MangaNameAdapter.findChapterNumber(media.manga!!.selectedChapter!!) .toString() diff --git a/app/src/main/res/layout/item_image.xml b/app/src/main/res/layout/item_image.xml index 64055928..72a66e12 100644 --- a/app/src/main/res/layout/item_image.xml +++ b/app/src/main/res/layout/item_image.xml @@ -7,7 +7,7 @@ app:gest_disableGestures="true" app:gest_rotationEnabled="true" app:gest_restrictRotation="true" - app:gest_doubleTapZoom="3" + app:gest_doubleTapZoom="1.5" app:gest_maxZoom="6">