Skip to content

Commit 7ca348c

Browse files
author
Reinhard Hafenscher
authored
Merge pull request #244 from PSPDFKit/reinhard/path-fix
Fix for PdfView not being rendered
2 parents 93c7814 + b9796ad commit 7ca348c

File tree

7 files changed

+92
-11
lines changed

7 files changed

+92
-11
lines changed

android/src/main/java/com/pspdfkit/react/ReactPdfViewManager.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import com.pspdfkit.react.events.PdfViewAnnotationChangedEvent;
1717
import com.pspdfkit.react.events.PdfViewAnnotationTappedEvent;
1818
import com.pspdfkit.react.events.PdfViewDataReturnedEvent;
19+
import com.pspdfkit.react.events.PdfViewDocumentLoadFailedEvent;
1920
import com.pspdfkit.react.events.PdfViewDocumentSaveFailedEvent;
2021
import com.pspdfkit.react.events.PdfViewDocumentSavedEvent;
2122
import com.pspdfkit.react.events.PdfViewStateChangedEvent;
@@ -75,7 +76,7 @@ protected PdfView createViewInstance(ThemedReactContext reactContext) {
7576

7677
@Override
7778
public void onDropViewInstance(PdfView view) {
78-
view.removeFragment();
79+
view.removeFragment(true);
7980
}
8081

8182
@Nullable
@@ -148,11 +149,13 @@ public void setMenuItemGrouping(PdfView view, @NonNull ReadableArray menuItemGro
148149
@Override
149150
public Map getExportedCustomDirectEventTypeConstants() {
150151
return MapBuilder.of(PdfViewStateChangedEvent.EVENT_NAME, MapBuilder.of("registrationName", "onStateChanged"),
151-
PdfViewDocumentSavedEvent.EVENT_NAME, MapBuilder.of("registrationName", "onDocumentSaved"),
152-
PdfViewAnnotationTappedEvent.EVENT_NAME, MapBuilder.of("registrationName", "onAnnotationTapped"),
153-
PdfViewAnnotationChangedEvent.EVENT_NAME, MapBuilder.of("registrationName", "onAnnotationsChanged"),
154-
PdfViewDataReturnedEvent.EVENT_NAME, MapBuilder.of("registrationName", "onDataReturned"),
155-
PdfViewDocumentSaveFailedEvent.EVENT_NAME, MapBuilder.of("registrationName", "onDocumentSaveFailed"));
152+
PdfViewDocumentSavedEvent.EVENT_NAME, MapBuilder.of("registrationName", "onDocumentSaved"),
153+
PdfViewAnnotationTappedEvent.EVENT_NAME, MapBuilder.of("registrationName", "onAnnotationTapped"),
154+
PdfViewAnnotationChangedEvent.EVENT_NAME, MapBuilder.of("registrationName", "onAnnotationsChanged"),
155+
PdfViewDataReturnedEvent.EVENT_NAME, MapBuilder.of("registrationName", "onDataReturned"),
156+
PdfViewDocumentSaveFailedEvent.EVENT_NAME, MapBuilder.of("registrationName", "onDocumentSaveFailed"),
157+
PdfViewDocumentLoadFailedEvent.EVENT_NAME, MapBuilder.of("registrationName", "onDocumentLoadFailed")
158+
);
156159
}
157160

158161
@Override
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.pspdfkit.react.events;
2+
3+
import android.support.annotation.IdRes;
4+
import android.support.annotation.NonNull;
5+
6+
import com.facebook.react.bridge.Arguments;
7+
import com.facebook.react.bridge.WritableMap;
8+
import com.facebook.react.uimanager.events.Event;
9+
import com.facebook.react.uimanager.events.RCTEventEmitter;
10+
11+
/**
12+
* Event sent by the {@link com.pspdfkit.views.PdfView} when the document load failed.
13+
*/
14+
public class PdfViewDocumentLoadFailedEvent extends Event<PdfViewDocumentLoadFailedEvent> {
15+
16+
public static final String EVENT_NAME = "pdfViewDocumentLoadFailed";
17+
18+
private final String error;
19+
20+
public PdfViewDocumentLoadFailedEvent(@IdRes int viewId, @NonNull String error) {
21+
super(viewId);
22+
this.error = error;
23+
}
24+
25+
@Override
26+
public String getEventName() {
27+
return EVENT_NAME;
28+
}
29+
30+
@Override
31+
public void dispatch(RCTEventEmitter rctEventEmitter) {
32+
WritableMap eventData = Arguments.createMap();
33+
eventData.putString("error", error);
34+
rctEventEmitter.receiveEvent(getViewTag(), getEventName(), eventData);
35+
}
36+
}

android/src/main/java/com/pspdfkit/views/PdfView.java

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import com.pspdfkit.listeners.SimpleDocumentListener;
3232
import com.pspdfkit.react.R;
3333
import com.pspdfkit.react.events.PdfViewDataReturnedEvent;
34+
import com.pspdfkit.react.events.PdfViewDocumentLoadFailedEvent;
3435
import com.pspdfkit.react.events.PdfViewDocumentSaveFailedEvent;
3536
import com.pspdfkit.react.events.PdfViewDocumentSavedEvent;
3637
import com.pspdfkit.react.events.PdfViewStateChangedEvent;
@@ -49,6 +50,7 @@
4950
import org.json.JSONObject;
5051

5152
import java.io.ByteArrayOutputStream;
53+
import java.io.File;
5254
import java.util.ArrayList;
5355
import java.util.EnumSet;
5456
import java.util.List;
@@ -151,6 +153,9 @@ public void doFrame(long frameTimeNanos) {
151153
}
152154
}
153155
});
156+
157+
// Set a default configuration.
158+
configuration = new PdfActivityConfiguration.Builder(getContext()).build();
154159
}
155160

156161
public void inject(FragmentManager fragmentManager, EventDispatcher eventDispatcher) {
@@ -170,9 +175,20 @@ public void setConfiguration(PdfActivityConfiguration configuration) {
170175
setupFragment();
171176
}
172177

173-
public void setDocument(String document) {
178+
public void setDocument(@Nullable String document) {
179+
if (document == null) {
180+
removeFragment(false);
181+
return;
182+
}
183+
174184
if (Uri.parse(document).getScheme() == null) {
175-
document = FILE_SCHEME + document;
185+
// If there is no scheme it might be a raw path.
186+
try {
187+
File file = new File(document);
188+
document = Uri.fromFile(file).toString();
189+
} catch (Exception e) {
190+
document = FILE_SCHEME + document;
191+
}
176192
}
177193
if (documentOpeningDisposable != null) {
178194
documentOpeningDisposable.dispose();
@@ -188,6 +204,14 @@ public void accept(PdfDocument pdfDocument) throws Exception {
188204
PdfView.this.document = pdfDocument;
189205
setupFragment();
190206
}
207+
208+
}, new Consumer<Throwable>() {
209+
@Override
210+
public void accept(Throwable throwable) throws Exception {
211+
PdfView.this.document = null;
212+
setupFragment();
213+
eventDispatcher.dispatchEvent(new PdfViewDocumentLoadFailedEvent(getId(), throwable.getMessage()));
214+
}
191215
});
192216
}
193217

@@ -301,16 +325,19 @@ public void onPageChanged(@NonNull PdfThumbnailBarController pdfThumbnailBarCont
301325
});
302326
}
303327

304-
public void removeFragment() {
328+
public void removeFragment(boolean makeInactive) {
305329
PdfFragment pdfFragment = (PdfFragment) fragmentManager.findFragmentByTag(fragmentTag);
306330
if (pdfFragment != null) {
307331
fragmentManager.beginTransaction()
308332
.remove(pdfFragment)
309333
.commitAllowingStateLoss();
310334
}
311-
isActive = false;
335+
if (makeInactive) {
336+
isActive = false;
337+
}
312338

313339
fragment = null;
340+
document = null;
314341
fragmentGetter.onComplete();
315342
fragmentGetter = BehaviorSubject.create();
316343
pendingFragmentActions.dispose();
@@ -319,6 +346,7 @@ public void removeFragment() {
319346
textSelectionPopupToolbar.dismiss();
320347
textSelectionPopupToolbar = null;
321348
}
349+
pdfThumbnailBar.setVisibility(View.GONE);
322350
}
323351

324352
void manuallyLayoutChildren() {

index.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class PSPDFKitView extends React.Component {
3535
onStateChanged={this._onStateChanged}
3636
onDocumentSaved={this._onDocumentSaved}
3737
onDocumentSaveFailed={this._onDocumentSaveFailed}
38+
onDocumentLoadFailed={this._onDocumentLoadFailed}
3839
onAnnotationTapped={this._onAnnotationTapped}
3940
onAnnotationsChanged={this._onAnnotationsChanged}
4041
onDataReturned={this._onDataReturned}
@@ -63,6 +64,12 @@ class PSPDFKitView extends React.Component {
6364
}
6465
};
6566

67+
_onDocumentLoadFailed = event => {
68+
if (this.props.onDocumentLoadFailed) {
69+
this.props.onDocumentLoadFailed(event.nativeEvent);
70+
}
71+
};
72+
6673
_onAnnotationTapped = event => {
6774
if (this.props.onAnnotationTapped) {
6875
this.props.onAnnotationTapped(event.nativeEvent);

ios/RCTPSPDFKit/RCTPSPDFKitView.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ NS_ASSUME_NONNULL_BEGIN
2626
@property (nonatomic, copy) RCTBubblingEventBlock onCloseButtonPressed;
2727
@property (nonatomic, copy) RCTBubblingEventBlock onDocumentSaved;
2828
@property (nonatomic, copy) RCTBubblingEventBlock onDocumentSaveFailed;
29+
@property (nonatomic, copy) RCTBubblingEventBlock onDocumentLoadFailed;
2930
@property (nonatomic, copy) RCTBubblingEventBlock onAnnotationTapped;
3031
@property (nonatomic, copy) RCTBubblingEventBlock onAnnotationsChanged;
3132
@property (nonatomic, copy) RCTBubblingEventBlock onStateChanged;

ios/RCTPSPDFKit/RCTPSPDFKitView.m

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
#import "RCTConvert+PSPDFViewMode.h"
1414
#import "RCTConvert+UIBarButtonItem.h"
1515

16-
#define VALIDATE_DOCUMENT(document, ...) { if (!document.isValid) { NSLog(@"Document is invalid."); return __VA_ARGS__; }}
16+
#define VALIDATE_DOCUMENT(document, ...) { if (!document.isValid) { NSLog(@"Document is invalid."); if (self.onDocumentLoadFailed) { self.onDocumentLoadFailed(@{@"error": @"Document is invalid."}); } return __VA_ARGS__; }}
1717

1818
@interface RCTPSPDFKitView ()<PSPDFDocumentDelegate, PSPDFViewControllerDelegate, PSPDFFlexibleToolbarContainerDelegate>
1919

@@ -160,6 +160,10 @@ - (void)pdfViewController:(PSPDFViewController *)pdfController willBeginDisplayi
160160
[self onStateChangedForPDFViewController:pdfController pageView:pageView pageAtIndex:pageIndex];
161161
}
162162

163+
- (void)pdfViewController:(PSPDFViewController *)pdfController didChangeDocument:(nullable PSPDFDocument *)document {
164+
VALIDATE_DOCUMENT(document)
165+
}
166+
163167
#pragma mark - PSPDFFlexibleToolbarContainerDelegate
164168

165169
- (void)flexibleToolbarContainerDidShow:(PSPDFFlexibleToolbarContainer *)container {

ios/RCTPSPDFKit/RCTPSPDFKitViewManager.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ @implementation RCTPSPDFKitViewManager
9393

9494
RCT_EXPORT_VIEW_PROPERTY(onDocumentSaveFailed, RCTBubblingEventBlock)
9595

96+
RCT_EXPORT_VIEW_PROPERTY(onDocumentLoadFailed, RCTBubblingEventBlock)
97+
9698
RCT_EXPORT_VIEW_PROPERTY(onAnnotationTapped, RCTBubblingEventBlock)
9799

98100
RCT_EXPORT_VIEW_PROPERTY(onAnnotationsChanged, RCTBubblingEventBlock)

0 commit comments

Comments
 (0)