Skip to content

Commit 3d54f8b

Browse files
author
irgendeinich
committed
Merge branch 'master' into reinhard/automated-testing
# Conflicts: # samples/Catalog/index.js
2 parents dd5f1fb + 3009bbe commit 3d54f8b

33 files changed

+4120
-1311
lines changed

README.md

Lines changed: 403 additions & 366 deletions
Large diffs are not rendered by default.

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Contains gradle configuration constants
33
*/
44
ext {
5-
PSPDFKIT_VERSION = '4.6.0'
5+
PSPDFKIT_VERSION = '4.8.1'
66
}
77

88
buildscript {

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ public class ConfigurationAdapter {
5656
private static final String ENABLE_TEXT_SELECTION = "enableTextSelection";
5757
private static final String SHOW_SHARE_ACTION = "showShareAction";
5858
private static final String SHOW_PRINT_ACTION = "showPrintAction";
59+
private static final String SHOW_DOCUMENT_INFO_VIEW = "showDocumentInfoView";
60+
5961

6062
private final PdfActivityConfiguration.Builder configuration;
6163

@@ -128,6 +130,9 @@ public ConfigurationAdapter(@NonNull Context context, ReadableMap configuration)
128130
if (configuration.hasKey(SHOW_THUMBNAIL_BAR)) {
129131
configureShowThumbnailBar(configuration.getString(SHOW_THUMBNAIL_BAR));
130132
}
133+
if (configuration.hasKey(SHOW_DOCUMENT_INFO_VIEW)) {
134+
configureDocumentInfoView(configuration.getBoolean(SHOW_DOCUMENT_INFO_VIEW));
135+
}
131136
}
132137
}
133138

@@ -272,6 +277,14 @@ private void configureEnableTextSelection(boolean enableTextSelection) {
272277
configuration.textSelectionEnabled(enableTextSelection);
273278
}
274279

280+
private void configureDocumentInfoView(boolean enableDocumentInfoView) {
281+
if (enableDocumentInfoView) {
282+
configuration.enableDocumentInfoView();
283+
} else {
284+
configuration.disableDocumentInfoView();
285+
}
286+
}
287+
275288
public PdfActivityConfiguration build() {
276289
return configuration.build();
277290
}

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

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,37 +15,67 @@
1515

1616
import android.app.Activity;
1717
import android.app.Application;
18+
import android.content.Intent;
1819
import android.net.Uri;
1920
import android.os.Bundle;
21+
import android.os.Handler;
22+
import android.os.Looper;
2023
import android.support.annotation.NonNull;
2124
import android.support.annotation.Nullable;
25+
import android.support.v4.app.Fragment;
26+
import android.support.v4.app.FragmentActivity;
2227

28+
import com.facebook.react.bridge.ActivityEventListener;
2329
import com.facebook.react.bridge.ReactApplicationContext;
2430
import com.facebook.react.bridge.ReactContextBaseJavaModule;
2531
import com.facebook.react.bridge.ReactMethod;
2632
import com.facebook.react.bridge.ReadableMap;
2733
import com.pspdfkit.PSPDFKit;
2834
import com.pspdfkit.document.PdfDocument;
35+
import com.pspdfkit.document.image.CameraImagePickerFragment;
36+
import com.pspdfkit.document.image.GalleryImagePickerFragment;
2937
import com.pspdfkit.listeners.SimpleDocumentListener;
3038
import com.pspdfkit.ui.PdfActivity;
39+
import com.pspdfkit.ui.PdfFragment;
3140

3241
import java.util.HashMap;
3342
import java.util.Map;
3443

35-
public class PSPDFKitModule extends ReactContextBaseJavaModule implements Application.ActivityLifecycleCallbacks {
44+
public class PSPDFKitModule extends ReactContextBaseJavaModule implements Application.ActivityLifecycleCallbacks, ActivityEventListener {
3645

3746
private static final String VERSION_KEY = "versionString";
3847
private static final String FILE_SCHEME = "file:///";
3948

49+
private static final int REQUEST_CODE_TO_INDEX = 16;
50+
private static final int MASKED_REQUEST_CODE_TO_REAL_CODE = 0xffff;
51+
4052
@Nullable
4153
private Activity resumedActivity;
4254
@Nullable
4355
private Runnable onPdfActivityOpenedTask;
4456

57+
/**
58+
* Used to dispatch onActivityResult calls to our fragments.
59+
*/
60+
@NonNull
61+
private Handler activityResultHandler = new Handler(Looper.getMainLooper());
62+
4563
public PSPDFKitModule(ReactApplicationContext reactContext) {
4664
super(reactContext);
4765
}
4866

67+
@Override
68+
public void initialize() {
69+
super.initialize();
70+
getReactApplicationContext().addActivityEventListener(this);
71+
}
72+
73+
@Override
74+
public void onCatalystInstanceDestroy() {
75+
super.onCatalystInstanceDestroy();
76+
getReactApplicationContext().removeActivityEventListener(this);
77+
}
78+
4979
@Override
5080
public String getName() {
5181
return "PSPDFKit";
@@ -165,4 +195,36 @@ public synchronized void onActivityDestroyed(Activity activity) {
165195
resumedActivity = null;
166196
}
167197
}
198+
199+
@Override
200+
public void onActivityResult(Activity activity, final int requestCode, final int resultCode, final Intent data) {
201+
if (activity instanceof FragmentActivity) {
202+
// Forward the result to all our fragments.
203+
FragmentActivity fragmentActivity = (FragmentActivity) activity;
204+
for (final Fragment fragment : fragmentActivity.getSupportFragmentManager().getFragments()) {
205+
if (fragment instanceof PdfFragment ||
206+
fragment instanceof GalleryImagePickerFragment ||
207+
fragment instanceof CameraImagePickerFragment) {
208+
// When starting an intent from a fragment its request code is shifted to make it unique,
209+
// we undo it here manually since react by default eats all activity results.
210+
int requestIndex = requestCode >> REQUEST_CODE_TO_INDEX;
211+
if (requestIndex != 0) {
212+
// We need to wait until the next frame with delivering the result to the fragment,
213+
// otherwise the app will crash since the fragment won't be ready.
214+
activityResultHandler.post(new Runnable() {
215+
@Override
216+
public void run() {
217+
fragment.onActivityResult(requestCode & MASKED_REQUEST_CODE_TO_REAL_CODE, resultCode, data);
218+
}
219+
});
220+
}
221+
}
222+
}
223+
}
224+
}
225+
226+
@Override
227+
public void onNewIntent(Intent intent) {
228+
// Not required right now.
229+
}
168230
}

android/src/main/java/com/pspdfkit/react/events/PdfViewDataReturnedEvent.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,20 @@ public class PdfViewDataReturnedEvent extends Event<PdfViewDataReturnedEvent> {
2424

2525
private final WritableMap payload;
2626

27-
public PdfViewDataReturnedEvent(@IdRes int viewId, int requestId, @NonNull List<Annotation> annotations) {
27+
public PdfViewDataReturnedEvent(@IdRes int viewId, int requestId, @NonNull List<Annotation> annotationsToSerialize) {
2828
super(viewId);
2929
Map<String, Object> map = new HashMap<>();
3030
map.put("requestId", requestId);
3131
try {
3232
List<Map<String, Object>> annotationsSerialized = new ArrayList<>();
33-
for (Annotation annotation : annotations) {
33+
for (Annotation annotation : annotationsToSerialize) {
3434
JSONObject instantJson = new JSONObject(annotation.toInstantJson());
3535
annotationsSerialized.add(JsonUtilities.jsonObjectToMap(instantJson));
3636
}
37-
map.put("result", annotationsSerialized);
37+
38+
Map<String, Object> annotations = new HashMap<>();
39+
annotations.put("annotations", annotationsSerialized);
40+
map.put("result", annotations);
3841
} catch (JSONException e) {
3942
map.put("error", e.getMessage());
4043
}

0 commit comments

Comments
 (0)