1919import android .graphics .Bitmap ;
2020import android .graphics .Canvas ;
2121import android .graphics .Color ;
22+ import android .graphics .ColorMatrix ;
23+ import android .graphics .ColorMatrixColorFilter ;
2224import android .graphics .Paint ;
2325import android .graphics .Paint .Style ;
2426import android .graphics .PaintFlagsDrawFilter ;
4042import com .github .barteksc .pdfviewer .listener .OnDrawListener ;
4143import com .github .barteksc .pdfviewer .listener .OnErrorListener ;
4244import com .github .barteksc .pdfviewer .listener .OnLoadCompleteListener ;
45+ import com .github .barteksc .pdfviewer .listener .OnLongPressListener ;
4346import com .github .barteksc .pdfviewer .listener .OnPageChangeListener ;
4447import com .github .barteksc .pdfviewer .listener .OnPageErrorListener ;
4548import com .github .barteksc .pdfviewer .listener .OnPageScrollListener ;
4649import com .github .barteksc .pdfviewer .listener .OnRenderListener ;
4750import com .github .barteksc .pdfviewer .listener .OnTapListener ;
48- import com .github .barteksc .pdfviewer .listener .OnLongPressListener ;
4951import com .github .barteksc .pdfviewer .model .PagePart ;
5052import com .github .barteksc .pdfviewer .scroll .ScrollHandle ;
5153import com .github .barteksc .pdfviewer .source .AssetSource ;
@@ -178,6 +180,8 @@ enum ScrollDir {
178180
179181 private boolean doubletapEnabled = true ;
180182
183+ private boolean nightMode = false ;
184+
181185 private boolean pageSnap = true ;
182186
183187 /** Pdfium core for loading and rendering PDFs */
@@ -373,6 +377,23 @@ public void setSwipeEnabled(boolean enableSwipe) {
373377 this .enableSwipe = enableSwipe ;
374378 }
375379
380+ public void setNightMode (boolean nightMode ) {
381+ this .nightMode = nightMode ;
382+ if (nightMode ) {
383+ ColorMatrix colorMatrixInverted =
384+ new ColorMatrix (new float []{
385+ -1 , 0 , 0 , 0 , 255 ,
386+ 0 , -1 , 0 , 0 , 255 ,
387+ 0 , 0 , -1 , 0 , 255 ,
388+ 0 , 0 , 0 , 1 , 0 });
389+
390+ ColorMatrixColorFilter filter = new ColorMatrixColorFilter (colorMatrixInverted );
391+ paint .setColorFilter (filter );
392+ } else {
393+ paint .setColorFilter (null );
394+ }
395+ }
396+
376397 void enableDoubletap (boolean enableDoubletap ) {
377398 this .doubletapEnabled = enableDoubletap ;
378399 }
@@ -549,7 +570,7 @@ protected void onDraw(Canvas canvas) {
549570
550571 Drawable bg = getBackground ();
551572 if (bg == null ) {
552- canvas .drawColor (Color .WHITE );
573+ canvas .drawColor (nightMode ? Color . BLACK : Color .WHITE );
553574 } else {
554575 bg .draw (canvas );
555576 }
@@ -1313,6 +1334,8 @@ public class Configurator {
13131334
13141335 private boolean pageSnap = false ;
13151336
1337+ private boolean nightMode = false ;
1338+
13161339 private Configurator (DocumentSource documentSource ) {
13171340 this .documentSource = documentSource ;
13181341 }
@@ -1442,6 +1465,11 @@ public Configurator pageFling(boolean pageFling) {
14421465 return this ;
14431466 }
14441467
1468+ public Configurator nightMode (boolean nightMode ) {
1469+ this .nightMode = nightMode ;
1470+ return this ;
1471+ }
1472+
14451473 public void load () {
14461474 if (!hasSize ) {
14471475 waitingDocumentConfigurator = this ;
@@ -1460,6 +1488,7 @@ public void load() {
14601488 PDFView .this .callbacks .setOnPageError (onPageErrorListener );
14611489 PDFView .this .callbacks .setLinkHandler (linkHandler );
14621490 PDFView .this .setSwipeEnabled (enableSwipe );
1491+ PDFView .this .setNightMode (nightMode );
14631492 PDFView .this .enableDoubletap (enableDoubletap );
14641493 PDFView .this .setDefaultPage (defaultPage );
14651494 PDFView .this .setSwipeVertical (!swipeHorizontal );
0 commit comments