Skip to content

Commit bfd363c

Browse files
author
irgendeinich
committed
Fix image stamps not working
1 parent fab1cdd commit bfd363c

File tree

1 file changed

+60
-1
lines changed

1 file changed

+60
-1
lines changed

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

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,33 @@
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:///";
@@ -42,10 +51,28 @@ public class PSPDFKitModule extends ReactContextBaseJavaModule implements Applic
4251
@Nullable
4352
private Runnable onPdfActivityOpenedTask;
4453

54+
/**
55+
* Used to dispatch onActivityResult calls to our fragments.
56+
*/
57+
@NonNull
58+
private Handler handler = new Handler(Looper.getMainLooper());
59+
4560
public PSPDFKitModule(ReactApplicationContext reactContext) {
4661
super(reactContext);
4762
}
4863

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

0 commit comments

Comments
 (0)