Skip to content

Commit 39a3ee2

Browse files
authored
Merge pull request #117 from PSPDFKit/reinhard/image-stamps
Fix image stamps not working
2 parents fab1cdd + e84c89e commit 39a3ee2

File tree

1 file changed

+63
-1
lines changed

1 file changed

+63
-1
lines changed

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
}

0 commit comments

Comments
 (0)