Skip to content

return new instance in createViewInstance #55

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
130 changes: 53 additions & 77 deletions android/src/main/java/com/keyee/pdfview/PDFViewManager.java
Original file line number Diff line number Diff line change
@@ -1,46 +1,36 @@
package com.keyee.pdfview;

import java.io.File;

import android.content.Context;
import android.view.ViewGroup;
import android.util.Log;
import android.graphics.PointF;
import android.util.Log;

import com.github.barteksc.pdfviewer.PDFView;
import com.github.barteksc.pdfviewer.listener.OnPageChangeListener;
import com.github.barteksc.pdfviewer.listener.OnLoadCompleteListener;

/*
import com.joanzapata.pdfview.PDFView;
import com.joanzapata.pdfview.listener.OnPageChangeListener;
import com.joanzapata.pdfview.listener.OnLoadCompleteListener;
*/

import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.uimanager.SimpleViewManager;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.annotations.ReactProp;
import com.facebook.react.uimanager.events.RCTEventEmitter;
import com.facebook.react.common.MapBuilder;
import com.facebook.react.uimanager.SimpleViewManager;
import com.facebook.react.uimanager.ThemedReactContext;

import com.github.barteksc.pdfviewer.PDFView;
import com.github.barteksc.pdfviewer.listener.OnLoadCompleteListener;
import com.github.barteksc.pdfviewer.listener.OnPageChangeListener;

import java.io.File;

import static java.lang.String.format;
import java.lang.ClassCastException;

public class PDFViewManager extends SimpleViewManager<PDFView> implements OnPageChangeListener,OnLoadCompleteListener {
public class PDFViewManager extends SimpleViewManager<PDFView> implements OnPageChangeListener, OnLoadCompleteListener {
private static final String REACT_CLASS = "RCTPDFViewAndroid";
private Context context;
private PDFView pdfView;
private PDFView view;

Integer pageNumber = 0;
String assetName;
String filePath;


public PDFViewManager(ReactApplicationContext reactContext){
public PDFViewManager(ReactApplicationContext reactContext) {
this.context = reactContext;
}

Expand All @@ -51,21 +41,7 @@ public String getName() {

@Override
public PDFView createViewInstance(ThemedReactContext context) {
if (pdfView == null){
pdfView = new PDFView(context, null);
} else {
/* #39 check parent and remove self from parent */
try {
final ViewGroup parentView = (ViewGroup) pdfView.getParent();
if (parentView != null) {
parentView.removeView(pdfView);
}
} catch (ClassCastException e) {
showLog("does not has a parent");
}
}
return pdfView;
//return new PDFView(context, null);
return new PDFView(context, null);
}

@Override
Expand All @@ -74,79 +50,79 @@ public void onPageChanged(int page, int pageCount) {
showLog(format("%s %s / %s", filePath, page, pageCount));
}

@Override
public void loadComplete(int nbPages) {
WritableMap event = Arguments.createMap();
event.putString("message", ""+nbPages);
ReactContext reactContext = (ReactContext)pdfView.getContext();
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(
pdfView.getId(),
"topChange",
event
);
}
private void display(PDFView pdfView, boolean jumpToFirstPage) {
this.view = pdfView;

if (jumpToFirstPage) {
pageNumber = 0;
}

private void display(boolean jumpToFirstPage) {
if (jumpToFirstPage)
pageNumber = 1;
showLog(format("display %s %s", filePath, pageNumber));
if (assetName != null) {
pdfView.fromAsset(assetName)
.defaultPage(pageNumber)
//.swipeVertical(true)
.onPageChange(this)
.onLoad(this)
.load();
} else if (filePath != null){
//fromFile,fromAsset
//pdfView.fromAsset(fileName)
.defaultPage(pageNumber)
.enableSwipe(true)
.swipeHorizontal(false)
.onPageChange(this)
.onLoad(this)
.load();
} else if (filePath != null) {
File pdfFile = new File(filePath);
pdfView.fromFile(pdfFile)
.defaultPage(pageNumber)
//.showMinimap(false)
//.enableSwipe(true)
//.swipeVertical(true)
.onPageChange(this)
.onLoad(this)
.load();
.defaultPage(pageNumber)
.enableSwipe(true)
.swipeHorizontal(false)
.onPageChange(this)
.onLoad(this)
.load();
}
}

@Override
public void loadComplete(int nbPages) {
WritableMap event = Arguments.createMap();
event.putString("message", "" + nbPages);
ReactContext reactContext = (ReactContext) view.getContext();
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(
view.getId(),
"topChange",
event
);
}

@ReactProp(name = "asset")
public void setAsset(PDFView view, String ast) {
assetName = ast;
display(false);
display(view, false);
}

@ReactProp(name = "pageNumber")
public void setPageNumber(PDFView view, Integer pageNum) {
//view.setPageNumber(pageNum);
if (pageNum >= 0){
if (pageNum > 0) {
pageNumber = pageNum;
display(false);
display(view, false);
}
}

@ReactProp(name = "path")
public void setPath(PDFView view, String pth) {
filePath = pth;
display(false);
display(view, false);
}

@ReactProp(name = "src")
public void setSrc(PDFView view, String src) {
//view.setSource(src);
filePath = src;
display(false);
display(view, false);
}

@ReactProp(name = "zoom")
public void zoomTo(PDFView view, float zoomScale) {
PointF pivot = new PointF(zoomScale, zoomScale);
pdfView.zoomCenteredTo(zoomScale, pivot);
view.zoomCenteredTo(zoomScale, pivot);
}

private void showLog(final String str) {
Log.w(REACT_CLASS, str);
}
}
}