diff options
-rw-r--r-- | platform/android/jni/mupdf.c | 92 | ||||
-rw-r--r-- | platform/android/res/drawable-ldpi/ic_proof.png | bin | 0 -> 1229 bytes | |||
-rw-r--r-- | platform/android/res/drawable-mdpi/ic_proof.png | bin | 0 -> 1244 bytes | |||
-rw-r--r-- | platform/android/res/layout/buttons.xml | 11 | ||||
-rw-r--r-- | platform/android/res/values/strings.xml | 1 | ||||
-rw-r--r-- | platform/android/src/com/artifex/mupdfdemo/MuPDFActivity.java | 17 | ||||
-rw-r--r-- | platform/android/src/com/artifex/mupdfdemo/MuPDFCore.java | 11 |
7 files changed, 132 insertions, 0 deletions
diff --git a/platform/android/jni/mupdf.c b/platform/android/jni/mupdf.c index 7a5b90f8..add5598e 100644 --- a/platform/android/jni/mupdf.c +++ b/platform/android/jni/mupdf.c @@ -36,6 +36,7 @@ #define LINE_THICKNESS (0.07f) #define INK_THICKNESS (4.0f) #define SMALL_FLOAT (0.00001) +#define PROOF_RESOLUTION (300) enum { @@ -2675,3 +2676,94 @@ JNI_FN(MuPDFCore_abortCookie)(JNIEnv * env, jobject thiz, jlong cookiePtr) if (cookie != NULL) cookie->abort = 1; } + +static char *tmp_gproof_path(char *path) +{ + FILE *f; + int i; + char *buf = malloc(strlen(path) + 20 + 1); + if (!buf) + return NULL; + + for (i = 0; i < 10000; i++) + { + sprintf(buf, "%s.%d.gproof", path, i); + + LOGE("Trying for %s\n", buf); + f = fopen(buf, "r"); + if (f != NULL) + { + fclose(f); + continue; + } + + f = fopen(buf, "w"); + if (f != NULL) + { + fclose(f); + break; + } + } + if (i == 10000) + { + LOGE("Failed to find temp gproof name"); + free(buf); + return NULL; + } + + LOGE("Rewritten to %s\n", buf); + return buf; +} + +JNIEXPORT jstring JNICALL +JNI_FN(MuPDFCore_startProofInternal)(JNIEnv * env, jobject thiz) +{ + globals *glo = get_globals(env, thiz); + fz_context *ctx = glo->ctx; + char *tmp; + jstring ret; + + if (!glo->doc || !glo->current_path) + return NULL; + + tmp = tmp_gproof_path(glo->current_path); + if (!tmp) + return NULL; + + fz_try(ctx) + { + fz_write_gproof_file(ctx, glo->current_path, glo->doc, tmp, PROOF_RESOLUTION); + + LOGE("Creating %s\n", tmp); + ret = (*env)->NewStringUTF(env, tmp); + } + fz_always(ctx) + { + free(tmp); + } + fz_catch(ctx) + { + ret = NULL; + } + return ret; +} + +JNIEXPORT void JNICALL +JNI_FN(MuPDFCore_endProofInternal)(JNIEnv * env, jobject thiz, jstring jfilename) +{ + globals *glo = get_globals(env, thiz); + fz_context *ctx = glo->ctx; + const char *tmp; + + if (!glo->doc || !glo->current_path || jfilename == NULL) + return; + + tmp = (*env)->GetStringUTFChars(env, jfilename, NULL); + if (tmp) + { + LOGE("Deleting %s\n", tmp); + + unlink(tmp); + (*env)->ReleaseStringUTFChars(env, jfilename, tmp); + } +} diff --git a/platform/android/res/drawable-ldpi/ic_proof.png b/platform/android/res/drawable-ldpi/ic_proof.png Binary files differnew file mode 100644 index 00000000..fee26a7b --- /dev/null +++ b/platform/android/res/drawable-ldpi/ic_proof.png diff --git a/platform/android/res/drawable-mdpi/ic_proof.png b/platform/android/res/drawable-mdpi/ic_proof.png Binary files differnew file mode 100644 index 00000000..61d94587 --- /dev/null +++ b/platform/android/res/drawable-mdpi/ic_proof.png diff --git a/platform/android/res/layout/buttons.xml b/platform/android/res/layout/buttons.xml index 98eddc22..12de40c6 100644 --- a/platform/android/res/layout/buttons.xml +++ b/platform/android/res/layout/buttons.xml @@ -259,6 +259,17 @@ android:src="@drawable/ic_cancel" /> <ImageButton + android:id="@+id/proofButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerVertical="true" + android:layout_toLeftOf="@+id/printButton" + android:contentDescription="@string/proof" + android:background="@drawable/button" + android:onClick="OnProofButtonClick" + android:src="@drawable/ic_proof" /> + + <ImageButton android:id="@+id/printButton" android:layout_width="wrap_content" android:layout_height="wrap_content" diff --git a/platform/android/res/values/strings.xml b/platform/android/res/values/strings.xml index f20316e2..dcff35f4 100644 --- a/platform/android/res/values/strings.xml +++ b/platform/android/res/values/strings.xml @@ -25,6 +25,7 @@ <string name="edit_annotations">Edit annotations</string> <string name="ink">Ink</string> <string name="save">Save</string> + <string name="proof">Proof</string> <string name="print">Print</string> <string name="dismiss">Dismiss</string> <string name="parent_directory">[Up one level]</string> diff --git a/platform/android/src/com/artifex/mupdfdemo/MuPDFActivity.java b/platform/android/src/com/artifex/mupdfdemo/MuPDFActivity.java index 58ea1aa3..172c189a 100644 --- a/platform/android/src/com/artifex/mupdfdemo/MuPDFActivity.java +++ b/platform/android/src/com/artifex/mupdfdemo/MuPDFActivity.java @@ -50,6 +50,7 @@ public class MuPDFActivity extends Activity implements FilePicker.FilePickerSupp private final int OUTLINE_REQUEST=0; private final int PRINT_REQUEST=1; private final int FILEPICK_REQUEST=2; + private final int PROOF_REQUEST=3; private MuPDFCore core; private String mFileName; private MuPDFReaderView mDocView; @@ -83,6 +84,7 @@ public class MuPDFActivity extends Activity implements FilePicker.FilePickerSupp private AsyncTask<Void,Void,MuPDFAlert> mAlertTask; private AlertDialog mAlertDialog; private FilePicker mFilePicker; + private String mProofFile; public void createAlertWaiter() { mAlertsActive = true; @@ -621,6 +623,12 @@ public class MuPDFActivity extends Activity implements FilePicker.FilePickerSupp case FILEPICK_REQUEST: if (mFilePicker != null && resultCode == RESULT_OK) mFilePicker.onPick(data.getData()); + case PROOF_REQUEST: + if (mProofFile != null) + { + core.endProof(mProofFile); + mProofFile = null; + } } super.onActivityResult(requestCode, resultCode, data); } @@ -899,6 +907,15 @@ public class MuPDFActivity extends Activity implements FilePicker.FilePickerSupp printDoc(); } + public void OnProofButtonClick(View v) { + mProofFile = core.startProof(); + Uri uri = Uri.parse("file://"+mProofFile); + Intent intent = new Intent(this,MuPDFActivity.class); + intent.setAction(Intent.ACTION_VIEW); + intent.setData(uri); + startActivityForResult(intent, PROOF_REQUEST); + } + public void OnCopyTextButtonClick(View v) { mTopBarMode = TopBarMode.Accept; mTopBarSwitcher.setDisplayedChild(mTopBarMode.ordinal()); diff --git a/platform/android/src/com/artifex/mupdfdemo/MuPDFCore.java b/platform/android/src/com/artifex/mupdfdemo/MuPDFCore.java index be6f6fbf..ffab6782 100644 --- a/platform/android/src/com/artifex/mupdfdemo/MuPDFCore.java +++ b/platform/android/src/com/artifex/mupdfdemo/MuPDFCore.java @@ -6,6 +6,7 @@ import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.PointF; import android.graphics.RectF; +import android.content.Intent; public class MuPDFCore { @@ -77,6 +78,8 @@ public class MuPDFCore private native long createCookie(); private native void destroyCookie(long cookie); private native void abortCookie(long cookie); + private native String startProofInternal(); + private native void endProofInternal(String filename); public native boolean javascriptSupported(); @@ -346,4 +349,12 @@ public class MuPDFCore public synchronized void save() { saveInternal(); } + + public synchronized String startProof() { + return startProofInternal(); + } + + public synchronized void endProof(String filename) { + endProofInternal(filename); + } } |