From 29fd17bcde065121b0427b924de7bed9056bdc66 Mon Sep 17 00:00:00 2001 From: Andrew Gahov Date: Fri, 15 Sep 2017 12:33:58 +0300 Subject: [PATCH 01/17] Check if pdfView != null --- .../github/barteksc/pdfviewer/scroll/DefaultScrollHandle.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/scroll/DefaultScrollHandle.java b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/scroll/DefaultScrollHandle.java index c74cf5ef..970a1831 100644 --- a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/scroll/DefaultScrollHandle.java +++ b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/scroll/DefaultScrollHandle.java @@ -110,7 +110,9 @@ public void setScroll(float position) { } else { handler.removeCallbacks(hidePageScrollerRunnable); } - setPosition((pdfView.isSwipeVertical() ? pdfView.getHeight() : pdfView.getWidth()) * position); + if (pdfView != null) { + setPosition((pdfView.isSwipeVertical() ? pdfView.getHeight() : pdfView.getWidth()) * position); + } } private void setPosition(float pos) { From 6fcff09e8bbc3927b4a63abc6de3634bb5d0eb4b Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 9 Apr 2018 22:06:01 +0200 Subject: [PATCH 02/17] Add fitEachPage option --- .../barteksc/pdfviewer/DecodingAsyncTask.java | 3 ++- .../com/github/barteksc/pdfviewer/PDFView.java | 18 ++++++++++++++++++ .../com/github/barteksc/pdfviewer/PdfFile.java | 11 +++++++---- .../pdfviewer/util/PageSizeCalculator.java | 12 ++++++++---- 4 files changed, 35 insertions(+), 9 deletions(-) diff --git a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DecodingAsyncTask.java b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DecodingAsyncTask.java index a28974ba..79246b4c 100644 --- a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DecodingAsyncTask.java +++ b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DecodingAsyncTask.java @@ -48,7 +48,8 @@ protected Throwable doInBackground(Void... params) { try { PdfDocument pdfDocument = docSource.createDocument(pdfView.getContext(), pdfiumCore, password); pdfFile = new PdfFile(pdfiumCore, pdfDocument, pdfView.getPageFitPolicy(), getViewSize(), - userPages, pdfView.isSwipeVertical(), pdfView.getSpacingPx(), pdfView.doAutoSpacing()); + userPages, pdfView.isSwipeVertical(), pdfView.getSpacingPx(), pdfView.doAutoSpacing(), + pdfView.doFitEachPage()); return null; } catch (Throwable t) { return t; diff --git a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PDFView.java b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PDFView.java index 77d9b4ff..50a1e242 100644 --- a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PDFView.java +++ b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PDFView.java @@ -168,6 +168,8 @@ enum ScrollDir { /** Policy for fitting pages to screen */ private FitPolicy pageFitPolicy = FitPolicy.WIDTH; + private boolean fitEachPage = false; + private int defaultPage = 0; /** True if should scroll through pages vertically instead of horizontally */ @@ -1190,6 +1192,14 @@ public FitPolicy getPageFitPolicy() { return pageFitPolicy; } + private void setFitEachPage(boolean fitEachPage) { + this.fitEachPage = fitEachPage; + } + + public boolean doFitEachPage() { + return fitEachPage; + } + public boolean doPageSnap() { return pageSnap; } @@ -1306,6 +1316,8 @@ public class Configurator { private FitPolicy pageFitPolicy = FitPolicy.WIDTH; + private boolean fitEachPage = false; + private boolean pageFling = false; private boolean pageSnap = false; @@ -1424,6 +1436,11 @@ public Configurator pageFitPolicy(FitPolicy pageFitPolicy) { return this; } + public Configurator fitEachPage(boolean fitEachPage) { + this.fitEachPage = fitEachPage; + return this; + } + public Configurator pageSnap(boolean pageSnap) { this.pageSnap = pageSnap; return this; @@ -1460,6 +1477,7 @@ public void load() { PDFView.this.setSpacing(spacing); PDFView.this.setAutoSpacing(autoSpacing); PDFView.this.setPageFitPolicy(pageFitPolicy); + PDFView.this.setFitEachPage(fitEachPage); PDFView.this.setPageSnap(pageSnap); PDFView.this.setPageFling(pageFling); diff --git a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PdfFile.java b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PdfFile.java index f40d29ed..13a01873 100644 --- a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PdfFile.java +++ b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PdfFile.java @@ -52,9 +52,9 @@ class PdfFile { /** Scaled page with maximum width */ private SizeF maxWidthPageSize = new SizeF(0, 0); /** True if scrolling is vertical, else it's horizontal */ - private boolean isVertical = true; + private boolean isVertical; /** Fixed spacing between pages in pixels */ - private int spacingPx = 0; + private int spacingPx; /** Calculate spacing automatically so each page fits on it's own in the center of the view */ private boolean autoSpacing; /** Calculated offsets for pages */ @@ -64,6 +64,8 @@ class PdfFile { /** Calculated document length (width or height, depending on swipe mode) */ private float documentLength = 0; private final FitPolicy pageFitPolicy; + /** If every page should fit to the screen as best as possible regardless of relative size */ + private boolean fitEachPage; /** * The pages the user want to display in order * (ex: 0, 2, 2, 8, 8, 1, 1, 1) @@ -71,7 +73,7 @@ class PdfFile { private int[] originalUserPages; PdfFile(PdfiumCore pdfiumCore, PdfDocument pdfDocument, FitPolicy pageFitPolicy, Size viewSize, int[] originalUserPages, - boolean isVertical, int spacing, boolean autoSpacing) { + boolean isVertical, int spacing, boolean autoSpacing, boolean fitEachPage) { this.pdfiumCore = pdfiumCore; this.pdfDocument = pdfDocument; this.pageFitPolicy = pageFitPolicy; @@ -79,6 +81,7 @@ class PdfFile { this.isVertical = isVertical; this.spacingPx = spacing; this.autoSpacing = autoSpacing; + this.fitEachPage = fitEachPage; setup(viewSize); } @@ -111,7 +114,7 @@ private void setup(Size viewSize) { public void recalculatePageSizes(Size viewSize) { pageSizes.clear(); PageSizeCalculator calculator = new PageSizeCalculator(pageFitPolicy, originalMaxWidthPageSize, - originalMaxHeightPageSize, viewSize); + originalMaxHeightPageSize, viewSize, fitEachPage); maxWidthPageSize = calculator.getOptimalMaxWidthPageSize(); maxHeightPageSize = calculator.getOptimalMaxHeightPageSize(); diff --git a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/util/PageSizeCalculator.java b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/util/PageSizeCalculator.java index 02992a21..4d678c98 100644 --- a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/util/PageSizeCalculator.java +++ b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/util/PageSizeCalculator.java @@ -28,13 +28,15 @@ public class PageSizeCalculator { private SizeF optimalMaxHeightPageSize; private float widthRatio; private float heightRatio; + private boolean fitEachPage; public PageSizeCalculator(FitPolicy fitPolicy, Size originalMaxWidthPageSize, Size originalMaxHeightPageSize, - Size viewSize) { + Size viewSize, boolean fitEachPage) { this.fitPolicy = fitPolicy; this.originalMaxWidthPageSize = originalMaxWidthPageSize; this.originalMaxHeightPageSize = originalMaxHeightPageSize; this.viewSize = viewSize; + this.fitEachPage = fitEachPage; calculateMaxPages(); } @@ -42,13 +44,15 @@ public SizeF calculate(Size pageSize) { if (pageSize.getWidth() <= 0 || pageSize.getHeight() <= 0) { return new SizeF(0, 0); } + float maxWidth = fitEachPage ? viewSize.getWidth() : pageSize.getWidth() * widthRatio; + float maxHeight = fitEachPage ? viewSize.getHeight() : pageSize.getHeight() * heightRatio; switch (fitPolicy) { case HEIGHT: - return fitHeight(pageSize, pageSize.getHeight() * heightRatio); + return fitHeight(pageSize, maxHeight); case BOTH: - return fitBoth(pageSize, pageSize.getWidth() * widthRatio, pageSize.getHeight() * heightRatio); + return fitBoth(pageSize, maxWidth, maxHeight); default: - return fitWidth(pageSize, pageSize.getWidth() * widthRatio); + return fitWidth(pageSize, maxWidth); } } From 1e3a6c8505f7e929313738a874bdbd6726a4c4cb Mon Sep 17 00:00:00 2001 From: Flamedek Date: Mon, 9 Apr 2018 23:16:56 +0200 Subject: [PATCH 03/17] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 919bda8a..a819334a 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,8 @@ pdfView.fromAsset(String) .autoSpacing(false) // add dynamic spacing to fit each page on its own on the screen .linkHandler(DefaultLinkHandler) .pageFitPolicy(FitPolicy.WIDTH) - .pageSnap(true) // snap pages to screen boundaries + .fitEachPage(false) // fit each page to fill the view, disregarding relative size + .pageSnap(false) // snap pages to screen boundaries .pageFling(false) // make a fling change only a single page like ViewPager .load(); ``` From 219548bdda8df08db36ea491991867f3b3b896e9 Mon Sep 17 00:00:00 2001 From: Robin Date: Sun, 8 Jul 2018 17:22:46 +0200 Subject: [PATCH 04/17] Rename getters and comments --- .../github/barteksc/pdfviewer/DecodingAsyncTask.java | 4 ++-- .../github/barteksc/pdfviewer/DragPinchManager.java | 2 +- .../java/com/github/barteksc/pdfviewer/PDFView.java | 12 ++++++------ .../java/com/github/barteksc/pdfviewer/PdfFile.java | 7 +++++-- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DecodingAsyncTask.java b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DecodingAsyncTask.java index 79246b4c..da9b4256 100644 --- a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DecodingAsyncTask.java +++ b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DecodingAsyncTask.java @@ -48,8 +48,8 @@ protected Throwable doInBackground(Void... params) { try { PdfDocument pdfDocument = docSource.createDocument(pdfView.getContext(), pdfiumCore, password); pdfFile = new PdfFile(pdfiumCore, pdfDocument, pdfView.getPageFitPolicy(), getViewSize(), - userPages, pdfView.isSwipeVertical(), pdfView.getSpacingPx(), pdfView.doAutoSpacing(), - pdfView.doFitEachPage()); + userPages, pdfView.isSwipeVertical(), pdfView.getSpacingPx(), pdfView.isAutoSpacingEnabled(), + pdfView.isFitEachPage()); return null; } catch (Throwable t) { return t; diff --git a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DragPinchManager.java b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DragPinchManager.java index 014a22ae..0fe516d4 100644 --- a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DragPinchManager.java +++ b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DragPinchManager.java @@ -197,7 +197,7 @@ public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float ve if (!pdfView.isSwipeEnabled()) { return false; } - if (pdfView.doPageFling()) { + if (pdfView.isPageFlingEnabled()) { if (pdfView.pageFillsScreen()) { onBoundedFling(velocityX, velocityY); } else { diff --git a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PDFView.java b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PDFView.java index 50a1e242..df8f741d 100644 --- a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PDFView.java +++ b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PDFView.java @@ -1164,7 +1164,7 @@ public int getSpacingPx() { return spacingPx; } - public boolean doAutoSpacing() { + public boolean isAutoSpacingEnabled() { return autoSpacing; } @@ -1172,12 +1172,12 @@ public void setPageFling(boolean pageFling) { this.pageFling = pageFling; } - public boolean doPageFling() { + public boolean isPageFlingEnabled() { return pageFling; } - private void setSpacing(int spacing) { - this.spacingPx = Util.getDP(getContext(), spacing); + private void setSpacing(int spacingDp) { + this.spacingPx = Util.getDP(getContext(), spacingDp); } private void setAutoSpacing(boolean autoSpacing) { @@ -1196,11 +1196,11 @@ private void setFitEachPage(boolean fitEachPage) { this.fitEachPage = fitEachPage; } - public boolean doFitEachPage() { + public boolean isFitEachPage() { return fitEachPage; } - public boolean doPageSnap() { + public boolean isPageSnap() { return pageSnap; } diff --git a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PdfFile.java b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PdfFile.java index 13a01873..fdc104f2 100644 --- a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PdfFile.java +++ b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PdfFile.java @@ -64,8 +64,11 @@ class PdfFile { /** Calculated document length (width or height, depending on swipe mode) */ private float documentLength = 0; private final FitPolicy pageFitPolicy; - /** If every page should fit to the screen as best as possible regardless of relative size */ - private boolean fitEachPage; + /** + * True if every page should fit separately according to the FitPolicy, + * else the largest page fits and other pages scale relatively + */ + private final boolean fitEachPage; /** * The pages the user want to display in order * (ex: 0, 2, 2, 8, 8, 1, 1, 1) From fe238836a6776c0783a9abcfc6f8427bf0d88cbd Mon Sep 17 00:00:00 2001 From: Flamedek Date: Tue, 10 Jul 2018 19:21:18 +0200 Subject: [PATCH 05/17] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a819334a..16b595d2 100644 --- a/README.md +++ b/README.md @@ -102,8 +102,8 @@ pdfView.fromAsset(String) .spacing(0) .autoSpacing(false) // add dynamic spacing to fit each page on its own on the screen .linkHandler(DefaultLinkHandler) - .pageFitPolicy(FitPolicy.WIDTH) - .fitEachPage(false) // fit each page to fill the view, disregarding relative size + .pageFitPolicy(FitPolicy.WIDTH) // mode to fit pages in the view + .fitEachPage(false) // fit each page to the view, else smaller pages are scaled relative to largest page. .pageSnap(false) // snap pages to screen boundaries .pageFling(false) // make a fling change only a single page like ViewPager .load(); From 9c57d966f25a2b2f8adf02b1a9f8353f4fbab175 Mon Sep 17 00:00:00 2001 From: Robin Date: Tue, 10 Jul 2018 23:17:08 +0200 Subject: [PATCH 06/17] Hide handle after x/y animation --- .../com/github/barteksc/pdfviewer/AnimationManager.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/AnimationManager.java b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/AnimationManager.java index 67ab7f3b..e7e9439f 100644 --- a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/AnimationManager.java +++ b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/AnimationManager.java @@ -138,12 +138,14 @@ public void onAnimationUpdate(ValueAnimator animation) { public void onAnimationCancel(Animator animation) { pdfView.loadPages(); pageFlinging = false; + hideHandle(); } @Override public void onAnimationEnd(Animator animation) { pdfView.loadPages(); pageFlinging = false; + hideHandle(); } } @@ -160,12 +162,14 @@ public void onAnimationUpdate(ValueAnimator animation) { public void onAnimationCancel(Animator animation) { pdfView.loadPages(); pageFlinging = false; + hideHandle(); } @Override public void onAnimationEnd(Animator animation) { pdfView.loadPages(); pageFlinging = false; + hideHandle(); } } @@ -187,13 +191,15 @@ public void onAnimationUpdate(ValueAnimator animation) { @Override public void onAnimationCancel(Animator animation) { + pdfView.loadPages(); + hideHandle(); } @Override public void onAnimationEnd(Animator animation) { pdfView.loadPages(); - hideHandle(); pdfView.performPageSnap(); + hideHandle(); } @Override From fc7e5480ff637c91c1eb35cbb8518e0460038570 Mon Sep 17 00:00:00 2001 From: Yuriy Bereguliak Date: Tue, 17 Jul 2018 10:15:10 +0300 Subject: [PATCH 07/17] #619: fixed NPE while getPageAtOffset. --- .../java/com/github/barteksc/pdfviewer/DragPinchManager.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DragPinchManager.java b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DragPinchManager.java index fa7fc33a..b232dcf1 100644 --- a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DragPinchManager.java +++ b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DragPinchManager.java @@ -83,6 +83,9 @@ public boolean onSingleTapConfirmed(MotionEvent e) { private boolean checkLinkTapped(float x, float y) { PdfFile pdfFile = pdfView.pdfFile; + if (pdfFile == null) { + return false; + } float mappedX = -pdfView.getCurrentXOffset() + x; float mappedY = -pdfView.getCurrentYOffset() + y; int page = pdfFile.getPageAtOffset(pdfView.isSwipeVertical() ? mappedY : mappedX, pdfView.getZoom()); From 4cbf11587768b3f20f51c03ffc46122354f2fd34 Mon Sep 17 00:00:00 2001 From: yuriyskulskiy Date: Tue, 25 Sep 2018 13:51:18 +0300 Subject: [PATCH 08/17] Add possibility to disable long click --- .../java/com/github/barteksc/pdfviewer/DragPinchManager.java | 4 ++++ .../src/main/java/com/github/barteksc/pdfviewer/PDFView.java | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DragPinchManager.java b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DragPinchManager.java index fa7fc33a..d224514d 100644 --- a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DragPinchManager.java +++ b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DragPinchManager.java @@ -63,6 +63,10 @@ void disable() { enabled = false; } + void disableLongpress(){ + gestureDetector.setIsLongpressEnabled(false); + } + @Override public boolean onSingleTapConfirmed(MotionEvent e) { boolean onTapHandled = pdfView.callbacks.callOnTap(e); diff --git a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PDFView.java b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PDFView.java index 5e9636e7..fde8071d 100644 --- a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PDFView.java +++ b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PDFView.java @@ -1470,6 +1470,11 @@ public Configurator nightMode(boolean nightMode) { return this; } + public Configurator disableLongpress() { + PDFView.this.dragPinchManager.disableLongpress(); + return this; + } + public void load() { if (!hasSize) { waitingDocumentConfigurator = this; From 03160995280974636258979612ab81af6a2486d5 Mon Sep 17 00:00:00 2001 From: mmoto Date: Wed, 17 Oct 2018 23:17:39 +0300 Subject: [PATCH 09/17] memory leak caused by reference to PDFView instance in async task was fixed --- .../barteksc/pdfviewer/DecodingAsyncTask.java | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DecodingAsyncTask.java b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DecodingAsyncTask.java index a28974ba..a9c31c9c 100644 --- a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DecodingAsyncTask.java +++ b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DecodingAsyncTask.java @@ -22,11 +22,13 @@ import com.shockwave.pdfium.PdfiumCore; import com.shockwave.pdfium.util.Size; +import java.lang.ref.WeakReference; + class DecodingAsyncTask extends AsyncTask { private boolean cancelled; - private PDFView pdfView; + private WeakReference pdfViewReference; private PdfiumCore pdfiumCore; private String password; @@ -38,7 +40,7 @@ class DecodingAsyncTask extends AsyncTask { this.docSource = docSource; this.userPages = userPages; this.cancelled = false; - this.pdfView = pdfView; + this.pdfViewReference = new WeakReference<>(pdfView); this.password = password; this.pdfiumCore = pdfiumCore; } @@ -46,27 +48,36 @@ class DecodingAsyncTask extends AsyncTask { @Override protected Throwable doInBackground(Void... params) { try { - PdfDocument pdfDocument = docSource.createDocument(pdfView.getContext(), pdfiumCore, password); - pdfFile = new PdfFile(pdfiumCore, pdfDocument, pdfView.getPageFitPolicy(), getViewSize(), - userPages, pdfView.isSwipeVertical(), pdfView.getSpacingPx(), pdfView.doAutoSpacing()); - return null; + PDFView pdfView = pdfViewReference.get(); + if (pdfView != null) { + PdfDocument pdfDocument = docSource.createDocument(pdfView.getContext(), pdfiumCore, password); + pdfFile = new PdfFile(pdfiumCore, pdfDocument, pdfView.getPageFitPolicy(), getViewSize(pdfView), + userPages, pdfView.isSwipeVertical(), pdfView.getSpacingPx(), pdfView.doAutoSpacing()); + return null; + } else { + return new NullPointerException("pdfView == null"); + } + } catch (Throwable t) { return t; } } - private Size getViewSize() { + private Size getViewSize(PDFView pdfView) { return new Size(pdfView.getWidth(), pdfView.getHeight()); } @Override protected void onPostExecute(Throwable t) { - if (t != null) { - pdfView.loadError(t); - return; - } - if (!cancelled) { - pdfView.loadComplete(pdfFile); + PDFView pdfView = pdfViewReference.get(); + if (pdfView != null) { + if (t != null) { + pdfView.loadError(t); + return; + } + if (!cancelled) { + pdfView.loadComplete(pdfFile); + } } } From e89dc916b3daf66686a750513adfd2baea010f63 Mon Sep 17 00:00:00 2001 From: "Maksim Motorny (Kharkiv)" Date: Mon, 22 Oct 2018 14:25:34 +0300 Subject: [PATCH 10/17] removing render thread onViewDetach to avoid problem with too high threads count in memory --- .../java/com/github/barteksc/pdfviewer/PDFView.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PDFView.java b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PDFView.java index 5e9636e7..f413e6dc 100644 --- a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PDFView.java +++ b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PDFView.java @@ -30,6 +30,7 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.AsyncTask; +import android.os.Build; import android.os.HandlerThread; import android.util.AttributeSet; import android.util.Log; @@ -154,7 +155,7 @@ enum ScrollDir { private DecodingAsyncTask decodingAsyncTask; /** The thread {@link #renderingHandler} will run on */ - private final HandlerThread renderingHandlerThread; + private HandlerThread renderingHandlerThread; /** Handler always waiting in the background and rendering tasks */ RenderingHandler renderingHandler; @@ -462,6 +463,14 @@ public void computeScroll() { @Override protected void onDetachedFromWindow() { recycle(); + if (renderingHandlerThread != null) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { + renderingHandlerThread.quitSafely(); + } else { + renderingHandlerThread.quit(); + } + renderingHandlerThread = null; + } super.onDetachedFromWindow(); } From 25506639b405600d010328d4d1def8a8c287b605 Mon Sep 17 00:00:00 2001 From: zuochuanqiang Date: Thu, 22 Nov 2018 16:44:39 +0800 Subject: [PATCH 11/17] Change the way of calculating the render range, and fix a bug that can not load some parts which in the bottom of screen when zoom big enough. --- .../barteksc/pdfviewer/PagesLoader.java | 263 +++++++++++------- 1 file changed, 160 insertions(+), 103 deletions(-) diff --git a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PagesLoader.java b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PagesLoader.java index bd7cf098..26c30f4b 100644 --- a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PagesLoader.java +++ b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PagesLoader.java @@ -22,6 +22,9 @@ import com.github.barteksc.pdfviewer.util.Util; import com.shockwave.pdfium.util.SizeF; +import java.util.LinkedList; +import java.util.List; + import static com.github.barteksc.pdfviewer.util.Constants.Cache.CACHE_SIZE; import static com.github.barteksc.pdfviewer.util.Constants.PRELOAD_OFFSET; @@ -37,21 +40,55 @@ class PagesLoader { private float partRenderHeight; private final RectF thumbnailRect = new RectF(0, 0, 1, 1); private final int preloadOffset; - private final Holder firstHolder = new Holder(); - private final Holder lastHolder = new Holder(); - private final GridSize firstGrid = new GridSize(); - private final GridSize lastGrid = new GridSize(); - private final GridSize middleGrid = new GridSize(); private class Holder { - int page; int row; int col; + + @Override + public String toString() { + return "Holder{" + + "row=" + row + + ", col=" + col + + '}'; + } + } + + private class RenderRange { + int page; + GridSize gridSize; + Holder leftTop; + Holder rightBottom; + + RenderRange() { + this.page = 0; + this.gridSize = new GridSize(); + this.leftTop = new Holder(); + this.rightBottom = new Holder(); + } + + @Override + public String toString() { + return "RenderRange{" + + "page=" + page + + ", gridSize=" + gridSize + + ", leftTop=" + leftTop + + ", rightBottom=" + rightBottom + + '}'; + } } private class GridSize { int rows; int cols; + + @Override + public String toString() { + return "GridSize{" + + "rows=" + rows + + ", cols=" + cols + + '}'; + } } PagesLoader(PDFView pdfView) { @@ -69,36 +106,6 @@ private void getPageColsRows(GridSize grid, int pageIndex) { grid.cols = MathUtils.ceil(1f / partWidth); } - private Holder getPageAndCoordsByOffset(Holder holder, GridSize grid, float localXOffset, - float localYOffset, boolean endOffset) { - float fixedXOffset = -MathUtils.max(localXOffset, 0); - float fixedYOffset = -MathUtils.max(localYOffset, 0); - float offset = pdfView.isSwipeVertical() ? fixedYOffset : fixedXOffset; - holder.page = pdfView.pdfFile.getPageAtOffset(offset, pdfView.getZoom()); - getPageColsRows(grid, holder.page); - SizeF scaledPageSize = pdfView.pdfFile.getScaledPageSize(holder.page, pdfView.getZoom()); - float rowHeight = scaledPageSize.getHeight() / grid.rows; - float colWidth = scaledPageSize.getWidth() / grid.cols; - float row, col; - float secondaryOffset = pdfView.pdfFile.getSecondaryPageOffset(holder.page, pdfView.getZoom()); - if (pdfView.isSwipeVertical()) { - row = Math.abs(fixedYOffset - pdfView.pdfFile.getPageOffset(holder.page, pdfView.getZoom())) / rowHeight; - col = MathUtils.min(fixedXOffset - secondaryOffset, 0) / colWidth; - } else { - col = Math.abs(fixedXOffset - pdfView.pdfFile.getPageOffset(holder.page, pdfView.getZoom())) / colWidth; - row = MathUtils.min(fixedYOffset - secondaryOffset, 0) / rowHeight; - } - - if (endOffset) { - holder.row = MathUtils.ceil(row); - holder.col = MathUtils.ceil(col); - } else { - holder.row = MathUtils.floor(row); - holder.col = MathUtils.floor(col); - } - return holder; - } - private void calculatePartSize(GridSize grid) { pageRelativePartWidth = 1f / (float) grid.cols; pageRelativePartHeight = 1f / (float) grid.rows; @@ -106,87 +113,137 @@ private void calculatePartSize(GridSize grid) { partRenderHeight = Constants.PART_SIZE / pageRelativePartHeight; } - private void loadVisible() { - int parts = 0; - float scaledPreloadOffset = preloadOffset * pdfView.getZoom(); - float firstXOffset = -xOffset + scaledPreloadOffset; - float lastXOffset = -xOffset - pdfView.getWidth() - scaledPreloadOffset; - float firstYOffset = -yOffset + scaledPreloadOffset; - float lastYOffset = -yOffset - pdfView.getHeight() - scaledPreloadOffset; - getPageAndCoordsByOffset(firstHolder, firstGrid, firstXOffset, firstYOffset, false); - getPageAndCoordsByOffset(lastHolder, lastGrid, lastXOffset, lastYOffset, true); + /** + * calculate the render range of each page + */ + private List getRenderRangeList(float firstXOffset, float firstYOffset, float lastXOffset, float lastYOffset) { + + float fixedFirstXOffset = -MathUtils.max(firstXOffset, 0); + float fixedFirstYOffset = -MathUtils.max(firstYOffset, 0); + + float fixedLastXOffset = -MathUtils.max(lastXOffset, 0); + float fixedLastYOffset = -MathUtils.max(lastYOffset, 0); + + float offsetFirst = pdfView.isSwipeVertical() ? fixedFirstYOffset : fixedFirstXOffset; + float offsetLast = pdfView.isSwipeVertical() ? fixedLastYOffset : fixedLastXOffset; + + int firstPage = pdfView.pdfFile.getPageAtOffset(offsetFirst, pdfView.getZoom()); + int lastPage = pdfView.pdfFile.getPageAtOffset(offsetLast, pdfView.getZoom()); + int pageCount = lastPage - firstPage + 1; + + List renderRanges = new LinkedList<>(); + + for (int page = firstPage; page <= lastPage; page++) { + RenderRange range = new RenderRange(); + range.page = page; + + float pageFirstXOffset, pageFirstYOffset, pageLastXOffset, pageLastYOffset; + if (page == firstPage) { + pageFirstXOffset = fixedFirstXOffset; + pageFirstYOffset = fixedFirstYOffset; + if (pageCount == 1) { + pageLastXOffset = fixedLastXOffset; + pageLastYOffset = fixedLastYOffset; + } else { + float pageOffset = pdfView.pdfFile.getPageOffset(page, pdfView.getZoom()); + SizeF pageSize = pdfView.pdfFile.getScaledPageSize(page, pdfView.getZoom()); + if (pdfView.isSwipeVertical()) { + pageLastXOffset = fixedLastXOffset; + pageLastYOffset = pageOffset + pageSize.getHeight(); + } else { + pageLastYOffset = fixedLastYOffset; + pageLastXOffset = pageOffset + pageSize.getWidth(); + } + } + } else if (page == lastPage) { + float pageOffset = pdfView.pdfFile.getPageOffset(page, pdfView.getZoom()); + + if (pdfView.isSwipeVertical()) { + pageFirstXOffset = fixedFirstXOffset; + pageFirstYOffset = pageOffset; + } else { + pageFirstYOffset = fixedFirstYOffset; + pageFirstXOffset = pageOffset; + } - for (int i = firstHolder.page; i <= lastHolder.page; i++) { - loadThumbnail(i); - } + pageLastXOffset = fixedLastXOffset; + pageLastYOffset = fixedLastYOffset; - int pagesCount = lastHolder.page - firstHolder.page + 1; - for (int page = firstHolder.page; page <= lastHolder.page && parts < CACHE_SIZE; page++) { + } else { + float pageOffset = pdfView.pdfFile.getPageOffset(page, pdfView.getZoom()); + SizeF pageSize = pdfView.pdfFile.getScaledPageSize(page, pdfView.getZoom()); + if (pdfView.isSwipeVertical()) { + pageFirstXOffset = fixedFirstXOffset; + pageFirstYOffset = pageOffset; + + pageLastXOffset = fixedLastXOffset; + pageLastYOffset = pageOffset + pageSize.getHeight(); + } else { + pageFirstXOffset = pageOffset; + pageFirstYOffset = fixedFirstYOffset; + + pageLastXOffset = pageOffset + pageSize.getWidth(); + pageLastYOffset = fixedLastYOffset; + } + } + + getPageColsRows(range.gridSize, range.page); // get the page's grid size that rows and cols + SizeF scaledPageSize = pdfView.pdfFile.getScaledPageSize(range.page, pdfView.getZoom()); + float rowHeight = scaledPageSize.getHeight() / range.gridSize.rows; + float colWidth = scaledPageSize.getWidth() / range.gridSize.cols; + + + // get the page offset int the whole file + // --------------------------------------- + // | | | | + // |<--offset-->| (page) |<--offset-->| + // | | | | + // | | | | + // --------------------------------------- + float secondaryOffset = pdfView.pdfFile.getSecondaryPageOffset(page, pdfView.getZoom()); + + // calculate the row,col of the point in the leftTop and rightBottom + if (pdfView.isSwipeVertical()) { + range.leftTop.row = MathUtils.floor(Math.abs(pageFirstYOffset - pdfView.pdfFile.getPageOffset(range.page, pdfView.getZoom())) / rowHeight); + range.leftTop.col = MathUtils.floor(MathUtils.min(pageFirstXOffset - secondaryOffset, 0) / colWidth); - if (page == firstHolder.page && pagesCount > 1) { - parts += loadPageEnd(firstHolder, firstGrid, CACHE_SIZE - parts); - } else if (page == lastHolder.page && pagesCount > 1) { - parts += loadPageStart(lastHolder, lastGrid, CACHE_SIZE - parts); - } else if(pagesCount == 1) { - parts += loadPageCenter(firstHolder, lastHolder, firstGrid, CACHE_SIZE - parts); + range.rightBottom.row = MathUtils.ceil(Math.abs(pageLastYOffset - pdfView.pdfFile.getPageOffset(range.page, pdfView.getZoom())) / rowHeight); + range.rightBottom.col = MathUtils.floor(MathUtils.min(pageLastXOffset - secondaryOffset, 0) / colWidth); } else { - getPageColsRows(middleGrid, page); - parts += loadWholePage(page, middleGrid, CACHE_SIZE - parts); + range.leftTop.col = MathUtils.floor(Math.abs(pageFirstXOffset - pdfView.pdfFile.getPageOffset(range.page, pdfView.getZoom())) / colWidth); + range.leftTop.row = MathUtils.floor(MathUtils.min(pageFirstYOffset - secondaryOffset, 0) / rowHeight); + + range.rightBottom.col = MathUtils.floor(Math.abs(pageLastXOffset - pdfView.pdfFile.getPageOffset(range.page, pdfView.getZoom())) / colWidth); + range.rightBottom.row = MathUtils.floor(MathUtils.min(pageLastYOffset - secondaryOffset, 0) / rowHeight); } + + renderRanges.add(range); } + return renderRanges; } - /** - * When whole page is visible - * - * @return loaded parts count - */ - private int loadWholePage(int page, GridSize grid, int nbOfPartsLoadable) { - calculatePartSize(grid); - return loadPage(page, 0, grid.rows - 1, 0, grid.cols - 1, nbOfPartsLoadable); - } + private void loadVisible() { + int parts = 0; + float scaledPreloadOffset = preloadOffset; + float firstXOffset = -xOffset + scaledPreloadOffset; + float lastXOffset = -xOffset - pdfView.getWidth() - scaledPreloadOffset; + float firstYOffset = -yOffset + scaledPreloadOffset; + float lastYOffset = -yOffset - pdfView.getHeight() - scaledPreloadOffset; - /** - * When only part of one page is visible - * - * @return loaded parts count - */ - private int loadPageCenter(Holder firstHolder, Holder lastHolder, GridSize grid, int nbOfPartsLoadable) { - calculatePartSize(grid); - return loadPage(firstHolder.page, firstHolder.row, lastHolder.row, firstHolder.col, lastHolder.col, nbOfPartsLoadable); - } + List rangeList = getRenderRangeList(firstXOffset, firstYOffset, lastXOffset, lastYOffset); - /** - * When only end of page is visible - * - * @return loaded parts count - */ - private int loadPageEnd(Holder holder, GridSize grid, int nbOfPartsLoadable) { - calculatePartSize(grid); - if (pdfView.isSwipeVertical()) { - int firstRow = holder.row; - return loadPage(holder.page, firstRow, grid.rows - 1, 0, grid.cols - 1, nbOfPartsLoadable); - } else { - int firstCol = holder.col; - return loadPage(holder.page, 0, grid.rows - 1, firstCol, grid.cols - 1, nbOfPartsLoadable); + for (RenderRange range : rangeList) { + loadThumbnail(range.page); } - } - /** - * If only start of the page is visible - * - * @return loaded parts count - */ - private int loadPageStart(Holder holder, GridSize grid, int nbOfPartsLoadable) { - calculatePartSize(grid); - if (pdfView.isSwipeVertical()) { - int lastRow = holder.row; - return loadPage(holder.page, 0, lastRow, 0, grid.cols - 1, nbOfPartsLoadable); - } else { - int lastCol = holder.col; - return loadPage(holder.page, 0, grid.rows - 1, 0, lastCol, nbOfPartsLoadable); + for (RenderRange range : rangeList) { + calculatePartSize(range.gridSize); + parts += loadPage(range.page, range.leftTop.row, range.rightBottom.row, range.leftTop.col, range.rightBottom.col, CACHE_SIZE - parts); + if (parts >= CACHE_SIZE) { + break; + } } } From e6de5ce5d3aced4b4318d5275aa8b2aeda2a702c Mon Sep 17 00:00:00 2001 From: zuochuanqiang Date: Fri, 30 Nov 2018 16:08:17 +0800 Subject: [PATCH 12/17] readme --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 3575eaea..67ec8a76 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,13 @@ # Android PdfViewer + +__这个分支,在原3.1.0-beta1的基础上,优化了渲染区域的计算方式,减少不必要的渲染区域。__ + +3.1.0-beta1在计算渲染方式上有个bug,在跨页的时候会渲染上一页的最后一行,不管这一行是不是全部显示在屏幕中。当放大的倍数越大, +需要渲染的块就多,由于最大数量的限制,会导致部分在屏幕下方的区域不会被渲染。 + + __AndroidPdfViewer 1.x is available on [AndroidPdfViewerV1](https://github.com/barteksc/AndroidPdfViewerV1) repo, where can be developed independently. Version 1.x uses different engine for drawing document on canvas, so if you don't like 2.x version, try 1.x.__ From a31e5d483958a8ed4f66abce0d6201f32f831e2a Mon Sep 17 00:00:00 2001 From: zuochuanqiang Date: Thu, 13 Dec 2018 16:22:19 +0800 Subject: [PATCH 13/17] makes the view always show the right position when the view size has changed. --- .../github/barteksc/pdfviewer/PDFView.java | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PDFView.java b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PDFView.java index 5e9636e7..c473edbf 100644 --- a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PDFView.java +++ b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PDFView.java @@ -474,13 +474,33 @@ protected void onSizeChanged(int w, int h, int oldw, int oldh) { if (isInEditMode() || state != State.SHOWN) { return; } + + // calculates the position of the point which in the center of view relative to big strip + float centerPointInStripXOffset = -currentXOffset + oldw * 0.5f; + float centerPointInStripYOffset = -currentYOffset + oldh * 0.5f; + + float relativeCenterPointInStripXOffset; + float relativeCenterPointInStripYOffset; + + if (swipeVertical){ + relativeCenterPointInStripXOffset = centerPointInStripXOffset / pdfFile.getMaxPageWidth(); + relativeCenterPointInStripYOffset = centerPointInStripYOffset / pdfFile.getDocLen(zoom); + }else { + relativeCenterPointInStripXOffset = centerPointInStripXOffset / pdfFile.getDocLen(zoom); + relativeCenterPointInStripYOffset = centerPointInStripYOffset / pdfFile.getMaxPageHeight(); + } + animationManager.stopAll(); pdfFile.recalculatePageSizes(new Size(w, h)); + if (swipeVertical) { - moveTo(currentXOffset, -pdfFile.getPageOffset(currentPage, zoom)); - } else { - moveTo(-pdfFile.getPageOffset(currentPage, zoom), currentYOffset); + currentXOffset = -relativeCenterPointInStripXOffset * pdfFile.getMaxPageWidth() + w * 0.5f; + currentYOffset = -relativeCenterPointInStripYOffset * pdfFile.getDocLen(zoom) + h * 0.5f ; + }else { + currentXOffset = -relativeCenterPointInStripXOffset * pdfFile.getDocLen(zoom) + w * 0.5f; + currentYOffset = -relativeCenterPointInStripYOffset * pdfFile.getMaxPageHeight() + h * 0.5f; } + moveTo(currentXOffset,currentYOffset); loadPageByOffset(); } From b29b8cea2e44a039adc9f33762cf81c005eb4cef Mon Sep 17 00:00:00 2001 From: lurp Date: Tue, 16 Apr 2019 16:21:27 +0800 Subject: [PATCH 14/17] use right minzoom & maxzoom when pinch --- .../github/barteksc/pdfviewer/DragPinchManager.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DragPinchManager.java b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DragPinchManager.java index fa7fc33a..52096b01 100644 --- a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DragPinchManager.java +++ b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DragPinchManager.java @@ -253,10 +253,12 @@ private void onBoundedFling(float velocityX, float velocityY) { public boolean onScale(ScaleGestureDetector detector) { float dr = detector.getScaleFactor(); float wantedZoom = pdfView.getZoom() * dr; - if (wantedZoom < MINIMUM_ZOOM) { - dr = MINIMUM_ZOOM / pdfView.getZoom(); - } else if (wantedZoom > MAXIMUM_ZOOM) { - dr = MAXIMUM_ZOOM / pdfView.getZoom(); + float minZoom = Math.min(MINIMUM_ZOOM, pdfView.getMinZoom()); + float maxZoom = Math.max(MAXIMUM_ZOOM, pdfView.getMaxZoom()); + if (wantedZoom < minZoom) { + dr = minZoom / pdfView.getZoom(); + } else if (wantedZoom > maxZoom) { + dr = maxZoom / pdfView.getZoom(); } pdfView.zoomCenteredRelativeTo(dr, new PointF(detector.getFocusX(), detector.getFocusY())); return true; From 69f860dfdfdb91aa8eab69612d080d3cd26daee1 Mon Sep 17 00:00:00 2001 From: Luciano Albuquerque Date: Sat, 27 Apr 2019 12:23:15 -0300 Subject: [PATCH 15/17] Correction for Readme file --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3575eaea..6dc20d4d 100644 --- a/README.md +++ b/README.md @@ -30,11 +30,11 @@ Licensed under Apache License 2.0. Add to _build.gradle_: -`compile 'com.github.barteksc:android-pdf-viewer:3.1.0-beta.1'` +`implementation 'com.github.barteksc:android-pdf-viewer:3.1.0-beta.1'` or if you want to use more stable version: -`compile 'com.github.barteksc:android-pdf-viewer:2.8.2'` +`implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'` Library is available in jcenter repository, probably it'll be in Maven Central soon. From d243b39377f19c3eae41e227067da254ebbf731b Mon Sep 17 00:00:00 2001 From: Bartosz Schiller Date: Sun, 18 Aug 2019 03:29:22 +0200 Subject: [PATCH 16/17] Update version Replace bintray upload scripts with fixed one Update README and CHANGELOG Fix max zoom detection --- CHANGELOG.md | 14 +++ README.md | 32 +++---- android-pdf-viewer/bintray.gradle | 89 +++++++++++++++++++ android-pdf-viewer/build.gradle | 13 ++- .../barteksc/pdfviewer/DragPinchManager.java | 2 +- build.gradle | 4 +- gradle/wrapper/gradle-wrapper.properties | 4 +- sample/build.gradle | 10 +-- 8 files changed, 135 insertions(+), 33 deletions(-) create mode 100644 android-pdf-viewer/bintray.gradle diff --git a/CHANGELOG.md b/CHANGELOG.md index dbee53f8..7652d133 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,17 @@ +## 3.2.0-beta.1 (2019-08-18) +* Merge PR #714 with optimized page load +* Merge PR #776 with fix for max & min zoom level +* Merge PR #722 with fix for showing right position when view size changed +* Merge PR #703 with fix for too many threads +* Merge PR #702 with fix for memory leak +* Merge PR #689 with possibility to disable long click +* Merge PR #628 with fix for hiding scroll handle +* Merge PR #627 with `fitEachPage` option +* Merge PR #638 and #406 with fixed NPE +* Merge PR #780 with README fix +* Update compile SDK and support library to 28 +* Update Gradle and Gradle Plugin + ## 3.1.0-beta.1 (2018-06-29) * Merge pull request #557 for snapping pages (scrolling page by page) * merge pull request #618 for night mode diff --git a/README.md b/README.md index b365ce77..72fe8678 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,8 @@ +# Looking for new maintainer! -# Android PdfViewer - - -__这个分支,在原3.1.0-beta1的基础上,优化了渲染区域的计算方式,减少不必要的渲染区域。__ - -3.1.0-beta1在计算渲染方式上有个bug,在跨页的时候会渲染上一页的最后一行,不管这一行是不是全部显示在屏幕中。当放大的倍数越大, -需要渲染的块就多,由于最大数量的限制,会导致部分在屏幕下方的区域不会被渲染。 +# Android PdfViewer __AndroidPdfViewer 1.x is available on [AndroidPdfViewerV1](https://github.com/barteksc/AndroidPdfViewerV1) repo, where can be developed independently. Version 1.x uses different engine for drawing document on canvas, @@ -17,14 +12,19 @@ Library for displaying PDF documents on Android, with `animations`, `gestures`, It is based on [PdfiumAndroid](https://github.com/barteksc/PdfiumAndroid) for decoding PDF files. Works on API 11 (Android 3.0) and higher. Licensed under Apache License 2.0. -## What's new in 3.1.0-beta.1? -* Merge pull request #557 for snapping pages (scrolling page by page) -* merge pull request #618 for night mode -* Merge pull request #566 for `OnLongTapListener` -* Update PdfiumAndroid to 1.9.0, which uses `c++_shared` instead of `gnustl_static` -* Update Gradle Plugin -* Update compile SDK and support library to 26 -* Change minimum SDK to 14 +## What's new in 3.2.0-beta.1? +* Merge PR #714 with optimized page load +* Merge PR #776 with fix for max & min zoom level +* Merge PR #722 with fix for showing right position when view size changed +* Merge PR #703 with fix for too many threads +* Merge PR #702 with fix for memory leak +* Merge PR #689 with possibility to disable long click +* Merge PR #628 with fix for hiding scroll handle +* Merge PR #627 with `fitEachPage` option +* Merge PR #638 and #406 with fixed NPE +* Merge PR #780 with README fix +* Update compile SDK and support library to 28 +* Update Gradle and Gradle Plugin ## Changes in 3.0 API * Replaced `Contants.PRELOAD_COUNT` with `PRELOAD_OFFSET` @@ -37,7 +37,7 @@ Licensed under Apache License 2.0. Add to _build.gradle_: -`implementation 'com.github.barteksc:android-pdf-viewer:3.1.0-beta.1'` +`implementation 'com.github.barteksc:android-pdf-viewer:3.2.0-beta.1'` or if you want to use more stable version: diff --git a/android-pdf-viewer/bintray.gradle b/android-pdf-viewer/bintray.gradle new file mode 100644 index 00000000..9a01f197 --- /dev/null +++ b/android-pdf-viewer/bintray.gradle @@ -0,0 +1,89 @@ +apply plugin: 'com.github.dcendents.android-maven' +apply plugin: 'com.jfrog.bintray' + +group = publishedGroupId +version = libraryVersion + +install { + repositories.mavenInstaller { + pom.project { + packaging 'aar' + groupId publishedGroupId + artifactId artifact + + name libraryName + description libraryDescription + url siteUrl + + licenses { + license { + name licenseName + url licenseUrl + } + } + developers { + developer { + id developerId + name developerName + email developerEmail + } + } + scm { + connection gitUrl + developerConnection gitUrl + url siteUrl + } + } + } +} + +task sourcesJar(type: Jar) { + classifier = 'sources' + from android.sourceSets.main.java.srcDirs +} + +task javadoc(type: Javadoc) { + source = android.sourceSets.main.java.srcDirs + classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) +} + +afterEvaluate { + javadoc.classpath += files(android.libraryVariants.collect { variant -> + variant.javaCompileProvider.get().classpath.files + }) +} + +task javadocJar(type: Jar, dependsOn: javadoc) { + classifier = 'javadoc' + from javadoc.destinationDir +} + +artifacts { + archives javadocJar + archives sourcesJar +} + +Properties properties = new Properties() +properties.load(project.rootProject.file('local.properties').newDataInputStream()) + +bintray { + user = properties.getProperty("bintray.user") + key = properties.getProperty("bintray.apikey") + + configurations = ['archives'] + pkg { + repo = bintrayRepo + name = bintrayName + desc = libraryDescription + websiteUrl = siteUrl + vcsUrl = gitUrl + licenses = allLicenses + dryRun = false + publish = true + override = false + publicDownloadNumbers = true + version { + desc = libraryDescription + } + } +} \ No newline at end of file diff --git a/android-pdf-viewer/build.gradle b/android-pdf-viewer/build.gradle index 784ac639..32d03665 100644 --- a/android-pdf-viewer/build.gradle +++ b/android-pdf-viewer/build.gradle @@ -13,7 +13,7 @@ ext { siteUrl = 'https://github.com/barteksc/AndroidPdfViewer' gitUrl = 'https://github.com/barteksc/AndroidPdfViewer.git' - libraryVersion = '3.1.0-beta.1' + libraryVersion = '3.2.0-beta.1' developerId = 'barteksc' developerName = 'Bartosz Schiller' @@ -25,21 +25,20 @@ ext { } android { - compileSdkVersion 26 + compileSdkVersion 28 defaultConfig { minSdkVersion 14 - targetSdkVersion 26 + targetSdkVersion 28 versionCode 1 - versionName "3.1.0-beta.1" + versionName "3.2.0-beta.1" } } dependencies { - implementation 'com.android.support:support-compat:26.1.0' + implementation 'com.android.support:support-compat:28.0.0' api 'com.github.barteksc:pdfium-android:1.9.0' } -apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/installv1.gradle' -apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/bintrayv1.gradle' \ No newline at end of file +apply from: 'bintray.gradle' \ No newline at end of file diff --git a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DragPinchManager.java b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DragPinchManager.java index c87e6648..3860bc73 100644 --- a/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DragPinchManager.java +++ b/android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DragPinchManager.java @@ -261,7 +261,7 @@ public boolean onScale(ScaleGestureDetector detector) { float dr = detector.getScaleFactor(); float wantedZoom = pdfView.getZoom() * dr; float minZoom = Math.min(MINIMUM_ZOOM, pdfView.getMinZoom()); - float maxZoom = Math.max(MAXIMUM_ZOOM, pdfView.getMaxZoom()); + float maxZoom = Math.min(MAXIMUM_ZOOM, pdfView.getMaxZoom()); if (wantedZoom < minZoom) { dr = minZoom / pdfView.getZoom(); } else if (wantedZoom > maxZoom) { diff --git a/build.gradle b/build.gradle index a40f1b28..0a9a0ba0 100644 --- a/build.gradle +++ b/build.gradle @@ -5,8 +5,8 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.3' - classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.1' + classpath 'com.android.tools.build:gradle:3.4.2' + classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4' classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 8fc5b9c1..1a59b22b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Jun 27 20:37:56 CEST 2018 +#Sun Aug 18 01:14:14 CEST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip diff --git a/sample/build.gradle b/sample/build.gradle index 5b0fb37e..133bcdde 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -13,11 +13,11 @@ repositories { apply plugin: 'com.android.application' android { - compileSdkVersion 26 + compileSdkVersion 28 defaultConfig { minSdkVersion 14 - targetSdkVersion 26 + targetSdkVersion 28 versionCode 3 versionName "3.0.0" } @@ -26,7 +26,7 @@ android { dependencies { implementation project(':android-pdf-viewer') - implementation 'com.android.support:appcompat-v7:26.1.0' - implementation 'org.androidannotations:androidannotations-api:4.4.0' - annotationProcessor "org.androidannotations:androidannotations:4.4.0" + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'org.androidannotations:androidannotations-api:4.6.0' + annotationProcessor "org.androidannotations:androidannotations:4.6.0" } From 6626b895b86654cc10dd96c5b26951c01f6e8105 Mon Sep 17 00:00:00 2001 From: Dimuthu Wannipurage Date: Wed, 29 May 2024 12:07:58 -0400 Subject: [PATCH 17/17] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 72fe8678..812c6e9d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ -# Looking for new maintainer! +# Change of ownership and looking for contributors! +The ownership of the project was recently changed and we are actively looking for contributors to bring the project back to track. Please [visit](https://github.com/DImuthuUpe/AndroidPdfViewer/issues/1186) # Android PdfViewer