├── .classpath ├── .gitignore ├── .project ├── AndroidManifest.xml ├── ClassStructure.txt ├── Icons.txt ├── LICENSE ├── Makefile ├── ReadMe.txt ├── build.gradle ├── build.xml ├── jni ├── Android.mk ├── Application.mk ├── Core.mk ├── ThirdParty.mk └── mupdf.c ├── libs ├── android-support-v4.jar ├── armeabi-v7a │ └── libmupdf_java.so └── x86 │ └── libmupdf_java.so ├── project.properties ├── res ├── animator │ └── info.xml ├── drawable-hdpi │ └── icon.png ├── drawable-ldpi │ ├── ic_annot.png │ ├── ic_annotation.png │ ├── ic_arrow_left.png │ ├── ic_arrow_right.png │ ├── ic_cancel.png │ ├── ic_check.png │ ├── ic_clipboard.png │ ├── ic_dir.png │ ├── ic_doc.png │ ├── ic_highlight.png │ ├── ic_link.png │ ├── ic_list.png │ ├── ic_magnifying_glass.png │ ├── ic_more.png │ ├── ic_pen.png │ ├── ic_print.png │ ├── ic_proof.png │ ├── ic_reflow.png │ ├── ic_select.png │ ├── ic_share.png │ ├── ic_strike.png │ ├── ic_trash.png │ ├── ic_underline.png │ ├── ic_updir.png │ └── icon.png ├── drawable-mdpi │ ├── ic_annot.png │ ├── ic_annotation.png │ ├── ic_arrow_left.png │ ├── ic_arrow_right.png │ ├── ic_arrow_up.png │ ├── ic_cancel.png │ ├── ic_check.png │ ├── ic_clipboard.png │ ├── ic_dir.png │ ├── ic_doc.png │ ├── ic_highlight.png │ ├── ic_link.png │ ├── ic_list.png │ ├── ic_magnifying_glass.png │ ├── ic_more.png │ ├── ic_pen.png │ ├── ic_print.png │ ├── ic_proof.png │ ├── ic_reflow.png │ ├── ic_select.png │ ├── ic_sep.png │ ├── ic_share.png │ ├── ic_strike.png │ ├── ic_trash.png │ ├── ic_underline.png │ └── icon.png ├── drawable-xhdpi │ └── icon.png ├── drawable │ ├── busy.xml │ ├── button.xml │ ├── darkdenim3.png │ ├── page_num.xml │ ├── search.xml │ ├── seek_progress.xml │ ├── seek_thumb.xml │ └── tiled_background.xml ├── layout │ ├── buttons.xml │ ├── main.xml │ ├── outline_entry.xml │ ├── picker_entry.xml │ ├── print_dialog.xml │ └── textentry.xml ├── values-ar │ └── strings.xml ├── values-ca │ └── strings.xml ├── values-cs │ └── strings.xml ├── values-da │ └── strings.xml ├── values-de │ └── strings.xml ├── values-el │ └── strings.xml ├── values-es │ └── strings.xml ├── values-et │ └── strings.xml ├── values-fi │ └── strings.xml ├── values-fr │ └── strings.xml ├── values-hi │ └── strings.xml ├── values-hu │ └── strings.xml ├── values-in │ └── strings.xml ├── values-it │ └── strings.xml ├── values-iw │ └── strings.xml ├── values-ja │ └── strings.xml ├── values-ko │ └── strings.xml ├── values-lt │ └── strings.xml ├── values-ms │ └── strings.xml ├── values-nl │ └── strings.xml ├── values-no │ └── strings.xml ├── values-pl │ └── strings.xml ├── values-pt │ └── strings.xml ├── values-ru │ └── strings.xml ├── values-sk │ └── strings.xml ├── values-sv │ └── strings.xml ├── values-th │ └── strings.xml ├── values-tl │ └── strings.xml ├── values-tr │ └── strings.xml ├── values-zh-rTW │ └── strings.xml ├── values-zh │ └── strings.xml └── values │ ├── colors.xml │ ├── strings.xml │ └── styles.xml └── src └── com └── artifex └── mupdfdemo ├── Annotation.java ├── ArrayDeque.java ├── AsyncTask.java ├── CancellableAsyncTask.java ├── CancellableTaskDefinition.java ├── ChoosePDFActivity.java ├── ChoosePDFAdapter.java ├── ChoosePDFItem.java ├── Deque.java ├── FilePicker.java ├── LinkInfo.java ├── LinkInfoExternal.java ├── LinkInfoInternal.java ├── LinkInfoRemote.java ├── LinkInfoVisitor.java ├── MuPDFActivity.java ├── MuPDFAlert.java ├── MuPDFAlertInternal.java ├── MuPDFCancellableTaskDefinition.java ├── MuPDFCore.java ├── MuPDFFragment.java ├── MuPDFPageAdapter.java ├── MuPDFPageView.java ├── MuPDFReaderView.java ├── MuPDFReflowAdapter.java ├── MuPDFReflowView.java ├── MuPDFView.java ├── OutlineActivity.java ├── OutlineActivityData.java ├── OutlineAdapter.java ├── OutlineItem.java ├── PageView.java ├── PrintDialogActivity.java ├── ReaderView.java ├── SafeAnimatorInflater.java ├── SearchTask.java ├── SearchTaskResult.java ├── Separation.java ├── Stepper.java ├── TextChar.java ├── TextWord.java └── WidgetType.java /.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | /local.properties 3 | .idea 4 | .DS_Store 5 | /build 6 | /captures 7 | *.iml 8 | obj 9 | 10 | # Built application files 11 | *.apk 12 | *.ap_ 13 | 14 | # Files for the ART/Dalvik VM 15 | *.dex 16 | 17 | # Java class files 18 | *.class 19 | 20 | # Generated files 21 | bin/ 22 | gen/ 23 | out/ 24 | 25 | # Gradle files 26 | .gradle/ 27 | build/ 28 | 29 | # Local configuration file (sdk path, etc) 30 | local.properties 31 | 32 | # Proguard folder generated by Eclipse 33 | proguard/ 34 | 35 | # Log Files 36 | *.log 37 | 38 | # Android Studio Navigation editor temp files 39 | .navigation/ 40 | 41 | # Android Studio captures folder 42 | captures/ 43 | 44 | # Intellij 45 | *.iml 46 | .idea/workspace.xml 47 | .idea/libraries 48 | 49 | # Keystore files 50 | *.jks 51 | 52 | .metadata 53 | bin/ 54 | tmp/ 55 | *.tmp 56 | *.bak 57 | *.swp 58 | *~.nib 59 | local.properties 60 | .settings/ 61 | .loadpath 62 | .recommenders 63 | 64 | # Eclipse Core 65 | .project 66 | 67 | # External tool builders 68 | .externalToolBuilders/ 69 | 70 | # Locally stored "Eclipse launch configurations" 71 | *.launch 72 | 73 | # PyDev specific (Python IDE for Eclipse) 74 | *.pydevproject 75 | 76 | # CDT-specific (C/C++ Development Tooling) 77 | .cproject 78 | 79 | # JDT-specific (Eclipse Java Development Tools) 80 | .classpath 81 | 82 | # Java annotation processor (APT) 83 | .factorypath 84 | 85 | # PDT-specific (PHP Development Tools) 86 | .buildpath 87 | 88 | # sbteclipse plugin 89 | .target 90 | 91 | # Tern plugin 92 | .tern-project 93 | 94 | # TeXlipse plugin 95 | .texlipse 96 | 97 | # STS (Spring Tool Suite) 98 | .springBeans 99 | 100 | # Code Recommenders 101 | .recommenders/ -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | ChoosePDFActivity 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.andmore.ResourceManagerBuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.andmore.PreCompilerBuilder 15 | 16 | 17 | 18 | 19 | org.eclipse.jdt.core.javabuilder 20 | 21 | 22 | 23 | 24 | org.eclipse.andmore.ApkBuilder 25 | 26 | 27 | 28 | 29 | 30 | org.eclipse.andmore.AndroidNature 31 | org.eclipse.jdt.core.javanature 32 | 33 | 34 | -------------------------------------------------------------------------------- /AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /Icons.txt: -------------------------------------------------------------------------------- 1 | The icons are from http://somerandomdude.com/work/iconic/ 2 | They are covered by the CC-BY-SA license: http://creativecommons.org/licenses/by-sa/3.0/us/ 3 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | default: 2 | ndk-build 3 | ant debug 4 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | import org.apache.tools.ant.taskdefs.condition.Os 2 | 3 | buildscript { 4 | repositories { 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:1.2.3' 9 | } 10 | } 11 | 12 | allprojects { 13 | repositories { 14 | jcenter() 15 | } 16 | } 17 | 18 | apply plugin: 'com.android.application' 19 | 20 | dependencies { 21 | compile fileTree(dir: 'libs', include: '*.so') 22 | } 23 | 24 | android { 25 | compileSdkVersion 17 26 | buildToolsVersion '21.1.2' 27 | 28 | /* this stops gradle from making it's own Android.mk file */ 29 | sourceSets.main.jni.srcDirs = [] 30 | 31 | sourceSets { 32 | main { 33 | manifest { 34 | srcFile 'AndroidManifest.xml' 35 | } 36 | java { 37 | srcDir 'src' 38 | exclude 'com/artifex/mupdf/fitz/AndroidDrawDevice.java' 39 | } 40 | res { 41 | srcDir 'res' 42 | } 43 | assets { 44 | srcDir 'assets' 45 | } 46 | resources { 47 | srcDir 'src' 48 | } 49 | jniLibs { 50 | srcDir 'libs' 51 | } 52 | } 53 | } 54 | 55 | /* This is important, it will run lint checks but won't abort build */ 56 | lintOptions { 57 | abortOnError false 58 | } 59 | } 60 | 61 | /* This defines the path to Android's ndk-build. */ 62 | def ndkBuildPath = plugins.getPlugin('com.android.application').sdkHandler.getNdkFolder().absolutePath + File.separator + 'ndk-build' 63 | if (Os.isFamily(Os.FAMILY_WINDOWS)) { 64 | ndkBuildPath +='.cmd' 65 | } 66 | 67 | /* This task builds the native part */ 68 | task buildNative(type: Exec,description: 'Compile JNI source via NDK') { 69 | println('executing buildNative') 70 | commandLine ndkBuildPath, '-C', file('.').absolutePath, ' FZ_ENABLE_GPRF=1' 71 | //'NDK_PROJECT_PATH=build','APP_BUILD_SCRIPT=src/main/jni/Android.mk'//force using appropriate Makefile 72 | } 73 | 74 | /* This task cleans the native part */ 75 | task cleanNative(type: Exec, description: 'Clean JNI object files') { 76 | println('executing cleanNative') 77 | commandLine ndkBuildPath, '-C', file('.').absolutePath, 'clean' 78 | } 79 | 80 | /* cleaning should also include cleaning native */ 81 | clean.dependsOn 'cleanNative' 82 | 83 | /* building should include native */ 84 | tasks.withType(JavaCompile){ 85 | compileTask -> compileTask.dependsOn buildNative 86 | } 87 | -------------------------------------------------------------------------------- /build.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 31 | 32 | 33 | 44 | 45 | 46 | 47 | 51 | 52 | 53 | 61 | 62 | 79 | 80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /jni/Android.mk: -------------------------------------------------------------------------------- 1 | LOCAL_PATH := $(call my-dir) 2 | TOP_LOCAL_PATH := $(LOCAL_PATH) 3 | 4 | MUPDF_ROOT := ../../.. 5 | 6 | ifdef NDK_PROFILER 7 | include android-ndk-profiler.mk 8 | endif 9 | 10 | include $(TOP_LOCAL_PATH)/Core.mk 11 | include $(TOP_LOCAL_PATH)/ThirdParty.mk 12 | 13 | include $(CLEAR_VARS) 14 | 15 | LOCAL_C_INCLUDES := \ 16 | jni/andprof \ 17 | $(MUPDF_ROOT)/include \ 18 | $(MUPDF_ROOT)/source/fitz \ 19 | $(MUPDF_ROOT)/source/pdf \ 20 | $(MUPDF_ROOT)/platform/java 21 | LOCAL_CFLAGS := -DHAVE_ANDROID 22 | LOCAL_MODULE := mupdf_java 23 | 24 | LOCAL_SRC_FILES := \ 25 | mupdf.c \ 26 | $(MUPDF_ROOT)/../platform/java/mupdf_native.c 27 | 28 | LOCAL_STATIC_LIBRARIES := mupdfcore mupdfthirdparty 29 | ifdef NDK_PROFILER 30 | LOCAL_CFLAGS += -pg -DNDK_PROFILER 31 | LOCAL_STATIC_LIBRARIES += andprof 32 | endif 33 | ifdef SUPPORT_GPROOF 34 | LOCAL_CFLAGS += -DSUPPORT_GPROOF 35 | endif 36 | 37 | LOCAL_LDLIBS := -lm -llog -ljnigraphics 38 | ifdef SSL_BUILD 39 | LOCAL_LDLIBS += -L$(MUPDF_ROOT)/thirdparty/openssl/android -lcrypto -lssl 40 | endif 41 | 42 | include $(BUILD_SHARED_LIBRARY) 43 | -------------------------------------------------------------------------------- /jni/Application.mk: -------------------------------------------------------------------------------- 1 | # When we build for google play, we build 4 different apk's, each with 2 | # a different version, by uncommenting one of the pairs of lines below. 3 | # Suppose our base version is X: 4 | 5 | # Version X: armeabi 6 | #APP_PLATFORM=android-8 7 | #APP_ABI := armeabi 8 | 9 | # Version X+1: armeabi-v7a (Much faster due to the availability of hardware 10 | # FP, but cannot be run in the emulator). 11 | #APP_PLATFORM=android-8 12 | #APP_ABI := armeabi-v7a 13 | 14 | # Version X+2: x86 (Requires android-9, so a change needs to be made in 15 | # AndroidManifest.xml too) 16 | APP_PLATFORM=android-9 17 | APP_ABI := armeabi-v7a x86 18 | 19 | # Version X+3: mips (Requires android-9, so a change needs to be made in 20 | # AndroidManifest.xml too) 21 | #APP_PLATFORM=android-9 22 | #APP_ABI := mips 23 | 24 | ifdef NDK_PROFILER 25 | # The profiler doesn't seem to receive ticks when run on release code. 26 | # Accordingly, we need to build as debug - but this turns optimisations 27 | # off, which is less than ideal. 28 | APP_OPTIM := debug 29 | APP_CFLAGS := -O2 30 | else 31 | ifdef DEBUG 32 | APP_OPTIM := debug 33 | APP_CFLAGS := -DDEBUG 34 | else 35 | APP_OPTIM := release 36 | endif 37 | endif 38 | ifdef V8_BUILD 39 | APP_STL := stlport_static 40 | endif 41 | ifdef MEMENTO 42 | APP_CFLAGS += -DMEMENTO -DMEMENTO_LEAKONLY 43 | endif 44 | 45 | # If the ndk is r8b then workaround bug by uncommenting the following line 46 | #NDK_TOOLCHAIN_VERSION=4.4.3 47 | 48 | # If the ndk is newer than r8c, try using clang. 49 | #NDK_TOOLCHAIN_VERSION=clang3.1 50 | -------------------------------------------------------------------------------- /jni/Core.mk: -------------------------------------------------------------------------------- 1 | LOCAL_PATH := $(call my-dir) 2 | 3 | ifdef SUPPORT_GPROOF 4 | include $(CLEAR_VARS) 5 | LOCAL_MODULE := gsso 6 | LOCAL_SRC_FILES := libgs.so 7 | include $(PREBUILT_SHARED_LIBRARY) 8 | endif 9 | 10 | include $(CLEAR_VARS) 11 | 12 | MY_ROOT := ../../.. 13 | 14 | LOCAL_CFLAGS += -Wall -Wno-maybe-uninitialized 15 | 16 | ifeq ($(TARGET_ARCH),arm) 17 | LOCAL_CFLAGS += -DARCH_ARM -DARCH_THUMB -DARCH_ARM_CAN_LOAD_UNALIGNED 18 | ifdef NDK_PROFILER 19 | LOCAL_CFLAGS += -pg -DNDK_PROFILER 20 | endif 21 | endif 22 | ifdef SUPPORT_GPROOF 23 | LOCAL_CFLAGS += -DSUPPORT_GPROOF 24 | endif 25 | LOCAL_CFLAGS += -DAA_BITS=8 26 | ifdef MEMENTO 27 | LOCAL_CFLAGS += -DMEMENTO -DMEMENTO_LEAKONLY 28 | endif 29 | ifdef SSL_BUILD 30 | LOCAL_CFLAGS += -DHAVE_OPENSSL 31 | endif 32 | 33 | LOCAL_C_INCLUDES := \ 34 | $(MY_ROOT)/thirdparty/harfbuzz/src \ 35 | $(MY_ROOT)/thirdparty/jbig2dec \ 36 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2 \ 37 | $(MY_ROOT)/thirdparty/jpeg \ 38 | $(MY_ROOT)/thirdparty/mujs \ 39 | $(MY_ROOT)/thirdparty/zlib \ 40 | $(MY_ROOT)/thirdparty/freetype/include \ 41 | $(MY_ROOT)/source/fitz \ 42 | $(MY_ROOT)/source/pdf \ 43 | $(MY_ROOT)/source/xps \ 44 | $(MY_ROOT)/source/svg \ 45 | $(MY_ROOT)/source/cbz \ 46 | $(MY_ROOT)/source/img \ 47 | $(MY_ROOT)/source/tiff \ 48 | $(MY_ROOT)/scripts/freetype \ 49 | $(MY_ROOT)/scripts/jpeg \ 50 | $(MY_ROOT)/generated \ 51 | $(MY_ROOT)/resources \ 52 | $(MY_ROOT)/include \ 53 | $(MY_ROOT) 54 | ifdef V8_BUILD 55 | LOCAL_C_INCLUDES += $(MY_ROOT)/thirdparty/$(V8)/include 56 | endif 57 | ifdef SSL_BUILD 58 | LOCAL_C_INCLUDES += $(MY_ROOT)/thirdparty/openssl/include 59 | endif 60 | 61 | LOCAL_MODULE := mupdfcore 62 | LOCAL_SRC_FILES := \ 63 | $(wildcard $(MY_ROOT)/source/fitz/*.c) \ 64 | $(wildcard $(MY_ROOT)/source/pdf/*.c) \ 65 | $(wildcard $(MY_ROOT)/source/xps/*.c) \ 66 | $(wildcard $(MY_ROOT)/source/svg/*.c) \ 67 | $(wildcard $(MY_ROOT)/source/cbz/*.c) \ 68 | $(wildcard $(MY_ROOT)/source/gprf/*.c) \ 69 | $(wildcard $(MY_ROOT)/source/html/*.c) \ 70 | $(wildcard $(MY_ROOT)/generated/*.c) 71 | 72 | ifdef SUPPORT_GPROOF 73 | LOCAL_SHARED_LIBRARIES := gsso 74 | endif 75 | LOCAL_LDLIBS := -lm -llog -ljnigraphics 76 | 77 | LOCAL_SRC_FILES := $(addprefix ../, $(LOCAL_SRC_FILES)) 78 | 79 | include $(BUILD_STATIC_LIBRARY) 80 | -------------------------------------------------------------------------------- /jni/ThirdParty.mk: -------------------------------------------------------------------------------- 1 | LOCAL_PATH := $(call my-dir) 2 | 3 | include $(CLEAR_VARS) 4 | 5 | MY_ROOT := ../../.. 6 | 7 | LOCAL_C_INCLUDES := \ 8 | $(MY_ROOT)/include/ \ 9 | $(MY_ROOT)/thirdparty/harfbuzz/src \ 10 | $(MY_ROOT)/thirdparty/jbig2dec \ 11 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2 \ 12 | $(MY_ROOT)/thirdparty/jpeg \ 13 | $(MY_ROOT)/thirdparty/mujs \ 14 | $(MY_ROOT)/thirdparty/zlib \ 15 | $(MY_ROOT)/thirdparty/freetype/include \ 16 | $(MY_ROOT)/scripts/freetype \ 17 | $(MY_ROOT)/scripts/jpeg 18 | 19 | LOCAL_CFLAGS := \ 20 | -DFT2_BUILD_LIBRARY -DDARWIN_NO_CARBON -DHAVE_STDINT_H \ 21 | -DOPJ_HAVE_STDINT_H -DOPJ_HAVE_INTTYPES_H -DUSE_JPIP \ 22 | '-DFT_CONFIG_MODULES_H="slimftmodules.h"' \ 23 | '-DFT_CONFIG_OPTIONS_H="slimftoptions.h"' \ 24 | -Dhb_malloc_impl=hb_malloc -Dhb_calloc_impl=hb_calloc \ 25 | -Dhb_realloc_impl=hb_realloc -Dhb_free_impl=hb_free \ 26 | -DHAVE_OT -DHAVE_UCDN -DHB_NO_MT 27 | ifdef NDK_PROFILER 28 | LOCAL_CFLAGS += -pg -DNDK_PROFILER -O2 29 | endif 30 | ifdef MEMENTO 31 | LOCAL_CFLAGS += -DMEMENTO -DMEMENTO_LEAKONLY 32 | endif 33 | 34 | LOCAL_CPP_EXTENSION := .cc 35 | 36 | LOCAL_MODULE := mupdfthirdparty 37 | LOCAL_SRC_FILES := \ 38 | $(MY_ROOT)/thirdparty/mujs/one.c \ 39 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-blob.cc \ 40 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-buffer.cc \ 41 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-buffer-serialize.cc \ 42 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-common.cc \ 43 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-face.cc \ 44 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-fallback-shape.cc \ 45 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-font.cc \ 46 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-ft.cc \ 47 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-ot-font.cc \ 48 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-ot-layout.cc \ 49 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-ot-map.cc \ 50 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc \ 51 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-ot-shape-complex-default.cc \ 52 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-ot-shape-complex-hangul.cc \ 53 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-ot-shape-complex-hebrew.cc \ 54 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-ot-shape-complex-indic-table.cc \ 55 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-ot-shape-complex-indic.cc \ 56 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar.cc \ 57 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-ot-shape-complex-thai.cc \ 58 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-ot-shape-complex-tibetan.cc \ 59 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-table.cc \ 60 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-ot-shape-complex-use.cc \ 61 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-ot-shape-fallback.cc \ 62 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-ot-shape-normalize.cc \ 63 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-ot-shape.cc \ 64 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-ot-tag.cc \ 65 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-set.cc \ 66 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-shape-plan.cc \ 67 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-shape.cc \ 68 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-shaper.cc \ 69 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-ucdn.cc \ 70 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-unicode.cc \ 71 | $(MY_ROOT)/thirdparty/harfbuzz/src/hb-warning.cc \ 72 | $(MY_ROOT)/thirdparty/jbig2dec/jbig2.c \ 73 | $(MY_ROOT)/thirdparty/jbig2dec/jbig2_arith.c \ 74 | $(MY_ROOT)/thirdparty/jbig2dec/jbig2_arith_iaid.c \ 75 | $(MY_ROOT)/thirdparty/jbig2dec/jbig2_arith_int.c \ 76 | $(MY_ROOT)/thirdparty/jbig2dec/jbig2_generic.c \ 77 | $(MY_ROOT)/thirdparty/jbig2dec/jbig2_halftone.c \ 78 | $(MY_ROOT)/thirdparty/jbig2dec/jbig2_huffman.c \ 79 | $(MY_ROOT)/thirdparty/jbig2dec/jbig2_image.c \ 80 | $(MY_ROOT)/thirdparty/jbig2dec/jbig2_metadata.c \ 81 | $(MY_ROOT)/thirdparty/jbig2dec/jbig2_mmr.c \ 82 | $(MY_ROOT)/thirdparty/jbig2dec/jbig2_page.c \ 83 | $(MY_ROOT)/thirdparty/jbig2dec/jbig2_refinement.c \ 84 | $(MY_ROOT)/thirdparty/jbig2dec/jbig2_segment.c \ 85 | $(MY_ROOT)/thirdparty/jbig2dec/jbig2_symbol_dict.c \ 86 | $(MY_ROOT)/thirdparty/jbig2dec/jbig2_text.c \ 87 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/bio.c \ 88 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/cidx_manager.c \ 89 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/cio.c \ 90 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/dwt.c \ 91 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/event.c \ 92 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/function_list.c \ 93 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/image.c \ 94 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/invert.c \ 95 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/j2k.c \ 96 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/jp2.c \ 97 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/mct.c \ 98 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/mqc.c \ 99 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/openjpeg.c \ 100 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/phix_manager.c \ 101 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/pi.c \ 102 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/ppix_manager.c \ 103 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/raw.c \ 104 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/t1.c \ 105 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/t2.c \ 106 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/tcd.c \ 107 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/tgt.c \ 108 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/thix_manager.c \ 109 | $(MY_ROOT)/thirdparty/openjpeg/src/lib/openjp2/tpix_manager.c \ 110 | $(MY_ROOT)/thirdparty/jpeg/jaricom.c \ 111 | $(MY_ROOT)/thirdparty/jpeg/jcomapi.c \ 112 | $(MY_ROOT)/thirdparty/jpeg/jdapimin.c \ 113 | $(MY_ROOT)/thirdparty/jpeg/jdapistd.c \ 114 | $(MY_ROOT)/thirdparty/jpeg/jdarith.c \ 115 | $(MY_ROOT)/thirdparty/jpeg/jdatadst.c \ 116 | $(MY_ROOT)/thirdparty/jpeg/jdatasrc.c \ 117 | $(MY_ROOT)/thirdparty/jpeg/jdcoefct.c \ 118 | $(MY_ROOT)/thirdparty/jpeg/jdcolor.c \ 119 | $(MY_ROOT)/thirdparty/jpeg/jddctmgr.c \ 120 | $(MY_ROOT)/thirdparty/jpeg/jdhuff.c \ 121 | $(MY_ROOT)/thirdparty/jpeg/jdinput.c \ 122 | $(MY_ROOT)/thirdparty/jpeg/jdmainct.c \ 123 | $(MY_ROOT)/thirdparty/jpeg/jdmarker.c \ 124 | $(MY_ROOT)/thirdparty/jpeg/jdmaster.c \ 125 | $(MY_ROOT)/thirdparty/jpeg/jdmerge.c \ 126 | $(MY_ROOT)/thirdparty/jpeg/jdpostct.c \ 127 | $(MY_ROOT)/thirdparty/jpeg/jdsample.c \ 128 | $(MY_ROOT)/thirdparty/jpeg/jdtrans.c \ 129 | $(MY_ROOT)/thirdparty/jpeg/jerror.c \ 130 | $(MY_ROOT)/thirdparty/jpeg/jfdctflt.c \ 131 | $(MY_ROOT)/thirdparty/jpeg/jfdctfst.c \ 132 | $(MY_ROOT)/thirdparty/jpeg/jfdctint.c \ 133 | $(MY_ROOT)/thirdparty/jpeg/jidctflt.c \ 134 | $(MY_ROOT)/thirdparty/jpeg/jidctfst.c \ 135 | $(MY_ROOT)/thirdparty/jpeg/jidctint.c \ 136 | $(MY_ROOT)/thirdparty/jpeg/jmemmgr.c \ 137 | $(MY_ROOT)/thirdparty/jpeg/jquant1.c \ 138 | $(MY_ROOT)/thirdparty/jpeg/jquant2.c \ 139 | $(MY_ROOT)/thirdparty/jpeg/jutils.c \ 140 | $(MY_ROOT)/thirdparty/zlib/adler32.c \ 141 | $(MY_ROOT)/thirdparty/zlib/compress.c \ 142 | $(MY_ROOT)/thirdparty/zlib/crc32.c \ 143 | $(MY_ROOT)/thirdparty/zlib/deflate.c \ 144 | $(MY_ROOT)/thirdparty/zlib/inffast.c \ 145 | $(MY_ROOT)/thirdparty/zlib/inflate.c \ 146 | $(MY_ROOT)/thirdparty/zlib/inftrees.c \ 147 | $(MY_ROOT)/thirdparty/zlib/trees.c \ 148 | $(MY_ROOT)/thirdparty/zlib/uncompr.c \ 149 | $(MY_ROOT)/thirdparty/zlib/zutil.c \ 150 | $(MY_ROOT)/thirdparty/freetype/src/base/ftbase.c \ 151 | $(MY_ROOT)/thirdparty/freetype/src/base/ftbbox.c \ 152 | $(MY_ROOT)/thirdparty/freetype/src/base/ftbitmap.c \ 153 | $(MY_ROOT)/thirdparty/freetype/src/base/ftfntfmt.c \ 154 | $(MY_ROOT)/thirdparty/freetype/src/base/ftgasp.c \ 155 | $(MY_ROOT)/thirdparty/freetype/src/base/ftglyph.c \ 156 | $(MY_ROOT)/thirdparty/freetype/src/base/ftinit.c \ 157 | $(MY_ROOT)/thirdparty/freetype/src/base/ftstroke.c \ 158 | $(MY_ROOT)/thirdparty/freetype/src/base/ftsynth.c \ 159 | $(MY_ROOT)/thirdparty/freetype/src/base/ftsystem.c \ 160 | $(MY_ROOT)/thirdparty/freetype/src/base/fttype1.c \ 161 | $(MY_ROOT)/thirdparty/freetype/src/cff/cff.c \ 162 | $(MY_ROOT)/thirdparty/freetype/src/cid/type1cid.c \ 163 | $(MY_ROOT)/thirdparty/freetype/src/psaux/psaux.c \ 164 | $(MY_ROOT)/thirdparty/freetype/src/pshinter/pshinter.c \ 165 | $(MY_ROOT)/thirdparty/freetype/src/psnames/psnames.c \ 166 | $(MY_ROOT)/thirdparty/freetype/src/raster/raster.c \ 167 | $(MY_ROOT)/thirdparty/freetype/src/smooth/smooth.c \ 168 | $(MY_ROOT)/thirdparty/freetype/src/sfnt/sfnt.c \ 169 | $(MY_ROOT)/thirdparty/freetype/src/truetype/truetype.c \ 170 | $(MY_ROOT)/thirdparty/freetype/src/type1/type1.c 171 | 172 | LOCAL_SRC_FILES := $(addprefix ../, $(LOCAL_SRC_FILES)) 173 | 174 | include $(BUILD_STATIC_LIBRARY) 175 | -------------------------------------------------------------------------------- /libs/android-support-v4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/libs/android-support-v4.jar -------------------------------------------------------------------------------- /libs/armeabi-v7a/libmupdf_java.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/libs/armeabi-v7a/libmupdf_java.so -------------------------------------------------------------------------------- /libs/x86/libmupdf_java.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/libs/x86/libmupdf_java.so -------------------------------------------------------------------------------- /project.properties: -------------------------------------------------------------------------------- 1 | # This file is automatically generated by Android Tools. 2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED! 3 | # 4 | # This file must be checked in Version Control Systems. 5 | # 6 | # To customize properties used by the Ant build system use, 7 | # "ant.properties", and override values to adapt the script to your 8 | # project structure. 9 | 10 | # Project target. 11 | target=android-16 12 | android.library=true 13 | -------------------------------------------------------------------------------- /res/animator/info.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 11 | 15 | 16 | 20 | 21 | -------------------------------------------------------------------------------- /res/drawable-hdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-hdpi/icon.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_annot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_annot.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_annotation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_annotation.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_arrow_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_arrow_left.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_arrow_right.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_cancel.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_check.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_clipboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_clipboard.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_dir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_dir.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_doc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_doc.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_highlight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_highlight.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_link.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_list.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_magnifying_glass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_magnifying_glass.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_more.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_pen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_pen.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_print.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_print.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_proof.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_proof.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_reflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_reflow.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_select.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_share.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_strike.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_strike.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_trash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_trash.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_underline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_underline.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_updir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/ic_updir.png -------------------------------------------------------------------------------- /res/drawable-ldpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-ldpi/icon.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_annot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_annot.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_annotation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_annotation.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_arrow_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_arrow_left.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_arrow_right.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_arrow_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_arrow_up.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_cancel.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_check.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_clipboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_clipboard.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_dir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_dir.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_doc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_doc.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_highlight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_highlight.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_link.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_list.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_magnifying_glass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_magnifying_glass.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_more.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_pen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_pen.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_print.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_print.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_proof.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_proof.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_reflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_reflow.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_select.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_sep.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_sep.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_share.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_strike.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_strike.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_trash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_trash.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_underline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/ic_underline.png -------------------------------------------------------------------------------- /res/drawable-mdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-mdpi/icon.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable-xhdpi/icon.png -------------------------------------------------------------------------------- /res/drawable/busy.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /res/drawable/button.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /res/drawable/darkdenim3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asimmon/MuPDF-for-Android/49f2489c9a30182bc5828926bfa3c6e0a652dacc/res/drawable/darkdenim3.png -------------------------------------------------------------------------------- /res/drawable/page_num.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /res/drawable/search.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /res/drawable/seek_progress.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable/seek_thumb.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /res/drawable/tiled_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /res/layout/main.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /res/layout/outline_entry.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 16 | 17 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /res/layout/picker_entry.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 13 | 14 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /res/layout/print_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /res/layout/textentry.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | -------------------------------------------------------------------------------- /res/values-ar/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | قبول 4 | MuPDF 5 | إلغاء 6 | تعذر فتح المخزن المؤقت 7 | تعذر فتح المستند 8 | تعذر فتح المستند: %1$s 9 | تعذر فتح الملف: %1$s 10 | اختر قيمة 11 | تم النسخ إلى الحافظة 12 | نسخ 13 | نسخ النص 14 | نسخ النص إلى الحافظة 15 | حذف 16 | تجاهل 17 | يحتوي المستند على تغييرات. هل تريد حفظها؟ 18 | سحب تعليق توضيحي 19 | تعديل التعليقات التوضيحية 20 | أدخل كلمة المرور 21 | دخول إلى وضع إعادة التدفق 22 | تعبئة حقل النص 23 | التنسيق غير مدعوم حاليًا 24 | تظليل 25 | حبر 26 | خروج من وضع إعادة التدفق 27 | المزيد 28 | لا 29 | لم يتم العثور على متكررات أخرى 30 | مشاركة وسائط التخزين مع حاسوب شخصي قد يمنع الوصول إليها 31 | وسائط التخزين غير موجودة 32 | لم يتم تحديد نص 33 | غير مدعوم 34 | لا يوجد شيء لحفظه 35 | موافق 36 | جدول المحتويات 37 | [أعلى مستوى واحد] 38 | %1$s %2$s: %3$s 39 | طباعة 40 | فشلت الطباعة 41 | حفظ 42 | بحث 43 | بحث إلى الخلف 44 | بحث في المستند 45 | بحث إلى الأمام 46 | جاري البحث في&#8230; 47 | تحديد 48 | تحديد النص 49 | شطب 50 | لم يتم العثور على النص 51 | تظليل وتمكين الروابط 52 | تسطير 53 | نعم 54 | 55 | -------------------------------------------------------------------------------- /res/values-ca/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Acceptar 4 | MuPDF 5 | Cancel·lar 6 | No es pot obrir el buffer 7 | No es pot obrir el document 8 | No es pot obrir el document: %1$s 9 | No es pot obrir l\'arxiu: %1$s 10 | Tria el valor 11 | Copiat al portapapers 12 | Copiar 13 | copiar text 14 | Copiar text al portapapers 15 | Esborrar 16 | Descartar 17 | El document té canvis. Desar? 18 | Dibuixar anotació 19 | Editar anotacions 20 | Introduir contrasenya 21 | Entrant en modo de reflux 22 | Emplena el camp de text 23 | Format no suportat actualment 24 | Destacar 25 | Tinta 26 | Abandonant modo de reflux 27 | Més 28 | No 29 | No hi ha més coincidències 30 | Compartir el mitjà d\'emmagatzematge amb un PC pot fer que sigui inaccessible 31 | Mitjà d\'emmagatzematge no present 32 | No s\'ha seleccionat text 33 | No compatible 34 | No hi ha gens que guardar 35 | Acceptar 36 | Índex 37 | [Pujar un nivell] 38 | %1$s %2$s: %3$s 39 | Imprimir 40 | Fallada al imprimir 41 | Desar 42 | Buscar 43 | Buscar cap a enrere 44 | Buscar document 45 | Buscar cap a davant 46 | Buscant… 47 | Seleccionar 48 | Seleccionar text 49 | Ratllat 50 | Text no trobat 51 | Ressaltar i habilitar enllaços 52 | Subratllat 53 | 54 | 55 | -------------------------------------------------------------------------------- /res/values-cs/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Přijmout 4 | MuPDF 5 | Zrušit 6 | Nelze otevřít vyrovnávací paměť 7 | Nelze otevřít dokument 8 | Nelze otevřít dokument: %1$s 9 | Nelze otevřít soubor: %1$s 10 | Zvolte hodnotu 11 | Kopírováno do schránky 12 | Kopírovat 13 | kopírovat text 14 | Kopírovat text do schránky 15 | Smazat 16 | Odmítnout 17 | Dokument byl změněn. Uložit? 18 | Vložit anotaci 19 | Upravit anotace 20 | Zadat heslo 21 | Vstup do režimu přeformátování řádků 22 | Vyplnit textové pole 23 | Formát aktuálně nepodporován 24 | Zvýraznit 25 | Inkoust 26 | Odchod z režimu přeformátování řádků 27 | Více 28 | Ne 29 | Nenalezeny další výskyty 30 | Při sdílení s PC může být paměťové médium nedostupné 31 | Paměťové médim nenalezeno 32 | Nevybrán žádný text 33 | Nepodporováno 34 | Nic k uložení 35 | OK 36 | Obsah 37 | [Nahoru o jednu úroveň] 38 | %1$s %2$s: %3$s 39 | Tisk 40 | Tisk selhal 41 | Uložit 42 | Hledat 43 | Hledat zpět 44 | Prohledat dokument 45 | Hledat vpřed 46 | Hledání&#8230; 47 | Vybrat 48 | Vybrat text 49 | Přeškrtnout 50 | Text nenalezen 51 | Zvýraznit a aktivovat odkazy 52 | Podtrhnout 53 | Ano 54 | 55 | -------------------------------------------------------------------------------- /res/values-da/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Accepter 4 | MuPDF 5 | Annuller 6 | Buffer kan ikke åbnes 7 | Dokument kan ikke åbnes 8 | Kan ikke åbne dokumentet: %1$s 9 | Kan ikke åbne filen: %1$s 10 | Vælg værdi 11 | Kopieret til udklipsholder 12 | Kopier 13 | kopier tekst 14 | kopier tekst til udklipsholder 15 | Slet 16 | Afvis 17 | Dokumentet er ændret. Gem ændringer? 18 | Lav anmærkning 19 | Rediger anmærkninger 20 | Indtast adgangskode 21 | Går over til konverteringstilstand 22 | Udfyld tekstfelt 23 | Format ikke understøttet i øjeblikket 24 | Fremhæv 25 | Ink 26 | Forlader konverteringstilstand 27 | Mere 28 | Nej 29 | Der blev ikke fundet flere tilfælde 30 | Deles lagermediet med en PC, kan det gøre det utilgængeligt 31 | Lagermedie ikke fundet 32 | Ingen tekst valgt 33 | Ikke understøttet 34 | Intet at gemme 35 | Okay 36 | Indholdsfortegnelse 37 | [Et niveau op] 38 | %1$s %2$s: %3$s 39 | Udskriv 40 | Udskrivning mislykket 41 | Gem 42 | Søg 43 | Søg bagud 44 | Søg i dokument 45 | Søg fremad 46 | Søger&#8230; 47 | Vælg 48 | Vælg tekst 49 | Gennemstreget 50 | Tekst ikke fundet 51 | Fremhæv og aktiver links 52 | Understreg 53 | Ja 54 | 55 | -------------------------------------------------------------------------------- /res/values-de/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Akzeptieren 4 | MuPDF 5 | Abbrechen 6 | Zwischenspeicher kann nicht geöffnet werden 7 | Dokument kann nicht geöffnet werden 8 | Dokument kann nicht geöffnet werden: %1$s 9 | Datei kann nicht geöffnet werden: %1$s 10 | Wert auswählen 11 | In die Zwischenanlage kopiert 12 | Kopieren 13 | Text kopieren 14 | Text in Zwischenablage kopieren 15 | Entfernen 16 | Verwerfen 17 | Das Dokument wurde verändert. Sollen die Änderungen gespeichert werden? 18 | Kommentar einfügen 19 | Kommentar bearbeiten 20 | Passwort eingeben 21 | Anpassungsmodus wird gestartet 22 | Textfeld ausfüllen 23 | Format wird momentan nicht unterstützt 24 | Markieren 25 | Farbe 26 | Anpassungsmodus wird beendet 27 | Mehr 28 | Nein 29 | Keine weiteren Treffer 30 | Die Freigabe des Speichermediums für einen PC kann es unzugänglich machen 31 | Speichermedium nicht vorhanden 32 | Kein Text ausgewählt 33 | Nicht unterstützt 34 | Nichts zum Speichern 35 | OK 36 | Inhaltsverzeichnis 37 | [Eine Ebene nach oben] 38 | %1$s %2$s: %3$s 39 | Drucken 40 | Fehler beim Drucken 41 | Speichern 42 | Suchen 43 | Rückwärts suchen 44 | Dokument durchsuchen 45 | Vorwärts suchen 46 | Suche… 47 | Auswählen 48 | Text auswählen 49 | Durchstreichen 50 | Text konnte nicht gefunden werden 51 | Markiere und aktiviere Verknüpfungen 52 | Unterstreichen 53 | Ja 54 | 55 | -------------------------------------------------------------------------------- /res/values-el/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Αποδοχή 4 | MuPDF 5 | Ακύρωση 6 | Αδυναμία ανοίγματος buffer 7 | Αδυναμία ανοίγματος εγγράφου 8 | Αδυναμία ανοίγματος εγγράφου: %1$s 9 | Αδυναμία ανοίγματος αρχείου: %1$s 10 | Επιλογή τιμής 11 | Αντιγράφηκε στο πρόχειρο 12 | Αντιγραφή 13 | αντιγραφή κειμένου 14 | Αντιγραφή κειμένου στο πρόχειρο 15 | Διαγραφή 16 | Ματαίωση 17 | Το έγγραφο έχει αλλαγές. Να αποθηκευτούν; 18 | Σχεδίαση σχολίου 19 | Επεξεργασία σχολίων 20 | Πληκτρολογήστε κωδικό πρόσβασης 21 | Είσοδος σε λειτουργία δυναμικής προσαρμογής 22 | Συμπλήρωση πεδίου κειμένου 23 | Αυτή η μορφή δεν υποστηρίζεται τη δεδομένη στιγμή 24 | Επισήμανση 25 | Γραφή 26 | Έξοδος από λειτουργία δυναμικής προσαρμογής 27 | Περισσότερο 28 | Όχι 29 | Δεν βρέθηκαν άλλες εμφανίσεις 30 | Η κοινή χρήση του αποθηκευτικού μέσου με έναν υπολογιστή μπορεί να το καταστήσει μη προσβάσιμο 31 | Δεν υπάρχει αποθηκευτικό μέσο 32 | Δεν έχει επιλεγεί κείμενο 33 | Δεν υποστηρίζεται 34 | Δεν υπάρχει περιεχόμενο για αποθήκευση 35 | ΟΚ 36 | Πίνακας περιεχομένων 37 | [Ένα επίπεδο επάνω] 38 | %1$s %2$s: %3$s 39 | Εκτύπωση 40 | Η εκτύπωση απέτυχε 41 | Αποθήκευση 42 | Αναζήτηση 43 | Αναζήτηση προς τα πίσω 44 | Αναζήτηση εγγράφου 45 | Αναζήτηση προς τα μπροστά 46 | Αναζήτηση&#8230; 47 | Επιλογή 48 | Επιλογή κειμένου 49 | Διακριτή διαγραφή 50 | Δεν βρέθηκε το κείμενο 51 | Επισήμανση και ενεργοποίηση συνδέσεων 52 | Υπογράμμιση 53 | Ναι 54 | 55 | -------------------------------------------------------------------------------- /res/values-es/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Aceptar 4 | MuPDF 5 | Cancelar 6 | No se puede abrir el búfer 7 | No se puede abrir el documento 8 | No se puede abrir el documento:%1$s 9 | No se puede abrir el archivo: %1$s 10 | Elegir valor 11 | Copiado al portapapeles 12 | Copiar 13 | copiar texto 14 | Copiar texto al portapapeles 15 | Borrar 16 | Ignorar 17 | El documento tiene cambios. ¿Guardar? 18 | Dibujar anotación 19 | Editar anotaicones 20 | Introducir contraseña 21 | Entrando en el modo de redistribución 22 | Rellenar el campo de texto 23 | Formato actualmente no soportado 24 | Resaltar 25 | Tinta 26 | Saliendo del modo de redistribución 27 | Más 28 | No 29 | No se han encontrado más casos 30 | Compartir el medio de almacenamiento con un PC puede hacerlo inaccesible 31 | Medio de almacenimiento no presente 32 | Texto no seleccionado 33 | No aceptado 34 | Nada que guardar 35 | OK 36 | Tabla de contenidos 37 | [Subir un nivel] 38 | %1$s %2$s: %3$s 39 | Imprimir 40 | No se ha imprimido 41 | Guardar 42 | Buscar 43 | Buscar hacia atrás 44 | Buscar documento 45 | Buscar hacia adelante 46 | Buscando&#8230; 47 | Seleccionar 48 | Seleccionar texto 49 | Tachar 50 | Texto no encontrado 51 | Resaltar y activar 52 | Subrayar 53 | 54 | 55 | -------------------------------------------------------------------------------- /res/values-et/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Nõustu 4 | MuPDF 5 | Tühista 6 | Ei saa avada puhvrit 7 | Ei saa avada dokumenti 8 | Ei saa avada dokumenti: %1$s 9 | Ei saa avada faili: %1$s 10 | Vali väärtus 11 | Kopeeritud lõikelauale 12 | Kopeeri 13 | kopeeri tekst 14 | Kopeeri tekst lõikelauale 15 | Kustuta 16 | Lõpeta 17 | Dokumendis on tehtud muudatusi. Kas salvestada need? 18 | Tee marginaal 19 | Redigeeri marginaale 20 | Sisesta salasõna 21 | Sisenen ümberpaigutamise režiimi 22 | Täida tekstiväli 23 | Vormingul puudub hetkel tugi 24 | Tõsta esile 25 | Tint 26 | Lahkun ümberpaigutamise režiimist 27 | Veel 28 | Ei 29 | Ei leitud rohkem juhtumeid 30 | Salvestuskandja jagamine arvutiga võib selle juurdepääsmatuks muuta 31 | Salvestuskandja puudub 32 | Teksti ei ole valitud 33 | Puudub tugi 34 | Ei ole midagi salvestada 35 | OK 36 | Sisukord 37 | [Taseme võrra üles] 38 | %1$s%2$s%3$s 39 | Prindi 40 | Printimine ebaõnnestus 41 | Salvesta 42 | Otsi 43 | Otsi tagasisuunas 44 | Otsi dokumendist 45 | Otsi edasisuunas 46 | Otsin&#8230; 47 | Vali 48 | Vali tekst 49 | Läbikriipsutus 50 | Teksti ei leitud 51 | Tõsta lingid esile ja luba need 52 | Jooni alla 53 | Jah 54 | 55 | -------------------------------------------------------------------------------- /res/values-fi/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Hyväksy 4 | MuPDF 5 | Peruuta 6 | Puskuria ei voi avata 7 | Tiedostoa ei voi avata 8 | Ei voi avata tiedostoa: %1$s 9 | Ei voi avata tiedostoa: %1$s 10 | Valitse arvo 11 | Kopioitu leikepöydälle 12 | Kopioi 13 | kopio teksti 14 | Kopioi teksti leikepöydälle 15 | Poista 16 | Hylkää 17 | Tiedostossa on muutoksia. Haluatko tallentaa muutokset? 18 | Piirrä huomautus 19 | Muokkaa huomautuksia 20 | Anna salasana 21 | Siirrytään takaisinmuuntotilaan 22 | Täytä tekstikenttä 23 | Muotoa ei tällä hetkellä tueta 24 | Korosta 25 | Muste 26 | Poistutaan takaisinmuuntotilasta 27 | Lisää 28 | Ei 29 | Muita esiintymiä ei löydy 30 | Tallennustietovälineen jakaminen tietokoneen kanssa voi estää sen käyttämisen 31 | Tallennustietoväline ei ole käytössä 32 | Ei valittua tekstiä 33 | Ei tuettu 34 | Ei mitään tallennettavaa 35 | OK 36 | Sisällys 37 | [Yksi taso ylöspäin] 38 | %1$s %2$s: %3$s 39 | Tulosta 40 | Tulostus ei onnistunut 41 | Tallenna 42 | Haku 43 | Hae taaksepäin 44 | Hae tiedostosta 45 | Hae eteenpäin 46 | Haetaan &#8230; 47 | Valitse 48 | Valitse teksti 49 | Yliviivaa 50 | Tekstiä ei löydy 51 | Korosta ja ota käyttöön linkit 52 | Alleviivaa 53 | Kyllä 54 | 55 | -------------------------------------------------------------------------------- /res/values-fr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Accepter 4 | MuPDF 5 | Annuler 6 | Impossible d\'ouvrir le buffer 7 | Impossible d\'ouvrir le document 8 | Impossible d\'ouvrir le document : %1$s 9 | Impossible d\'ouvrir le fichier : %1$s 10 | Choisir la valeur 11 | Copié dans le presse-papier 12 | Copier 13 | copier le texte 14 | Copier le texte sur le presse-papier 15 | Supprimer 16 | Ignorer 17 | Des modifications ont été effectuées au document. Les sauvegarder ? 18 | Dessiner une note 19 | Éditer une note 20 | Introduire le mot de passe 21 | Entrer en mode refusion 22 | Remplir le champ du texte 23 | Format non compatible pour l\'instant 24 | Surligner 25 | Encre 26 | Quitter le mode refusion 27 | Plus 28 | Non 29 | Aucune occurrence trouvée 30 | Sauvegarder le support de stockage avec un PC peut le rendre inaccessible 31 | Support de stockage absent 32 | Aucun texte sélectionné 33 | Non compatible 34 | Rien à sauvegarder 35 | OK 36 | Table des matières 37 | [Niveau supérieur] 38 | %1$s%2$s : %3$s 39 | Imprimer 40 | L\'impression a échoué 41 | Sauvegarder 42 | Rechercher 43 | Rechercher en arrière 44 | Rechercher document 45 | Rechercher en avant 46 | Chercher&#8230 ; 47 | Sélectionner 48 | Sélectionner le texte 49 | Rayer 50 | Texte introuvable 51 | Surligner et autoriser les liens 52 | Souligner 53 | Oui 54 | 55 | -------------------------------------------------------------------------------- /res/values-hi/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | स्वीकार करें 4 | MuPDF 5 | रद्द करें 6 | बफ़र खोल नहीं सके 7 | दस्तावेज़ खोल नहीं सके 8 | दस्तावेज़ नहीं खोल सके: %1$s 9 | फ़ाइल खोल नहीं सके: %1$s 10 | मान चुनें 11 | क्लिपबोर्ड में कॉप कर दिया गया 12 | कॉपी करें 13 | पाठ कॉपी करें 14 | पाठ को क्लिपबोर्ड में कॉपी करें 15 | हटाएँ 16 | खारिज करें 17 | दस्तावेज़ में परिवर्तन हैं। उन्हें सहेजें? 18 | एनोटेशन बनाएँ 19 | एनोटेशनों को संपादित करें 20 | पासवर्ड दर्ज करें 21 | रीफ़्लो मोड में प्रवेश कर रहे हैं 22 | पाठ फ़ील्ड को भरें 23 | इस समय इस फ़ॉर्मेट को समर्थन नहीं प्राप्त है 24 | हाइलाइट करें 25 | स्याही 26 | रीफ़्लो मोड को छोड़ रहे हैं 27 | और भी 28 | नहीं 29 | यह और कहीं नहीं मिला 30 | संग्रह माध्यम को पीसी के साथ साझा करने से उस तक पहुँचना मुश्किल हो सकता है 31 | संग्रह माध्यम मौजूद नहीं है 32 | कोई भी पाठ नहीं चुना गया है 33 | असमर्थित 34 | सहेजने के लिए कुछ नहीं है 35 | ठीक है 36 | विषय सूची 37 | [एक स्तर ऊपर] 38 | %1$s%2$s:%3$s 39 | मुद्रित करें 40 | मुद्रण विफल हुआ 41 | सहेजें 42 | खोजें 43 | पीछे की ओर खोजें 44 | दस्तावेज़ में खोजें 45 | आगे की ओर खोजें 46 | &#8230 को खोज रहे हैं; 47 | चुनें 48 | पाठ चुनें 49 | काटें 50 | पाठ नहीं मिला 51 | लिंकों को हाइलाइट और सक्षम करें 52 | रेखांकित करें 53 | हाँ 54 | 55 | -------------------------------------------------------------------------------- /res/values-hu/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Elfogadás 4 | MuPDF 5 | Mégse 6 | A puffert nem lehet megnyitni 7 | A dokumentumot nem lehet megnyitni 8 | A dokumentumot nem lehet megnyitni: %1$s 9 | A fájlt nem lehet megnyitni: %1$s 10 | Érték kiválasztása 11 | A vágólapra másolva 12 | Másolás 13 | szöveg másolása 14 | Szöveg másolása a vágólapra 15 | Törlés 16 | Bezárás 17 | A dokumentum módosítva lett. Menti a változtatásokat? 18 | Jegyzet rajzolása 19 | Jegyzetek szerkesztése 20 | Jelszó megadása 21 | Belépés az újrarendezési módba 22 | Szövegmező kitöltése 23 | A formátum jelenleg nem támogatott 24 | Kiemelés 25 | Kézírás 26 | Kilépés az újrarendezési módból 27 | Több 28 | Nem 29 | Nincsenek további találatok 30 | Az adathordozó a PC-vel való megosztás esetén elérhetetlenné válhat 31 | Nincs jelen adathordozó 32 | Nincs kijelölt szöveg 33 | Nem támogatott 34 | Nem kell semmit menteni 35 | OK 36 | Tartalomjegyzék 37 | [Egy szinttel feljebb] 38 | %1$s %2$s: %3$s 39 | Nyomtatás 40 | Nyomtatás sikertelen 41 | Mentés 42 | Keresés 43 | Keresés visszafelé 44 | Dokumentum keresése 45 | Keresés előrefelé 46 | Keresés:&#8230; 47 | Kijelölés 48 | Szöveg kijelölése 49 | Áthúzás 50 | Szöveg nem található 51 | Kiemelés és linkek engedélyezése 52 | Aláhúzás 53 | Igen 54 | 55 | -------------------------------------------------------------------------------- /res/values-in/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Terima 4 | MuPDF 5 | Batal 6 | Tidak bisa membuka penyangga 7 | Tidak bisa membuka dokumen 8 | Tidak bisa membuka dokumen: %1$s 9 | Tidak bisa membuka berkas: %1$s 10 | Pilih nilai 11 | Disalin ke papan klip 12 | Salin 13 | Salin teks 14 | Salin teks ke papan klip 15 | Hapus 16 | Hilangkan 17 | Dokumen telah berubah. Simpan perubahan? 18 | Gambar anotasi 19 | Sunting anotasi 20 | Masukkan kata sandi 21 | Masuk mode alir-ulang 22 | Isi bidang teks 23 | Format ini tidak didukung 24 | Sorotan 25 | Tinta 26 | Tinggalkan mode alir-ulang 27 | Selengkapnya 28 | Tidak 29 | Tidak ditemukan kejadian lain 30 | Berbagi media penyimpanan dengan PC dapat membuatnya tidak bisa diakses 31 | Media penyimpanan tidak ada 32 | Tidak ada teks yang dipilih 33 | Tidak didukung 34 | Tidak ada yang disimpan 35 | Oke 36 | Daftar Isi 37 | [Naik satu tingkat] 38 | %1$s %2$s: %3$s 39 | Cetak 40 | Pencetakan gagal 41 | Simpan 42 | Cari 43 | Cari mundur 44 | Cari dokumen 45 | Cari maju 46 | Mencari… 47 | Pilih 48 | Pilih teks 49 | Gagal 50 | Teks tidak ditemukan 51 | Sorot dan aktifkan tautan 52 | Garis bawah 53 | Ya 54 | 55 | -------------------------------------------------------------------------------- /res/values-it/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Accetta 4 | MuPDF 5 | Annulla 6 | Impossibile aprire buffering 7 | Impossibile aprire documento 8 | Impossibile aprire documento: %1$s 9 | Impossibile aprire file: %1$s 10 | Scegli valore 11 | Copiato negli appunti 12 | Copia 13 | copia testo 14 | Copia testo negli appunti 15 | Elimina 16 | Ignora 17 | Il documento contiene modifiche. Salvare? 18 | Disegna annotazione 19 | Modifica annotazione 20 | Inserisci password 21 | Inserimento modalità di adattamento dinamico del contenuto 22 | Riempi il campo di testo 23 | Formato attualmente non supportato 24 | Evidenzia 25 | Inchiostro 26 | Abbandono della modalità di adattamento dinamico del contenuto 27 | Altro 28 | No 29 | Nessun\'altra occorrenza trovata 30 | La condivisione del supporto di archiviazione con un PC può renderlo inaccessibile 31 | Supporto di archiviazione non presente 32 | Nessun testo selezionato 33 | Non supportato 34 | Niente da salvare 35 | Ok 36 | Sommario 37 | [Su di un livello] 38 | %1$s %2$s: %3$s 39 | Stampa 40 | Stampa non riuscita 41 | Salva 42 | Cerca 43 | Cerca indietro 44 | Cerca documento 45 | Cerca avanti 46 | Ricerca... 47 | Seleziona 48 | Seleziona testo 49 | Barrato 50 | Testo non trovato 51 | Evidenzia e abilita link 52 | Sottolinea 53 | 54 | 55 | -------------------------------------------------------------------------------- /res/values-iw/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | קבל 4 | MuPDF 5 | בטל 6 | אין אפשרות לפתוח מאגר 7 | אין אפשרות לפתוח מסמך 8 | אין אפשרות לפתוח מסמך: %1$s 9 | אין אפשרות לפתוח קובץ: %1$s 10 | בחר ערך 11 | הועתק ללוח 12 | העתק 13 | העתק טקסט 14 | העתק טקסט ללוח 15 | מחק 16 | התעלם 17 | קיימים שינויים במסמך. לשמור אותם? 18 | רשום ביאור 19 | ערוך ביאורים 20 | הזן סיסמה 21 | כניסה למצב הזרמה מחדש 22 | מלא את שדה הטקסט 23 | תבנית לא נתמכת כעת 24 | הבלטה 25 | דיו 26 | יציאה ממצב הזרמה מחדש 27 | עוד 28 | לא 29 | לא עוד 30 | שיתוף מדיית האחסון עם מחשב עשויה להפוך אותה לבלתי נגישה 31 | מדיית אחסון לא קיימת 32 | לא נבחר טקסט 33 | לא נתמך 34 | אין מה לשמור 35 | בסדר 36 | תוכן העניינים 37 | [למעלה ברמה אחת] 38 | %1$s %2$s: %3$s 39 | הדפס 40 | ההדפסה נכשלה 41 | שמור 42 | חפש 43 | חפש אחורה 44 | חפש במסמך 45 | חפש קדימה 46 | מחפש&#8230; 47 | בחר ערך 48 | בחר טקסט 49 | הדגש 50 | לא נמצא טקסט 51 | הבלט ואפשר קישורים 52 | קו תחתון 53 | כן 54 | 55 | -------------------------------------------------------------------------------- /res/values-ja/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 承諾する 4 | MuPDF 5 | キャンセル 6 | バッファーを開けません 7 | ドキュメントを開けません 8 | 次のドキュメントを開けません:%1$s 9 | 次のファイルを開けません: %1$s 10 | バリューを選択してください 11 | クリップボードにコピーされました 12 | コピー 13 | テキストをコピー 14 | テキストをクリップボードにコピー 15 | 削除 16 | 却下 17 | ドキュメントは変更されました。保存しますか? 18 | 注釈を挿入する 19 | 注釈を編集する 20 | パスワードを入力する 21 | リフローモードを開始する 22 | テキストフィールドに書き込む 23 | このフォーマットは現在サポートされていません 24 | ハイライト 25 | インク 26 | リフローモードを終了する 27 | もっと 28 | いいえ 29 | 他にオカレンスは見つかりませんでした 30 | 記憶媒体をPCとシェアするとアクセスできなくなる可能性があります 31 | 記憶媒体が見つかりません 32 | テキストが選択されていません 33 | サポートされていません 34 | 保存するものがありません 35 | 了解 36 | 目次 37 | [一つ上位のレベル] 38 | %1$s %2$s: %3$s 39 | 印刷 40 | 印刷に失敗しました 41 | 保存 42 | 検索 43 | 逆方向検索 44 | ドキュメントを検索する 45 | 順方向検索 46 | 検索中 47 | 選択 48 | テキストを選択する 49 | 取り消し線を引く 50 | テキストが見つかりません 51 | ハイライトしてリンクを有効にする 52 | 下線を引く 53 | はい 54 | 55 | -------------------------------------------------------------------------------- /res/values-ko/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 수락 4 | MuPDF 5 | 취소 6 | 버퍼 열 수 없음 7 | 문서 열 수 없음 8 | 문서 열 수 없음: %1$s 9 | 파일 열 수 없음: %1$s 10 | 값 선택 11 | 클립보드로 복사됨 12 | 복사 13 | 텍스트 복사 14 | 클립보드로 텍스트 복사 15 | 삭제 16 | 무시 17 | 문서에 변경사항이 있습니다. 저장? 18 | 주석달기 19 | 주석 편집 20 | 패스워드 입력 21 | 리플로우 모드 시작 22 | 텍스트 입력란에 기입하십시오. 23 | 현재 지원되지 않는 포맷 24 | 주요기능 25 | 잉크 26 | 리플로우 모드 해제 27 | 기타 28 | 아니오 29 | 발견된 추가 발생 없음 30 | PC와 스토리지 미디어를 공유하면 액세스할 수 없습니다. 31 | 스토리지 미디어 없음 32 | 선택된 텍스트 없음 33 | 지원 안됨 34 | 저장 대상 없음 35 | 확인 36 | 목차 37 | [레벨 한 단계 상승] 38 | %1$s %2$s: %3$s 39 | 인쇄 40 | 인쇄 실패 41 | 저장 42 | 검색 43 | 뒤로 검색 44 | 문서 검색 45 | 앞으로 검색 46 | 검색 중&#8230; 47 | 선택 48 | 텍스트 선택 49 | 삭제 50 | 발견된 텍스트 없음 51 | 하이라이트 및 링크 활성화 52 | 밑줄 53 | 54 | 55 | -------------------------------------------------------------------------------- /res/values-lt/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Priimti 4 | „MuPDF“ 5 | Atšaukti 6 | Nepavyksta atverti buferinės atmintinės 7 | Nepavyksta atverti dokumento 8 | Nepavyksta atverti dokumento: %1$s 9 | Nepavyksta atverti failo: %1$s 10 | Pasirinkti vertę 11 | Nukopijuota į iškarpinę 12 | Kopijuoti 13 | kopijuoti tekstą 14 | Kopijuoti tekstą į iškarpinę 15 | Naikinti 16 | Atmesti 17 | Dokumente yra pakeitimų. Ar juos įrašyti? 18 | Braižyti anotaciją 19 | Redaguoti anotacijas 20 | Įvesti slaptažodį 21 | Pereinama į pertvarkymo režimą 22 | Užpildyti teksto lauką 23 | Formatas šiuo metu nedera 24 | Pažymėti 25 | Rašalas 26 | Išeinama iš pertvarkymo režimo 27 | Daugiau 28 | Ne 29 | Daugiau įrašų nerasta 30 | Pabendrinus laikmeną su kompiuteriu, ji gali tapti nebepasiekiama 31 | Laikmenos nėra 32 | Neparinktas tekstas 33 | Nedera 34 | Nėra ką įrašyti 35 | Gerai 36 | Turinys 37 | [Vienu lygiu aukštyn] 38 | %1$s %2$s: %3$s 39 | Spausdinti 40 | Išspausdinti nepavyko 41 | Įrašyti 42 | Ieškoti 43 | Ieškoti atgal 44 | Ieškoti dokumente 45 | Ieškoti pirmyn 46 | Ieškoma&#8230; 47 | Pasirinkti 48 | Pasirinkti tekstą 49 | Išbraukti 50 | Teksto nerasta 51 | Pažymėti ir įjungti nuorodas 52 | Pabraukti 53 | Taip 54 | 55 | -------------------------------------------------------------------------------- /res/values-ms/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Terima 4 | MuPDF 5 | Batal 6 | Tidak boleh membuka penimbal 7 | Tidak boleh membuka dokumen 8 | Tidak boleh membuka dokumen: %1$s 9 | Tidak boleh membuka fail: %1$s 10 | Pilih nilai 11 | Disalin ke papan klip 12 | Salin 13 | salin teks 14 | Salin teks ke papan klip 15 | Padam 16 | Singkir 17 | Dokumen mempunyai perubahan. Simpankannya? 18 | Lakarkan catatan 19 | Suntingkan catatan 20 | Masukkan kata laluan 21 | Memasuki mod penyusunan semula 22 | Mengisi medan teks 23 | Format buat masa ini tidak disokong 24 | Serlahkan 25 | Dakwat 26 | Meninggalkan mod penyusunan semula 27 | Lagi 28 | Tidak 29 | Tiada kejadian lanjut ditemui 30 | Berkongsi media storan dengan PC boleh menjadikannya tidak dapat dicapai 31 | Media storan tidak wujud 32 | Tiada teks dipilih 33 | Tidak disokong 34 | Tiada apa untuk disimpan 35 | Okey 36 | Jadual Kandungan 37 | [Naik satu tahap] 38 | %1$s %2$s: %3$s 39 | Cetak 40 | Gagal dicetak 41 | Simpan 42 | Carian 43 | Carian ke belakang 44 | Carian dokumen 45 | Carian ke depan 46 | Mencari&#8230; 47 | Pilih 48 | Pilih teks 49 | Mansuhkan 50 | Teks tidak ditemui 51 | Serlahkan dan dayakan pautan 52 | Gariskan 53 | Ya 54 | 55 | -------------------------------------------------------------------------------- /res/values-nl/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Accepteren 4 | MuPDF 5 | Annuleren 6 | Buffer kan niet geopend worden 7 | Document kan niet geopend worden 8 | Document kan niet geopend worden: %1$s 9 | Bestand kan niet geopend worden : %1$s 10 | Kies waarde 11 | Gekopieerd naar klembord 12 | Kopiëren 13 | tekst kopiëren 14 | Tekst kopiëren naar klembord 15 | Verwijderen 16 | Afwijzen 17 | Het document is gewijzigd. Opslaan? 18 | Opmerking tekenen 19 | Opmerkingen bewerken 20 | Voer wachtwoord in 21 | Conversiemodus wordt geopend 22 | Vul het tekstveld in 23 | Formaat wordt momenteel niet ondersteund 24 | Markeren 25 | Inkten 26 | Conversiemodus wordt beëindigd 27 | Meer 28 | Nee 29 | Geen andere resultaten gevonden 30 | Het opslagmedium kan ontoegankelijk worden als het met een pc wordt gedeeld 31 | Geen opslagmedium aanwezig 32 | Geen tekst geselecteerd 33 | Niet ondersteund 34 | Niets om op te slaan 35 | Oké 36 | Inhoudsopgave 37 | [Een niveau hoger] 38 | %1$s %2$s: %3$s 39 | Afdrukken 40 | Afdrukken mislukt 41 | Opslaan 42 | Zoeken 43 | Achterstevoren zoeken 44 | Document doorzoeken 45 | Vooruit zoeken 46 | Aan het zoeken … 47 | Selecteren 48 | Tekst selecteren 49 | Doorhalen 50 | Tekst niet gevonden 51 | Markeren en koppelingen inschakelen 52 | Onderstrepen 53 | Ja 54 | 55 | -------------------------------------------------------------------------------- /res/values-no/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Aksepter 4 | MuPDF 5 | Avbryt 6 | Kan ikke åpne buffer 7 | Kan ikke åpne dukumentet 8 | Kan ikke åpne dokumentet: %1$s 9 | Kan ikke åpne filen: %1$s 10 | Velg verdi 11 | Kopiert til utklippstavlen 12 | Kopier 13 | kopier tekst 14 | Kopier teksten til utklippstavlen 15 | Slett 16 | Avvis 17 | Det er endringer i dokumentet. Lagre dem? 18 | Lag merknad 19 | Rediger merknader 20 | Skriv inn passord 21 | Bytter til konverteringsmodus 22 | Fyll ut tekstfeltet 23 | Formatet er ikke støttet for øyeblikket 24 | Uthev 25 | Håndskrift 26 | Går ut av konverteringsmodus 27 | Mer 28 | Nei 29 | Ingen flere hendelser funnet 30 | Deling av lagringsmedia med en PC kan gjøre det utilgjengelig 31 | Lagringsmedia ikke til stede 32 | Ingen tekst er valgt 33 | Ikke støttet 34 | Ingenting å lagre 35 | Ok 36 | Innholdsfortegnelse 37 | [OPP ett nivå] 38 | %1$s%2$s%3$s 39 | Skriv ut 40 | Kunne ikke skrive ut 41 | Lagre 42 | Søk 43 | Søk bakover 44 | Søk i dokument 45 | Søk framover 46 | Søker&#8230; 47 | Velg 48 | Valgt tekst 49 | Gjennomstreking 50 | Teksten ble ikke funnet 51 | Uthev og aktiver koblinger 52 | Understrek 53 | Ja 54 | 55 | -------------------------------------------------------------------------------- /res/values-pl/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Zaakceptuj 4 | MuPDF 5 | Anuluj 6 | Nie można otworzyć bufora 7 | Nie można otworzyć dokumentu 8 | Nie można otworzyć dokumentu: %1$s 9 | Nie można otworzyć pliku: %1$s 10 | Wybierz wartość 11 | Skopiowano do schowka 12 | Kopiuj 13 | kopiuj tekst 14 | Kopiuj tekst do schowka 15 | Usuń 16 | Odrzuć 17 | W dokumencie dokonano zmian. Czy chcesz je zapisać? 18 | Sporządź notatkę 19 | Edytuj notatki 20 | Wprowadź hasło 21 | Włączanie trybu zawijania tekstu 22 | Wypełnij pole tekstowe 23 | Format obecnie nieobsługiwany 24 | Podświetl 25 | Atrament 26 | Wyłączanie trybu zawijania tekstu 27 | Więcej 28 | Nie 29 | Nie znaleziono więcej wystąpień 30 | Współdzielenie nośnika danych z komputerem PC może sprawić, że będzie niedostępny 31 | Nośnik danych niedostępny 32 | Nie wybrano tekstu 33 | Nieobsługiwany 34 | Nie ma nic do zapisania 35 | OK 36 | Spis treści 37 | [W górę o jeden poziom] 38 | %1$s %2$s: %3$s 39 | Drukuj 40 | Drukowanie nieudane 41 | Zapisz 42 | Szukaj 43 | Szukaj z tyłu 44 | Szukaj w dokumencie 45 | Szukaj z przodu 46 | Wyszukiwanie&#8230; 47 | Wybierz 48 | Wybierz tekst 49 | Przekreślenie 50 | Nie znaleziono tekstu 51 | Podświetl i aktywuj linki 52 | Podkreślenie 53 | Tak 54 | 55 | -------------------------------------------------------------------------------- /res/values-pt/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Aceitar 4 | MuPDF 5 | Cancelar 6 | Não é possível abrir a memória intermédia 7 | Não é possível abrir o documento 8 | Não é possível abrir o documento: %1$s 9 | Não é possível abrir o ficheiro: %1$s 10 | Escolha um valor 11 | Copiado para a área de transferência 12 | Copiar 13 | copiar o texto 14 | Copiar o texto para a área de transferência 15 | Eliminar 16 | Desistir 17 | Há alterações ao documento. Deseja guardá-las? 18 | Adicionar anotação 19 | Editar anotações 20 | Escrever a palavra-passe 21 | A entrar no modo de refluxo 22 | Preencher o campo de texto 23 | Esse formato não é atualmente suportado 24 | Destacar 25 | Tinta 26 | A sair do modo de refluxo 27 | Mais 28 | Não 29 | Não foram encontradas mais ocorrências 30 | Partilhar o dispositivo de armazenamento com um PC poderá torná-lo inacessível 31 | O dispositivo de armazenamento não está presente 32 | Não há texto selecionado 33 | Não suportado 34 | Não há nada para guardar 35 | Okay 36 | Índice 37 | [subir um nível] 38 | %1$s%2$s: %3$s 39 | Imprimir 40 | Falha na Impressão 41 | Guardar 42 | Pesquisar 43 | Pesquisar para trás 44 | Pesquisar no documento 45 | Pesquisar para a frente 46 | A pesquisar&#8230; 47 | Selecionar 48 | Selecionar o texto 49 | Rasurado 50 | Texto não encontrado 51 | Destacar e permitir links 52 | Sublinhado 53 | Sim 54 | 55 | -------------------------------------------------------------------------------- /res/values-ru/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Принять 4 | MuPDF 5 | Отмена 6 | Невозможно открыть буфер 7 | Невозможно открыть документ 8 | Невозможно открыть документ: %1$s 9 | Невозможно открыть файл: %1$s 10 | Выберите значение 11 | Скопировано в буфер 12 | Копировать 13 | копировать текст 14 | Копировать текст в буфер 15 | Удалить 16 | Пропустить 17 | Документ был изменен. Сохранить изменения? 18 | Создать аннтоацию 19 | Редактировать аннотации 20 | Введите пароль 21 | Переход в режим Reflow 22 | Заполните текстовое поле 23 | Формат не поддерживается 24 | Выделить 25 | Чернила 26 | Выход из режима Reflow 27 | Еще 28 | Нет 29 | Других ошибок не зафиксировано 30 | Подключение компьютеров к хранилищу данных может привести к потере доступа к хранилищу 31 | Хранилище данных отсутствует 32 | Текст не выбран 33 | Не поддерживается 34 | Не выбраны файлы для сохранения 35 | ОК 36 | Содержание 37 | [Вверх на один уровень] 38 | %1$s %2$s: %3$s 39 | Печать 40 | Печать не выполнена 41 | Сохранить 42 | Поиск 43 | Искать в предыдущей части документа 44 | Искать в документе 45 | Искать в остальной части документа 46 | Поиск&#8230; 47 | Выбор 48 | Выбрать текст 49 | Зачеркнуть 50 | Текст не найден 51 | Выделить и включить ссылки 52 | Подчеркнуть 53 | Да 54 | 55 | -------------------------------------------------------------------------------- /res/values-sk/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Prijať 4 | MuPDF 5 | Zrušiť 6 | Buffer sa nedá otvoriť 7 | Dokument sa nedá otvoriť 8 | Nedá sa otvoriť dokument: %1$s 9 | Nedá sa otvoriť súbor: %1$s 10 | Vyberte si hodnotu 11 | Skopírované do vyrovnávacej pamäti 12 | Kopírovať 13 | kopírovať text 14 | Kopírovať text do vyrovnávacej pamäti 15 | Zmazať 16 | Zrušiť 17 | Dokument bol zmený. Uložiť zmeny? 18 | Zostaviť anotáciu 19 | Upraviť anotácie 20 | Zadať heslo 21 | Vstupujem do režimu opätovného nalievania 22 | Vyplniť textové pole 23 | Tento formát momentálne nepodporujem 24 | Zvýrazniť 25 | Atrament 26 | Vystupujem z režimu opätovného nalievania 27 | Viac 28 | Nie 29 | Viac príkladov sa nenašlo 30 | Zdieľanie úložného média s PC môže znemožniť prístup 31 | Nie je tu úložné médium 32 | Žiadny text nie je vybraný 33 | Nepodporované 34 | Niet čo uložiť 35 | Dobre 36 | Obsah 37 | [O úroveň vyššie] 38 | %1$s %2$s: %3$s 39 | Tlačiť 40 | Tlačenie zlyhalo 41 | Uložiť 42 | Hľadať 43 | Hľadať spätne 44 | Hľadať v dokumente 45 | Hľadať dopredu 46 | Hľadám&#8230; 47 | Vybrať 48 | Vybrať text 49 | Preškrtnúť 50 | Text sa nenašiel 51 | Zvýrazniť a zapnúť linky 52 | Podčiarknúť 53 | Áno 54 | 55 | -------------------------------------------------------------------------------- /res/values-sv/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Acceptera 4 | MuPDF 5 | Avbryt 6 | Kan inte öppna buffer 7 | Kan inte öppna dokument 8 | Kan inte öppna dokument: %1$s 9 | Kan inte öppna fil: %1$s 10 | Välj värde 11 | Kopierat till klippbordet 12 | Kopiera 13 | kopiera text 14 | Kopiera text till klippbordet 15 | Ta bort 16 | Avfärda 17 | Dokumentet har ändrats. Spara ändringar? 18 | Rita annotation 19 | Ändra annotation 20 | Fyll i lösenord 21 | Aktiverar reflow-läge 22 | Fyll i textfält 23 | Formatat stöds inte för närvarande 24 | Markera 25 | Bläck 26 | Lämnar reflow-läge 27 | Mer 28 | Nej 29 | Inga flera förekomster hittades 30 | Att dela lagringsmediet med en PC kan göra den oåtkomlig 31 | Lagringsmedia finns inte 32 | Ingen text har valts 33 | Stöds ej 34 | Inget att spara 35 | OK 36 | Innehållsförteckning 37 | [Upp en nivå] 38 | %1$s %2$s: %3$s 39 | Skriv ut 40 | Utskrift misslyckades 41 | Spara 42 | Sök 43 | Sök bakåt 44 | Sök dokument 45 | Sök framåt 46 | Letar&#8230; 47 | Välj 48 | Välj text 49 | Stryk 50 | Text hittades ej 51 | Markera och aktivera länkar 52 | Understryk 53 | Ja 54 | 55 | -------------------------------------------------------------------------------- /res/values-th/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | ยอมรับ 4 | MuPDF 5 | ยกเลิก 6 | ไม่สามารถเปิดบัฟเฟอร์ 7 | ไม่สามารถเปิดเอกสาร 8 | ไม่สามารถเปิดเอกสาร: %1$s 9 | ไม่สามารถเปิดไฟล์: %1$s 10 | เลือกค่า 11 | คัดลอกไปที่คลิปบอร์ดแล้ว 12 | คัดลอก 13 | คัดลอกข้อความ 14 | คัดลอกข้อความไปที่คลิปบอร์ด 15 | ลบ 16 | เลิกใช้ 17 | เอกสารมีการเปลี่ยนแปลง ต้องการบันทึกหรือไม่ 18 | เขียนคำอธิบายประกอบ 19 | แก้ไขคำอธิบายประกอบ 20 | ป้อนรหัสผ่าน 21 | เข้าสู่โหมดเรียงหน้ากระดาษใหม่ 22 | เติมในช่องข้อความ 23 | ไม่รองรับรูปแบบในขณะนี้ 24 | ไฮไลท์ 25 | หมึก 26 | ออกจากโหมดเรียงหน้ากระดาษใหม่ 27 | เพิ่มเติม 28 | ไม่ 29 | ไม่พบเหตุการณ์ที่เกิดขึ้นเพิ่มเติม 30 | การแบ่งปันสื่อจัดเก็บข้อมูลกับพีซีสามารถทำให้สื่อจัดเก็บข้อมูลไม่สามารถเข้าถึงได้ 31 | สื่อเก็บข้อมูลไม่ปรากฏ 32 | ไม่มีข้อความที่เลือก 33 | ไม่รองรับ 34 | ไม่มีอะไรให้บันทึก 35 | ตกลง 36 | สารบัญ 37 | [ขึ้นหนึ่งระดับ] 38 | %1$s %2$s: %3$s 39 | พิมพ์ 40 | พิมพ์ล้มเหลว 41 | บันทึก 42 | ค้นหา 43 | ค้นหาย้อนกลับ 44 | ค้นหาเอกสาร 45 | ค้นหาไปข้างหน้า 46 | กำลังค้นหา&#8230; 47 | เลือก 48 | เลือกข้อความ 49 | ขีดทับ 50 | ไม่พบข้อความ 51 | ไฮไลท์และเปิดใช้งานลิงก์ 52 | ขีดเส้นใต้ 53 | ใช่ 54 | 55 | -------------------------------------------------------------------------------- /res/values-tl/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Tanggapin 4 | MuPDF 5 | Kanselahin 6 | Hindi mabuksan ang buffer 7 | Hindi mabuksan ang dokumento 8 | Hindi mabuksan ang dokumentong: %1$s 9 | Hindi mabuksan ang file na: %1$s 10 | Pumili ng halaga 11 | Kinopya sa clipboard 12 | Kopyahin 13 | kopyahin ang teksto 14 | Kopyahin ang teksto sa clipboard 15 | Alisin 16 | Umalis 17 | May mga pagbabago sa dokumento. I-save ang mga ito? 18 | Gumuhit ng anotasyon 19 | I-edit ang mga anotasyon 20 | Ilagay ang password 21 | Pumapasok sa reflow mode 22 | Punan ang puwang para sa teksto 23 | Ang format ay kasalukuyang hindi gumagana dito 24 | I-highlight 25 | Lagdaan (Ink) 26 | Umaalis sa reflow mode 27 | Higit pa 28 | Hindi 29 | Walang nahanap na karagdagang paglitaw 30 | Ang pagbabahagi ng storage media sa isang PC ay gagawin itong hindi magagamit 31 | Walang storage media 32 | Walang piniling teksto 33 | Hindi gumagana dito 34 | Walang ise-save 35 | Okay 36 | Talaan ng Nilalaman 37 | [Umakyat ng isang antas] 38 | %1$s %2$s: %3$s 39 | I-print 40 | Hindi nai-print 41 | I-save 42 | Maghanap 43 | Maghanap pabalik 44 | Maghanap sa dokumento 45 | Maghanap nang pasulong 46 | Hinahanap ang&#8230; 47 | Piliin 48 | Piliin ang teksto 49 | Guhitan ang teksto (strike-out) 50 | Hindi nahanap ang teksto 51 | I-highlight at paganahin ang mga link 52 | Guhitan 53 | Oo 54 | 55 | -------------------------------------------------------------------------------- /res/values-tr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Kabul et 4 | MuPDF 5 | İptal et 6 | Arabellek açılamıyor 7 | Belge açılamıyor 8 | Belge açılamıyor: %1$s 9 | Dosya açılamıyor: %1$s 10 | Değeri seç 11 | Panoya kopyalandı 12 | Kopyala 13 | metni kopyala 14 | Metni panoya kopyala 15 | Sil 16 | Bırak 17 | Belgede değişiklikler var. Kaydetmek istiyor musunuz? 18 | Ek açıklama çiz 19 | Ek açıklamalar düzenle 20 | Şifreyi gir 21 | Yeniden akma moduna giriyor 22 | Metin alanını doldurun 23 | Bu format şu an için desteklenmiyor 24 | Vurgula 25 | Mürekkep 26 | Yeniden akma modundan çıkılıyor 27 | Daha fazla 28 | Hayır 29 | Daha fazla öğe bulunamadı 30 | Depolama ortamının bilgisayar ile paylaşımı onu erişilmez yapabilir 31 | Depolama ortamı bulunmuyor 32 | Seçili metin bulunmuyor 33 | Desteklenmiyor 34 | Kaydedecek bir şey yok 35 | Tamam 36 | İçindekiler Tablosu 37 | [Bir seviye üste çık] 38 | %1$s %2$s: %3$s 39 | Yazdır 40 | Yazdırma başarısız oldu 41 | Kaydet 42 | Ara 43 | Geriye doğru ara 44 | Belge ara 45 | İleriye doğru ara 46 | Aranıyor&#8230; 47 | Seç 48 | Metin seç 49 | Üstünü çiz 50 | Metin bulunamadı 51 | Bağlantıları vurgula ve etkinleştir 52 | Altını çiz 53 | Evet 54 | 55 | -------------------------------------------------------------------------------- /res/values-zh-rTW/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 同意 4 | MuPDF 5 | 取消 6 | 未能開啟緩衝 7 | 未能開啟文件 8 | 未能開啟文件: %1$s 9 | 未能開啟檔案%1$s 10 | 選擇數值 11 | 複製至剪貼簿 12 | 複製 13 | 複製文字 14 | 複製文字至剪貼簿 15 | 刪除 16 | 取消 17 | 你需要儲存已編輯的文件嗎? 18 | 繪畫註釋 19 | 編輯註釋 20 | 輸入密碼 21 | 根據螢幕大小顯示 22 | 填寫文字欄 23 | 暫時不支援此格式 24 | 標示重點 25 | 墨水 26 | 不根據螢幕大小顯示 27 | 更多 28 | 沒有 29 | 沒有相符項目 30 | 未能與電腦分享存放裝置 31 | 沒有存放裝置 32 | 沒有選擇文字 33 | 不支援 34 | 沒有資料儲存 35 | 完成 36 | 目錄 37 | [升一級] 38 | %1$s%2$s%3$s 39 | 列印 40 | 列印失敗 41 | 儲存 42 | 搜尋 43 | 往後搜尋 44 | 搜尋文件 45 | 往前搜尋 46 | 搜尋中&#8230; 47 | 選擇 48 | 選擇文字 49 | 刪除線 50 | 未能找到文字 51 | 標示及允許連結 52 | 在下面劃線 53 | 54 | 55 | -------------------------------------------------------------------------------- /res/values-zh/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 接受 4 | MuPDF 5 | 取消 6 | 无法打开缓冲器 7 | 无法打开文档 8 | 无法打开文档: %1$s 9 | 无法打开文件:%1$s 10 | 选择值 11 | 已复制到剪贴板 12 | 复制 13 | 复制文本 14 | 将文本复制到剪贴板 15 | 删除 16 | 解除 17 | 文档已变更,保存变更吗? 18 | 作批注 19 | 编辑批注 20 | 输入密码 21 | 输入重排模式 22 | 填充文本字段 23 | 当前不支持此格式 24 | 高亮 25 | 墨迹 26 | 正在离开重排模式 27 | 更多 28 | 29 | 未发现更多实例。 30 | 存储介质在设备和 PC 上共同使用,会导致该存储介质在设备上无法被访问 31 | 没有存储介质 32 | 未选择文本 33 | 不被支持 34 | 没有要保存的内容 35 | 确定 36 | 目录 37 | [向上一级] 38 | %1$s%2$s:%3$s 39 | 打印 40 | 未能打印 41 | 保存 42 | 搜索 43 | 向后搜索 44 | 搜索文档 45 | 向前搜索 46 | 正在搜索… 47 | 选择 48 | 选择文本 49 | 删除线 50 | 未发现文本 51 | 高亮并启用墨迹 52 | 下划线 53 | 54 | 55 | -------------------------------------------------------------------------------- /res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #404040 4 | #C0000000 5 | #C0202020 6 | #C0202020 7 | #00000000 8 | #FF2572AC 9 | #FFFFFF 10 | #FFFFFF 11 | #000000 12 | #2572AC 13 | #000000 14 | #2572AC 15 | #FFFFFF 16 | 17 | -------------------------------------------------------------------------------- /res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | MuPDF 4 | 1.9a (git build) 5 | Storage media not present 6 | Sharing the storage media with a PC can make it inaccessible 7 | Cancel 8 | Search backwards 9 | Search forwards 10 | Search document 11 | %1$s %2$s: %3$s 12 | Table of Contents 13 | Enter password 14 | Text not found 15 | Searching… 16 | Highlight and enable links 17 | No further occurrences found 18 | Select 19 | Search 20 | Copy 21 | Strike-out 22 | Delete 23 | Highlight 24 | Underline 25 | Edit annotations 26 | Ink 27 | Save 28 | Proof 29 | Separation 30 | Print 31 | Dismiss 32 | [Up one level] 33 | Yes 34 | No 35 | Entering reflow mode 36 | Leaving reflow mode 37 | Print failed 38 | Select text 39 | Copied to clipboard 40 | No text selected 41 | Draw annotation 42 | Nothing to save 43 | Document has changes. Save them? 44 | Cannot open document 45 | Cannot open document: %1$s 46 | Cannot open file: %1$s 47 | Cannot open buffer 48 | Fill out text field 49 | Okay 50 | Choose value 51 | Not supported 52 | Copy text to the clipboard 53 | More 54 | Accept 55 | copy text 56 | Format currently not supported 57 | Toggle reflow mode 58 | 59 | -------------------------------------------------------------------------------- /res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/Annotation.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | import android.graphics.RectF; 4 | 5 | public class Annotation extends RectF { 6 | enum Type { 7 | TEXT, LINK, FREETEXT, LINE, SQUARE, CIRCLE, POLYGON, POLYLINE, HIGHLIGHT, 8 | UNDERLINE, SQUIGGLY, STRIKEOUT, STAMP, CARET, INK, POPUP, FILEATTACHMENT, 9 | SOUND, MOVIE, WIDGET, SCREEN, PRINTERMARK, TRAPNET, WATERMARK, A3D, UNKNOWN 10 | } 11 | 12 | public final Type type; 13 | 14 | public Annotation(float x0, float y0, float x1, float y1, int _type) { 15 | super(x0, y0, x1, y1); 16 | type = _type == -1 ? Type.UNKNOWN : Type.values()[_type]; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/CancellableAsyncTask.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | import java.util.concurrent.CancellationException; 4 | import java.util.concurrent.ExecutionException; 5 | 6 | // Ideally this would be a subclass of AsyncTask, however the cancel() method is final, and cannot 7 | // be overridden. I felt that having two different, but similar cancel methods was a bad idea. 8 | public class CancellableAsyncTask 9 | { 10 | private final AsyncTask asyncTask; 11 | private final CancellableTaskDefinition ourTask; 12 | 13 | public void onPreExecute() 14 | { 15 | 16 | } 17 | 18 | public void onPostExecute(Result result) 19 | { 20 | 21 | } 22 | 23 | public CancellableAsyncTask(final CancellableTaskDefinition task) 24 | { 25 | if (task == null) 26 | throw new IllegalArgumentException(); 27 | 28 | this.ourTask = task; 29 | asyncTask = new AsyncTask() 30 | { 31 | @Override 32 | protected Result doInBackground(Params... params) 33 | { 34 | return task.doInBackground(params); 35 | } 36 | 37 | @Override 38 | protected void onPreExecute() 39 | { 40 | CancellableAsyncTask.this.onPreExecute(); 41 | } 42 | 43 | @Override 44 | protected void onPostExecute(Result result) 45 | { 46 | CancellableAsyncTask.this.onPostExecute(result); 47 | task.doCleanup(); 48 | } 49 | }; 50 | } 51 | 52 | public void cancelAndWait() 53 | { 54 | this.asyncTask.cancel(true); 55 | ourTask.doCancel(); 56 | 57 | try 58 | { 59 | this.asyncTask.get(); 60 | } 61 | catch (InterruptedException e) 62 | { 63 | } 64 | catch (ExecutionException e) 65 | { 66 | } 67 | catch (CancellationException e) 68 | { 69 | } 70 | 71 | ourTask.doCleanup(); 72 | } 73 | 74 | public void execute(Params ... params) 75 | { 76 | asyncTask.execute(params); 77 | } 78 | 79 | } 80 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/CancellableTaskDefinition.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | public interface CancellableTaskDefinition 4 | { 5 | public Result doInBackground(Params ... params); 6 | public void doCancel(); 7 | public void doCleanup(); 8 | } 9 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/ChoosePDFActivity.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | import java.io.File; 4 | import java.io.FileFilter; 5 | import java.util.Arrays; 6 | import java.util.Comparator; 7 | import java.util.HashMap; 8 | import java.util.Map; 9 | 10 | import android.app.AlertDialog; 11 | import android.app.ListActivity; 12 | import android.content.DialogInterface; 13 | import android.content.DialogInterface.OnClickListener; 14 | import android.content.Intent; 15 | import android.content.res.Resources; 16 | import android.net.Uri; 17 | import android.os.Bundle; 18 | import android.os.Environment; 19 | import android.os.FileObserver; 20 | import android.os.Handler; 21 | import android.view.View; 22 | import android.widget.ListView; 23 | 24 | enum Purpose { 25 | PickPDF, 26 | PickKeyFile 27 | } 28 | 29 | public class ChoosePDFActivity extends ListActivity { 30 | static public final String PICK_KEY_FILE = "com.artifex.mupdfdemo.PICK_KEY_FILE"; 31 | static private File mDirectory; 32 | static private Map mPositions = new HashMap(); 33 | private File mParent; 34 | private File [] mDirs; 35 | private File [] mFiles; 36 | private Handler mHandler; 37 | private Runnable mUpdateFiles; 38 | private ChoosePDFAdapter adapter; 39 | private Purpose mPurpose; 40 | 41 | @Override 42 | protected void onCreate(Bundle savedInstanceState) { 43 | super.onCreate(savedInstanceState); 44 | 45 | mPurpose = PICK_KEY_FILE.equals(getIntent().getAction()) ? Purpose.PickKeyFile : Purpose.PickPDF; 46 | 47 | String storageState = Environment.getExternalStorageState(); 48 | 49 | if (!Environment.MEDIA_MOUNTED.equals(storageState) 50 | && !Environment.MEDIA_MOUNTED_READ_ONLY.equals(storageState)) 51 | { 52 | AlertDialog.Builder builder = new AlertDialog.Builder(this); 53 | builder.setTitle(R.string.mupdflib_no_media_warning); 54 | builder.setMessage(R.string.mupdflib_no_media_hint); 55 | AlertDialog alert = builder.create(); 56 | alert.setButton(AlertDialog.BUTTON_POSITIVE,getString(R.string.mupdflib_dismiss), 57 | new OnClickListener() { 58 | public void onClick(DialogInterface dialog, int which) { 59 | finish(); 60 | } 61 | }); 62 | alert.show(); 63 | return; 64 | } 65 | 66 | if (mDirectory == null) 67 | mDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); 68 | 69 | // Create a list adapter... 70 | adapter = new ChoosePDFAdapter(getLayoutInflater()); 71 | setListAdapter(adapter); 72 | 73 | // ...that is updated dynamically when files are scanned 74 | mHandler = new Handler(); 75 | mUpdateFiles = new Runnable() { 76 | public void run() { 77 | Resources res = getResources(); 78 | String appName = res.getString(R.string.mupdflib_app_name); 79 | String version = res.getString(R.string.mupdflib_version); 80 | String title = res.getString(R.string.mupdflib_picker_title_App_Ver_Dir); 81 | setTitle(String.format(title, appName, version, mDirectory)); 82 | 83 | mParent = mDirectory.getParentFile(); 84 | 85 | mDirs = mDirectory.listFiles(new FileFilter() { 86 | 87 | public boolean accept(File file) { 88 | return file.isDirectory(); 89 | } 90 | }); 91 | if (mDirs == null) 92 | mDirs = new File[0]; 93 | 94 | mFiles = mDirectory.listFiles(new FileFilter() { 95 | 96 | public boolean accept(File file) { 97 | if (file.isDirectory()) 98 | return false; 99 | String fname = file.getName().toLowerCase(); 100 | switch (mPurpose) { 101 | case PickPDF: 102 | if (fname.endsWith(".pdf")) 103 | return true; 104 | if (fname.endsWith(".xps")) 105 | return true; 106 | if (fname.endsWith(".cbz")) 107 | return true; 108 | if (fname.endsWith(".epub")) 109 | return true; 110 | if (fname.endsWith(".png")) 111 | return true; 112 | if (fname.endsWith(".jpe")) 113 | return true; 114 | if (fname.endsWith(".jpeg")) 115 | return true; 116 | if (fname.endsWith(".jpg")) 117 | return true; 118 | if (fname.endsWith(".jfif")) 119 | return true; 120 | if (fname.endsWith(".jfif-tbnl")) 121 | return true; 122 | if (fname.endsWith(".tif")) 123 | return true; 124 | if (fname.endsWith(".tiff")) 125 | return true; 126 | return false; 127 | case PickKeyFile: 128 | if (fname.endsWith(".pfx")) 129 | return true; 130 | return false; 131 | default: 132 | return false; 133 | } 134 | } 135 | }); 136 | if (mFiles == null) 137 | mFiles = new File[0]; 138 | 139 | Arrays.sort(mFiles, new Comparator() { 140 | public int compare(File arg0, File arg1) { 141 | return arg0.getName().compareToIgnoreCase(arg1.getName()); 142 | } 143 | }); 144 | 145 | Arrays.sort(mDirs, new Comparator() { 146 | public int compare(File arg0, File arg1) { 147 | return arg0.getName().compareToIgnoreCase(arg1.getName()); 148 | } 149 | }); 150 | 151 | adapter.clear(); 152 | if (mParent != null) 153 | adapter.add(new ChoosePDFItem(ChoosePDFItem.Type.PARENT, getString(R.string.mupdflib_parent_directory))); 154 | for (File f : mDirs) 155 | adapter.add(new ChoosePDFItem(ChoosePDFItem.Type.DIR, f.getName())); 156 | for (File f : mFiles) 157 | adapter.add(new ChoosePDFItem(ChoosePDFItem.Type.DOC, f.getName())); 158 | 159 | lastPosition(); 160 | } 161 | }; 162 | 163 | // Start initial file scan... 164 | mHandler.post(mUpdateFiles); 165 | 166 | // ...and observe the directory and scan files upon changes. 167 | FileObserver observer = new FileObserver(mDirectory.getPath(), FileObserver.CREATE | FileObserver.DELETE) { 168 | public void onEvent(int event, String path) { 169 | mHandler.post(mUpdateFiles); 170 | } 171 | }; 172 | observer.startWatching(); 173 | } 174 | 175 | private void lastPosition() { 176 | String p = mDirectory.getAbsolutePath(); 177 | if (mPositions.containsKey(p)) 178 | getListView().setSelection(mPositions.get(p)); 179 | } 180 | 181 | @Override 182 | protected void onListItemClick(ListView l, View v, int position, long id) { 183 | super.onListItemClick(l, v, position, id); 184 | 185 | mPositions.put(mDirectory.getAbsolutePath(), getListView().getFirstVisiblePosition()); 186 | 187 | if (position < (mParent == null ? 0 : 1)) { 188 | mDirectory = mParent; 189 | mHandler.post(mUpdateFiles); 190 | return; 191 | } 192 | 193 | position -= (mParent == null ? 0 : 1); 194 | 195 | if (position < mDirs.length) { 196 | mDirectory = mDirs[position]; 197 | mHandler.post(mUpdateFiles); 198 | return; 199 | } 200 | 201 | position -= mDirs.length; 202 | 203 | Uri uri = Uri.fromFile(mFiles[position]); 204 | Intent intent = new Intent(this,MuPDFActivity.class); 205 | intent.setAction(Intent.ACTION_VIEW); 206 | intent.setData(uri); 207 | switch (mPurpose) { 208 | case PickPDF: 209 | // Start an activity to display the PDF file 210 | startActivity(intent); 211 | break; 212 | case PickKeyFile: 213 | // Return the uri to the caller 214 | setResult(RESULT_OK, intent); 215 | finish(); 216 | break; 217 | } 218 | } 219 | 220 | @Override 221 | protected void onPause() { 222 | super.onPause(); 223 | if (mDirectory != null) 224 | mPositions.put(mDirectory.getAbsolutePath(), getListView().getFirstVisiblePosition()); 225 | } 226 | } 227 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/ChoosePDFAdapter.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | import java.util.LinkedList; 4 | 5 | import android.graphics.Color; 6 | import android.view.LayoutInflater; 7 | import android.view.View; 8 | import android.view.ViewGroup; 9 | import android.widget.BaseAdapter; 10 | import android.widget.ImageView; 11 | import android.widget.TextView; 12 | 13 | public class ChoosePDFAdapter extends BaseAdapter { 14 | private final LinkedList mItems; 15 | private final LayoutInflater mInflater; 16 | 17 | public ChoosePDFAdapter(LayoutInflater inflater) { 18 | mInflater = inflater; 19 | mItems = new LinkedList(); 20 | } 21 | 22 | public void clear() { 23 | mItems.clear(); 24 | } 25 | 26 | public void add(ChoosePDFItem item) { 27 | mItems.add(item); 28 | notifyDataSetChanged(); 29 | } 30 | 31 | public int getCount() { 32 | return mItems.size(); 33 | } 34 | 35 | public Object getItem(int i) { 36 | return null; 37 | } 38 | 39 | public long getItemId(int arg0) { 40 | return 0; 41 | } 42 | 43 | private int iconForType(ChoosePDFItem.Type type) { 44 | switch (type) { 45 | case PARENT: return R.drawable.ic_arrow_up; 46 | case DIR: return R.drawable.ic_dir; 47 | case DOC: return R.drawable.ic_doc; 48 | default: return 0; 49 | } 50 | } 51 | 52 | public View getView(int position, View convertView, ViewGroup parent) { 53 | View v; 54 | if (convertView == null) { 55 | v = mInflater.inflate(R.layout.picker_entry, null); 56 | } else { 57 | v = convertView; 58 | } 59 | ChoosePDFItem item = mItems.get(position); 60 | ((TextView)v.findViewById(R.id.name)).setText(item.name); 61 | ((ImageView)v.findViewById(R.id.icon)).setImageResource(iconForType(item.type)); 62 | ((ImageView)v.findViewById(R.id.icon)).setColorFilter(Color.argb(255, 0, 0, 0)); 63 | return v; 64 | } 65 | 66 | } 67 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/ChoosePDFItem.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | public class ChoosePDFItem { 4 | enum Type { 5 | PARENT, DIR, DOC 6 | } 7 | 8 | final public Type type; 9 | final public String name; 10 | 11 | public ChoosePDFItem (Type t, String n) { 12 | type = t; 13 | name = n; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/FilePicker.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | import android.net.Uri; 4 | 5 | public abstract class FilePicker { 6 | public interface FilePickerSupport { 7 | void performPickFor(FilePicker picker); 8 | } 9 | 10 | private final FilePickerSupport support; 11 | 12 | FilePicker(FilePickerSupport _support) { 13 | support = _support; 14 | } 15 | 16 | void pick() { 17 | support.performPickFor(this); 18 | } 19 | 20 | abstract void onPick(Uri uri); 21 | } 22 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/LinkInfo.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | import android.graphics.RectF; 4 | 5 | public class LinkInfo { 6 | final public RectF rect; 7 | 8 | public LinkInfo(float l, float t, float r, float b) { 9 | rect = new RectF(l, t, r, b); 10 | } 11 | 12 | public void acceptVisitor(LinkInfoVisitor visitor) { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/LinkInfoExternal.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | public class LinkInfoExternal extends LinkInfo { 4 | final public String url; 5 | 6 | public LinkInfoExternal(float l, float t, float r, float b, String u) { 7 | super(l, t, r, b); 8 | url = u; 9 | } 10 | 11 | public void acceptVisitor(LinkInfoVisitor visitor) { 12 | visitor.visitExternal(this); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/LinkInfoInternal.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | public class LinkInfoInternal extends LinkInfo { 4 | final public int pageNumber; 5 | 6 | public LinkInfoInternal(float l, float t, float r, float b, int p) { 7 | super(l, t, r, b); 8 | pageNumber = p; 9 | } 10 | 11 | public void acceptVisitor(LinkInfoVisitor visitor) { 12 | visitor.visitInternal(this); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/LinkInfoRemote.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | public class LinkInfoRemote extends LinkInfo { 4 | final public String fileSpec; 5 | final public int pageNumber; 6 | final public boolean newWindow; 7 | 8 | public LinkInfoRemote(float l, float t, float r, float b, String f, int p, boolean n) { 9 | super(l, t, r, b); 10 | fileSpec = f; 11 | pageNumber = p; 12 | newWindow = n; 13 | } 14 | 15 | public void acceptVisitor(LinkInfoVisitor visitor) { 16 | visitor.visitRemote(this); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/LinkInfoVisitor.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | abstract public class LinkInfoVisitor { 4 | public abstract void visitInternal(LinkInfoInternal li); 5 | public abstract void visitExternal(LinkInfoExternal li); 6 | public abstract void visitRemote(LinkInfoRemote li); 7 | } 8 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/MuPDFAlert.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | public class MuPDFAlert { 4 | public enum IconType {Error,Warning,Question,Status}; 5 | public enum ButtonPressed {None,Ok,Cancel,No,Yes}; 6 | public enum ButtonGroupType {Ok,OkCancel,YesNo,YesNoCancel}; 7 | 8 | public final String message; 9 | public final IconType iconType; 10 | public final ButtonGroupType buttonGroupType; 11 | public final String title; 12 | public ButtonPressed buttonPressed; 13 | 14 | MuPDFAlert(String aMessage, IconType aIconType, ButtonGroupType aButtonGroupType, String aTitle, ButtonPressed aButtonPressed) { 15 | message = aMessage; 16 | iconType = aIconType; 17 | buttonGroupType = aButtonGroupType; 18 | title = aTitle; 19 | buttonPressed = aButtonPressed; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/MuPDFAlertInternal.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | // Version of MuPDFAlert without enums to simplify JNI 4 | public class MuPDFAlertInternal { 5 | public final String message; 6 | public final int iconType; 7 | public final int buttonGroupType; 8 | public final String title; 9 | public int buttonPressed; 10 | 11 | MuPDFAlertInternal(String aMessage, int aIconType, int aButtonGroupType, String aTitle, int aButtonPressed) { 12 | message = aMessage; 13 | iconType = aIconType; 14 | buttonGroupType = aButtonGroupType; 15 | title = aTitle; 16 | buttonPressed = aButtonPressed; 17 | } 18 | 19 | MuPDFAlertInternal(MuPDFAlert alert) { 20 | message = alert.message; 21 | iconType = alert.iconType.ordinal(); 22 | buttonGroupType = alert.buttonGroupType.ordinal(); 23 | title = alert.message; 24 | buttonPressed = alert.buttonPressed.ordinal(); 25 | } 26 | 27 | MuPDFAlert toAlert() { 28 | return new MuPDFAlert(message, MuPDFAlert.IconType.values()[iconType], MuPDFAlert.ButtonGroupType.values()[buttonGroupType], title, MuPDFAlert.ButtonPressed.values()[buttonPressed]); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/MuPDFCancellableTaskDefinition.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | public abstract class MuPDFCancellableTaskDefinition implements CancellableTaskDefinition 4 | { 5 | private MuPDFCore.Cookie cookie; 6 | 7 | public MuPDFCancellableTaskDefinition(MuPDFCore core) 8 | { 9 | this.cookie = core.new Cookie(); 10 | } 11 | 12 | @Override 13 | public void doCancel() 14 | { 15 | if (cookie == null) 16 | return; 17 | 18 | cookie.abort(); 19 | } 20 | 21 | @Override 22 | public void doCleanup() 23 | { 24 | if (cookie == null) 25 | return; 26 | 27 | cookie.destroy(); 28 | cookie = null; 29 | } 30 | 31 | @Override 32 | public final Result doInBackground(Params ... params) 33 | { 34 | return doInBackground(cookie, params); 35 | } 36 | 37 | public abstract Result doInBackground(MuPDFCore.Cookie cookie, Params ... params); 38 | } 39 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/MuPDFPageAdapter.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | import android.content.Context; 4 | import android.graphics.Bitmap; 5 | import android.graphics.Point; 6 | import android.graphics.PointF; 7 | import android.util.SparseArray; 8 | import android.view.View; 9 | import android.view.ViewGroup; 10 | import android.widget.BaseAdapter; 11 | 12 | public class MuPDFPageAdapter extends BaseAdapter { 13 | private final Context mContext; 14 | private final FilePicker.FilePickerSupport mFilePickerSupport; 15 | private final MuPDFCore mCore; 16 | private final SparseArray mPageSizes = new SparseArray(); 17 | private Bitmap mSharedHqBm; 18 | 19 | public MuPDFPageAdapter(Context c, FilePicker.FilePickerSupport filePickerSupport, MuPDFCore core) { 20 | mContext = c; 21 | mFilePickerSupport = filePickerSupport; 22 | mCore = core; 23 | } 24 | 25 | public int getCount() { 26 | return mCore.countPages(); 27 | } 28 | 29 | public Object getItem(int position) { 30 | return null; 31 | } 32 | 33 | public long getItemId(int position) { 34 | return 0; 35 | } 36 | 37 | public void releaseBitmaps() 38 | { 39 | // recycle and release the shared bitmap. 40 | if (mSharedHqBm!=null) 41 | mSharedHqBm.recycle(); 42 | mSharedHqBm = null; 43 | } 44 | 45 | public View getView(final int position, View convertView, ViewGroup parent) { 46 | final MuPDFPageView pageView; 47 | if (convertView == null) { 48 | if (mSharedHqBm == null || mSharedHqBm.getWidth() != parent.getWidth() || mSharedHqBm.getHeight() != parent.getHeight()) 49 | mSharedHqBm = Bitmap.createBitmap(parent.getWidth(), parent.getHeight(), Bitmap.Config.ARGB_8888); 50 | 51 | pageView = new MuPDFPageView(mContext, mFilePickerSupport, mCore, new Point(parent.getWidth(), parent.getHeight()), mSharedHqBm); 52 | } else { 53 | pageView = (MuPDFPageView) convertView; 54 | } 55 | 56 | PointF pageSize = mPageSizes.get(position); 57 | if (pageSize != null) { 58 | // We already know the page size. Set it up 59 | // immediately 60 | pageView.setPage(position, pageSize); 61 | } else { 62 | // Page size as yet unknown. Blank it for now, and 63 | // start a background task to find the size 64 | pageView.blank(position); 65 | AsyncTask sizingTask = new AsyncTask() { 66 | @Override 67 | protected PointF doInBackground(Void... arg0) { 68 | return mCore.getPageSize(position); 69 | } 70 | 71 | @Override 72 | protected void onPostExecute(PointF result) { 73 | super.onPostExecute(result); 74 | // We now know the page size 75 | mPageSizes.put(position, result); 76 | // Check that this view hasn't been reused for 77 | // another page since we started 78 | if (pageView.getPage() == position) 79 | pageView.setPage(position, result); 80 | } 81 | }; 82 | 83 | sizingTask.execute((Void)null); 84 | } 85 | return pageView; 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/MuPDFReaderView.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | import android.app.Activity; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.net.Uri; 7 | import android.util.AttributeSet; 8 | import android.util.DisplayMetrics; 9 | import android.view.MotionEvent; 10 | import android.view.ScaleGestureDetector; 11 | import android.view.View; 12 | import android.view.WindowManager; 13 | 14 | public class MuPDFReaderView extends ReaderView { 15 | public enum Mode {Viewing, Selecting, Drawing} 16 | private final Context mContext; 17 | private boolean mLinksEnabled = false; 18 | private Mode mMode = Mode.Viewing; 19 | private boolean tapDisabled = false; 20 | private int tapPageMargin; 21 | 22 | protected void onTapMainDocArea() {} 23 | protected void onDocMotion() {} 24 | protected void onHit(Hit item) {}; 25 | 26 | public void setLinksEnabled(boolean b) { 27 | mLinksEnabled = b; 28 | resetupChildren(); 29 | } 30 | 31 | public void setMode(Mode m) { 32 | mMode = m; 33 | } 34 | 35 | private void setup() 36 | { 37 | // Get the screen size etc to customise tap margins. 38 | // We calculate the size of 1 inch of the screen for tapping. 39 | // On some devices the dpi values returned are wrong, so we 40 | // sanity check it: we first restrict it so that we are never 41 | // less than 100 pixels (the smallest Android device screen 42 | // dimension I've seen is 480 pixels or so). Then we check 43 | // to ensure we are never more than 1/5 of the screen width. 44 | DisplayMetrics dm = new DisplayMetrics(); 45 | WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); 46 | wm.getDefaultDisplay().getMetrics(dm); 47 | tapPageMargin = (int)dm.xdpi; 48 | if (tapPageMargin < 100) 49 | tapPageMargin = 100; 50 | if (tapPageMargin > dm.widthPixels/5) 51 | tapPageMargin = dm.widthPixels/5; 52 | } 53 | 54 | public MuPDFReaderView(Context context) { 55 | super(context); 56 | mContext = context; 57 | setup(); 58 | } 59 | 60 | public MuPDFReaderView(Context context, AttributeSet attrs) 61 | { 62 | super(context, attrs); 63 | mContext = context; 64 | setup(); 65 | } 66 | 67 | public boolean onSingleTapUp(MotionEvent e) { 68 | LinkInfo link = null; 69 | 70 | if (mMode == Mode.Viewing && !tapDisabled) { 71 | MuPDFView pageView = (MuPDFView) getDisplayedView(); 72 | Hit item = pageView != null ? pageView.passClickEvent(e.getX(), e.getY()) : null; 73 | if (item != null) 74 | onHit(item); 75 | if (item == Hit.Nothing) { 76 | if (mLinksEnabled && pageView != null 77 | && (link = pageView.hitLink(e.getX(), e.getY())) != null) { 78 | link.acceptVisitor(new LinkInfoVisitor() { 79 | @Override 80 | public void visitInternal(LinkInfoInternal li) { 81 | // Clicked on an internal (GoTo) link 82 | setDisplayedViewIndex(li.pageNumber); 83 | } 84 | 85 | @Override 86 | public void visitExternal(LinkInfoExternal li) { 87 | Intent intent = new Intent(Intent.ACTION_VIEW, Uri 88 | .parse(li.url)); 89 | mContext.startActivity(intent); 90 | } 91 | 92 | @Override 93 | public void visitRemote(LinkInfoRemote li) { 94 | // Clicked on a remote (GoToR) link 95 | } 96 | }); 97 | } else if (e.getX() < tapPageMargin) { 98 | super.smartMoveBackwards(); 99 | } else if (e.getX() > super.getWidth() - tapPageMargin) { 100 | super.smartMoveForwards(); 101 | } else if (e.getY() < tapPageMargin) { 102 | super.smartMoveBackwards(); 103 | } else if (e.getY() > super.getHeight() - tapPageMargin) { 104 | super.smartMoveForwards(); 105 | } else { 106 | onTapMainDocArea(); 107 | } 108 | } 109 | } 110 | return super.onSingleTapUp(e); 111 | } 112 | 113 | @Override 114 | public boolean onDown(MotionEvent e) { 115 | 116 | return super.onDown(e); 117 | } 118 | 119 | public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, 120 | float distanceY) { 121 | MuPDFView pageView = (MuPDFView)getDisplayedView(); 122 | switch (mMode) { 123 | case Viewing: 124 | if (!tapDisabled) 125 | onDocMotion(); 126 | 127 | return super.onScroll(e1, e2, distanceX, distanceY); 128 | case Selecting: 129 | if (pageView != null) 130 | pageView.selectText(e1.getX(), e1.getY(), e2.getX(), e2.getY()); 131 | return true; 132 | default: 133 | return true; 134 | } 135 | } 136 | 137 | @Override 138 | public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 139 | float velocityY) { 140 | switch (mMode) { 141 | case Viewing: 142 | return super.onFling(e1, e2, velocityX, velocityY); 143 | default: 144 | return true; 145 | } 146 | } 147 | 148 | public boolean onScaleBegin(ScaleGestureDetector d) { 149 | // Disabled showing the buttons until next touch. 150 | // Not sure why this is needed, but without it 151 | // pinch zoom can make the buttons appear 152 | tapDisabled = true; 153 | return super.onScaleBegin(d); 154 | } 155 | 156 | public boolean onTouchEvent(MotionEvent event) { 157 | 158 | if ( mMode == Mode.Drawing ) 159 | { 160 | float x = event.getX(); 161 | float y = event.getY(); 162 | switch (event.getAction()) 163 | { 164 | case MotionEvent.ACTION_DOWN: 165 | touch_start(x, y); 166 | break; 167 | case MotionEvent.ACTION_MOVE: 168 | touch_move(x, y); 169 | break; 170 | case MotionEvent.ACTION_UP: 171 | touch_up(); 172 | break; 173 | } 174 | } 175 | 176 | if ((event.getAction() & event.getActionMasked()) == MotionEvent.ACTION_DOWN) 177 | { 178 | tapDisabled = false; 179 | } 180 | 181 | return super.onTouchEvent(event); 182 | } 183 | 184 | private float mX, mY; 185 | 186 | private static final float TOUCH_TOLERANCE = 2; 187 | 188 | private void touch_start(float x, float y) { 189 | 190 | MuPDFView pageView = (MuPDFView)getDisplayedView(); 191 | if (pageView != null) 192 | { 193 | pageView.startDraw(x, y); 194 | } 195 | mX = x; 196 | mY = y; 197 | } 198 | 199 | private void touch_move(float x, float y) { 200 | 201 | float dx = Math.abs(x - mX); 202 | float dy = Math.abs(y - mY); 203 | if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) 204 | { 205 | MuPDFView pageView = (MuPDFView)getDisplayedView(); 206 | if (pageView != null) 207 | { 208 | pageView.continueDraw(x, y); 209 | } 210 | mX = x; 211 | mY = y; 212 | } 213 | } 214 | 215 | private void touch_up() { 216 | 217 | // NOOP 218 | } 219 | 220 | protected void onChildSetup(int i, View v) { 221 | if (SearchTaskResult.get() != null 222 | && SearchTaskResult.get().pageNumber == i) 223 | ((MuPDFView) v).setSearchBoxes(SearchTaskResult.get().searchBoxes); 224 | else 225 | ((MuPDFView) v).setSearchBoxes(null); 226 | 227 | ((MuPDFView) v).setLinkHighlighting(mLinksEnabled); 228 | 229 | ((MuPDFView) v).setChangeReporter(new Runnable() { 230 | public void run() { 231 | applyToChildren(new ReaderView.ViewMapper() { 232 | @Override 233 | void applyToView(View view) { 234 | ((MuPDFView) view).update(); 235 | } 236 | }); 237 | } 238 | }); 239 | } 240 | 241 | protected void onMoveToChild(int i) { 242 | if (SearchTaskResult.get() != null 243 | && SearchTaskResult.get().pageNumber != i) { 244 | SearchTaskResult.set(null); 245 | resetupChildren(); 246 | } 247 | } 248 | 249 | @Override 250 | protected void onMoveOffChild(int i) { 251 | View v = getView(i); 252 | if (v != null) 253 | ((MuPDFView)v).deselectAnnotation(); 254 | } 255 | 256 | protected void onSettle(View v) { 257 | // When the layout has settled ask the page to render 258 | // in HQ 259 | ((MuPDFView) v).updateHq(false); 260 | } 261 | 262 | protected void onUnsettle(View v) { 263 | // When something changes making the previous settled view 264 | // no longer appropriate, tell the page to remove HQ 265 | ((MuPDFView) v).removeHq(); 266 | } 267 | 268 | @Override 269 | protected void onNotInUse(View v) { 270 | ((MuPDFView) v).releaseResources(); 271 | } 272 | 273 | @Override 274 | protected void onScaleChild(View v, Float scale) { 275 | ((MuPDFView) v).setScale(scale); 276 | } 277 | } 278 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/MuPDFReflowAdapter.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | import android.content.Context; 4 | import android.graphics.Point; 5 | import android.graphics.PointF; 6 | import android.view.View; 7 | import android.view.ViewGroup; 8 | import android.widget.BaseAdapter; 9 | 10 | public class MuPDFReflowAdapter extends BaseAdapter { 11 | private final Context mContext; 12 | private final MuPDFCore mCore; 13 | 14 | public MuPDFReflowAdapter(Context c, MuPDFCore core) { 15 | mContext = c; 16 | mCore = core; 17 | } 18 | 19 | public int getCount() { 20 | return mCore.countPages(); 21 | } 22 | 23 | public Object getItem(int arg0) { 24 | return null; 25 | } 26 | 27 | public long getItemId(int arg0) { 28 | return 0; 29 | } 30 | 31 | public View getView(int position, View convertView, ViewGroup parent) { 32 | final MuPDFReflowView reflowView; 33 | if (convertView == null) { 34 | reflowView = new MuPDFReflowView(mContext, mCore, new Point(parent.getWidth(), parent.getHeight())); 35 | } else { 36 | reflowView = (MuPDFReflowView) convertView; 37 | } 38 | 39 | reflowView.setPage(position, new PointF()); 40 | 41 | return reflowView; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/MuPDFReflowView.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | import android.content.Context; 4 | import android.graphics.Point; 5 | import android.graphics.PointF; 6 | import android.graphics.RectF; 7 | import android.os.Handler; 8 | import android.util.Base64; 9 | import android.view.MotionEvent; 10 | import android.view.View; 11 | import android.webkit.WebView; 12 | import android.webkit.WebViewClient; 13 | 14 | public class MuPDFReflowView extends WebView implements MuPDFView { 15 | private final MuPDFCore mCore; 16 | private final Handler mHandler; 17 | private final Point mParentSize; 18 | private int mPage; 19 | private float mScale; 20 | private int mContentHeight; 21 | AsyncTask mLoadHTML; 22 | 23 | public MuPDFReflowView(Context c, MuPDFCore core, Point parentSize) { 24 | super(c); 25 | mHandler = new Handler(); 26 | mCore = core; 27 | mParentSize = parentSize; 28 | mScale = 1.0f; 29 | mContentHeight = parentSize.y; 30 | getSettings().setJavaScriptEnabled(true); 31 | addJavascriptInterface(new Object(){ 32 | public void reportContentHeight(String value) { 33 | mContentHeight = (int)Float.parseFloat(value); 34 | mHandler.post(new Runnable() { 35 | public void run() { 36 | requestLayout(); 37 | } 38 | }); 39 | } 40 | }, "HTMLOUT"); 41 | setWebViewClient(new WebViewClient() { 42 | @Override 43 | public void onPageFinished(WebView view, String url) { 44 | setScale(mScale); 45 | } 46 | }); 47 | } 48 | 49 | private void requestHeight() { 50 | // Get the webview to report the content height via the interface setup 51 | // above. Workaround for getContentHeight not working 52 | loadUrl("javascript:elem=document.getElementById('content');window.HTMLOUT.reportContentHeight("+mParentSize.x+"*elem.offsetHeight/elem.offsetWidth)"); 53 | } 54 | 55 | public void setPage(int page, PointF size) { 56 | mPage = page; 57 | if (mLoadHTML != null) { 58 | mLoadHTML.cancel(true); 59 | } 60 | mLoadHTML = new AsyncTask() { 61 | @Override 62 | protected byte[] doInBackground(Void... params) { 63 | return mCore.html(mPage); 64 | } 65 | @Override 66 | protected void onPostExecute(byte[] result) { 67 | String b64 = Base64.encodeToString(result, Base64.DEFAULT); 68 | loadData(b64, "text/html; charset=utf-8", "base64"); 69 | } 70 | }; 71 | mLoadHTML.execute(); 72 | } 73 | 74 | public int getPage() { 75 | return mPage; 76 | } 77 | 78 | public void setScale(float scale) { 79 | mScale = scale; 80 | loadUrl("javascript:document.getElementById('content').style.zoom=\""+(int)(mScale*100)+"%\""); 81 | requestHeight(); 82 | } 83 | 84 | public void blank(int page) { 85 | } 86 | 87 | public Hit passClickEvent(float x, float y) { 88 | return Hit.Nothing; 89 | } 90 | 91 | public LinkInfo hitLink(float x, float y) { 92 | return null; 93 | } 94 | 95 | public void selectText(float x0, float y0, float x1, float y1) { 96 | } 97 | 98 | public void deselectText() { 99 | } 100 | 101 | public boolean copySelection() { 102 | return false; 103 | } 104 | 105 | public boolean markupSelection(Annotation.Type type) { 106 | return false; 107 | } 108 | 109 | public void startDraw(float x, float y) { 110 | } 111 | 112 | public void continueDraw(float x, float y) { 113 | } 114 | 115 | public void cancelDraw() { 116 | } 117 | 118 | public boolean saveDraw() { 119 | return false; 120 | } 121 | 122 | public void setSearchBoxes(RectF[] searchBoxes) { 123 | } 124 | 125 | public void setLinkHighlighting(boolean f) { 126 | } 127 | 128 | public void deleteSelectedAnnotation() { 129 | } 130 | 131 | public void deselectAnnotation() { 132 | } 133 | 134 | public void setChangeReporter(Runnable reporter) { 135 | } 136 | 137 | public void update() { 138 | } 139 | 140 | public void updateHq(boolean update) { 141 | } 142 | 143 | public void removeHq() { 144 | } 145 | 146 | public void releaseResources() { 147 | if (mLoadHTML != null) { 148 | mLoadHTML.cancel(true); 149 | mLoadHTML = null; 150 | } 151 | } 152 | 153 | public void releaseBitmaps() { 154 | } 155 | 156 | @Override 157 | protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 158 | int x, y; 159 | switch(View.MeasureSpec.getMode(widthMeasureSpec)) { 160 | case View.MeasureSpec.UNSPECIFIED: 161 | x = mParentSize.x; 162 | break; 163 | default: 164 | x = View.MeasureSpec.getSize(widthMeasureSpec); 165 | } 166 | switch(View.MeasureSpec.getMode(heightMeasureSpec)) { 167 | case View.MeasureSpec.UNSPECIFIED: 168 | y = mContentHeight; 169 | break; 170 | default: 171 | y = View.MeasureSpec.getSize(heightMeasureSpec); 172 | } 173 | 174 | setMeasuredDimension(x, y); 175 | } 176 | 177 | @Override 178 | public boolean onTouchEvent(MotionEvent ev) { 179 | // TODO Auto-generated method stub 180 | return false; 181 | } 182 | } 183 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/MuPDFView.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | import android.graphics.PointF; 4 | import android.graphics.RectF; 5 | 6 | enum Hit {Nothing, Widget, Annotation}; 7 | 8 | public interface MuPDFView { 9 | public void setPage(int page, PointF size); 10 | public void setScale(float scale); 11 | public int getPage(); 12 | public void blank(int page); 13 | public Hit passClickEvent(float x, float y); 14 | public LinkInfo hitLink(float x, float y); 15 | public void selectText(float x0, float y0, float x1, float y1); 16 | public void deselectText(); 17 | public boolean copySelection(); 18 | public boolean markupSelection(Annotation.Type type); 19 | public void deleteSelectedAnnotation(); 20 | public void setSearchBoxes(RectF searchBoxes[]); 21 | public void setLinkHighlighting(boolean f); 22 | public void deselectAnnotation(); 23 | public void startDraw(float x, float y); 24 | public void continueDraw(float x, float y); 25 | public void cancelDraw(); 26 | public boolean saveDraw(); 27 | public void setChangeReporter(Runnable reporter); 28 | public void update(); 29 | public void updateHq(boolean update); 30 | public void removeHq(); 31 | public void releaseResources(); 32 | public void releaseBitmaps(); 33 | } 34 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/OutlineActivity.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | import android.app.ListActivity; 4 | import android.os.Bundle; 5 | import android.view.View; 6 | import android.widget.ListView; 7 | 8 | public class OutlineActivity extends ListActivity { 9 | OutlineItem mItems[]; 10 | 11 | /** Called when the activity is first created. */ 12 | @Override 13 | public void onCreate(Bundle savedInstanceState) { 14 | super.onCreate(savedInstanceState); 15 | 16 | mItems = OutlineActivityData.get().items; 17 | setListAdapter(new OutlineAdapter(getLayoutInflater(),mItems)); 18 | // Restore the position within the list from last viewing 19 | getListView().setSelection(OutlineActivityData.get().position); 20 | getListView().setDividerHeight(0); 21 | setResult(-1); 22 | } 23 | 24 | @Override 25 | protected void onListItemClick(ListView l, View v, int position, long id) { 26 | super.onListItemClick(l, v, position, id); 27 | OutlineActivityData.get().position = getListView().getFirstVisiblePosition(); 28 | setResult(mItems[position].page); 29 | finish(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/OutlineActivityData.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | public class OutlineActivityData { 4 | public OutlineItem items[]; 5 | public int position; 6 | static private OutlineActivityData singleton; 7 | 8 | static public void set(OutlineActivityData d) { 9 | singleton = d; 10 | } 11 | 12 | static public OutlineActivityData get() { 13 | if (singleton == null) 14 | singleton = new OutlineActivityData(); 15 | return singleton; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/OutlineAdapter.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | import android.view.LayoutInflater; 4 | import android.view.View; 5 | import android.view.ViewGroup; 6 | import android.widget.BaseAdapter; 7 | import android.widget.TextView; 8 | 9 | public class OutlineAdapter extends BaseAdapter { 10 | private final OutlineItem mItems[]; 11 | private final LayoutInflater mInflater; 12 | public OutlineAdapter(LayoutInflater inflater, OutlineItem items[]) { 13 | mInflater = inflater; 14 | mItems = items; 15 | } 16 | 17 | public int getCount() { 18 | return mItems.length; 19 | } 20 | 21 | public Object getItem(int arg0) { 22 | return null; 23 | } 24 | 25 | public long getItemId(int arg0) { 26 | return 0; 27 | } 28 | 29 | public View getView(int position, View convertView, ViewGroup parent) { 30 | View v; 31 | if (convertView == null) { 32 | v = mInflater.inflate(R.layout.outline_entry, null); 33 | } else { 34 | v = convertView; 35 | } 36 | int level = mItems[position].level; 37 | if (level > 8) level = 8; 38 | String space = ""; 39 | for (int i=0; i= 0) { 86 | baos.write(buffer, 0, n); 87 | n = is.read(buffer); 88 | } 89 | is.close(); 90 | baos.flush(); 91 | 92 | return Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT); 93 | } catch (Throwable e) { 94 | resultCode = RESULT_CANCELED; 95 | setResult(resultCode); 96 | finish(); 97 | e.printStackTrace(); 98 | } 99 | return ""; 100 | } 101 | 102 | public String getEncoding() { 103 | return CONTENT_TRANSFER_ENCODING; 104 | } 105 | 106 | public void onPostMessage(String message) { 107 | if (message.startsWith(CLOSE_POST_MESSAGE_NAME)) { 108 | setResult(resultCode); 109 | finish(); 110 | } 111 | } 112 | } 113 | 114 | private final class PrintDialogWebClient extends WebViewClient { 115 | @Override 116 | public boolean shouldOverrideUrlLoading(WebView view, String url) { 117 | if (url.startsWith(ZXING_URL)) { 118 | Intent intentScan = new Intent("com.google.zxing.client.android.SCAN"); 119 | intentScan.putExtra("SCAN_MODE", "QR_CODE_MODE"); 120 | try { 121 | startActivityForResult(intentScan, ZXING_SCAN_REQUEST); 122 | } catch (ActivityNotFoundException error) { 123 | view.loadUrl(url); 124 | } 125 | } else { 126 | view.loadUrl(url); 127 | } 128 | return false; 129 | } 130 | 131 | @Override 132 | public void onPageFinished(WebView view, String url) { 133 | if (PRINT_DIALOG_URL.equals(url)) { 134 | // Submit print document. 135 | view.loadUrl("javascript:printDialog.setPrintDocument(printDialog.createPrintDocument(" 136 | + "window." + JS_INTERFACE + ".getType(),window." + JS_INTERFACE + ".getTitle()," 137 | + "window." + JS_INTERFACE + ".getContent(),window." + JS_INTERFACE + ".getEncoding()))"); 138 | 139 | // Add post messages listener. 140 | view.loadUrl("javascript:window.addEventListener('message'," 141 | + "function(evt){window." + JS_INTERFACE + ".onPostMessage(evt.data)}, false)"); 142 | } 143 | } 144 | } 145 | } 146 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/SafeAnimatorInflater.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | import android.animation.Animator; 4 | import android.animation.AnimatorInflater; 5 | import android.animation.AnimatorSet; 6 | import android.app.Activity; 7 | import android.view.View; 8 | 9 | public class SafeAnimatorInflater 10 | { 11 | private View mView; 12 | 13 | public SafeAnimatorInflater(Activity activity, int animation, View view) 14 | { 15 | AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(activity, R.animator.info); 16 | mView = view; 17 | set.setTarget(view); 18 | set.addListener(new Animator.AnimatorListener() { 19 | public void onAnimationStart(Animator animation) { 20 | mView.setVisibility(View.VISIBLE); 21 | } 22 | 23 | public void onAnimationRepeat(Animator animation) { 24 | } 25 | 26 | public void onAnimationEnd(Animator animation) { 27 | mView.setVisibility(View.INVISIBLE); 28 | } 29 | 30 | public void onAnimationCancel(Animator animation) { 31 | } 32 | }); 33 | set.start(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/SearchTask.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | import android.app.AlertDialog; 4 | import android.app.ProgressDialog; 5 | import android.content.Context; 6 | import android.content.DialogInterface; 7 | import android.graphics.RectF; 8 | import android.os.Handler; 9 | 10 | class ProgressDialogX extends ProgressDialog { 11 | public ProgressDialogX(Context context) { 12 | super(context); 13 | } 14 | 15 | private boolean mCancelled = false; 16 | 17 | public boolean isCancelled() { 18 | return mCancelled; 19 | } 20 | 21 | @Override 22 | public void cancel() { 23 | mCancelled = true; 24 | super.cancel(); 25 | } 26 | } 27 | 28 | public abstract class SearchTask { 29 | private static final int SEARCH_PROGRESS_DELAY = 200; 30 | private final Context mContext; 31 | private final MuPDFCore mCore; 32 | private final Handler mHandler; 33 | private final AlertDialog.Builder mAlertBuilder; 34 | private AsyncTask mSearchTask; 35 | 36 | public SearchTask(Context context, MuPDFCore core) { 37 | mContext = context; 38 | mCore = core; 39 | mHandler = new Handler(); 40 | mAlertBuilder = new AlertDialog.Builder(context); 41 | } 42 | 43 | protected abstract void onTextFound(SearchTaskResult result); 44 | 45 | public void stop() { 46 | if (mSearchTask != null) { 47 | mSearchTask.cancel(true); 48 | mSearchTask = null; 49 | } 50 | } 51 | 52 | public void go(final String text, int direction, int displayPage, int searchPage) { 53 | if (mCore == null) 54 | return; 55 | stop(); 56 | 57 | final int increment = direction; 58 | final int startIndex = searchPage == -1 ? displayPage : searchPage + increment; 59 | 60 | final ProgressDialogX progressDialog = new ProgressDialogX(mContext); 61 | progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 62 | progressDialog.setTitle(mContext.getString(R.string.mupdflib_searching_)); 63 | progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { 64 | public void onCancel(DialogInterface dialog) { 65 | stop(); 66 | } 67 | }); 68 | progressDialog.setMax(mCore.countPages()); 69 | 70 | mSearchTask = new AsyncTask() { 71 | @Override 72 | protected SearchTaskResult doInBackground(Void... params) { 73 | int index = startIndex; 74 | 75 | while (0 <= index && index < mCore.countPages() && !isCancelled()) { 76 | publishProgress(index); 77 | RectF searchHits[] = mCore.searchPage(index, text); 78 | 79 | if (searchHits != null && searchHits.length > 0) 80 | return new SearchTaskResult(text, index, searchHits); 81 | 82 | index += increment; 83 | } 84 | return null; 85 | } 86 | 87 | @Override 88 | protected void onPostExecute(SearchTaskResult result) { 89 | progressDialog.cancel(); 90 | if (result != null) { 91 | onTextFound(result); 92 | } else { 93 | mAlertBuilder.setTitle(SearchTaskResult.get() == null ? R.string.mupdflib_text_not_found : R.string.mupdflib_no_further_occurrences_found); 94 | AlertDialog alert = mAlertBuilder.create(); 95 | alert.setButton(AlertDialog.BUTTON_POSITIVE, mContext.getString(R.string.mupdflib_dismiss), 96 | (DialogInterface.OnClickListener)null); 97 | alert.show(); 98 | } 99 | } 100 | 101 | @Override 102 | protected void onCancelled() { 103 | progressDialog.cancel(); 104 | } 105 | 106 | @Override 107 | protected void onProgressUpdate(Integer... values) { 108 | progressDialog.setProgress(values[0].intValue()); 109 | } 110 | 111 | @Override 112 | protected void onPreExecute() { 113 | super.onPreExecute(); 114 | mHandler.postDelayed(new Runnable() { 115 | public void run() { 116 | if (!progressDialog.isCancelled()) 117 | { 118 | progressDialog.show(); 119 | progressDialog.setProgress(startIndex); 120 | } 121 | } 122 | }, SEARCH_PROGRESS_DELAY); 123 | } 124 | }; 125 | 126 | mSearchTask.execute(); 127 | } 128 | } 129 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/SearchTaskResult.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | import android.graphics.RectF; 4 | 5 | public class SearchTaskResult { 6 | public final String txt; 7 | public final int pageNumber; 8 | public final RectF searchBoxes[]; 9 | static private SearchTaskResult singleton; 10 | 11 | SearchTaskResult(String _txt, int _pageNumber, RectF _searchBoxes[]) { 12 | txt = _txt; 13 | pageNumber = _pageNumber; 14 | searchBoxes = _searchBoxes; 15 | } 16 | 17 | static public SearchTaskResult get() { 18 | return singleton; 19 | } 20 | 21 | static public void set(SearchTaskResult r) { 22 | singleton = r; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/Separation.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | public class Separation 4 | { 5 | String name; 6 | int rgba; 7 | int cmyk; 8 | 9 | public Separation(String name, int rgba, int cmyk) 10 | { 11 | this.name = name; 12 | this.rgba = rgba; 13 | this.cmyk = cmyk; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/Stepper.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | import android.annotation.SuppressLint; 4 | import android.os.Build; 5 | import android.view.View; 6 | 7 | public class Stepper { 8 | protected final View mPoster; 9 | protected final Runnable mTask; 10 | protected boolean mPending; 11 | 12 | public Stepper(View v, Runnable r) { 13 | mPoster = v; 14 | mTask = r; 15 | mPending = false; 16 | } 17 | 18 | @SuppressLint("NewApi") 19 | public void prod() { 20 | if (!mPending) { 21 | mPending = true; 22 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 23 | mPoster.postOnAnimation(new Runnable() { 24 | @Override 25 | public void run() { 26 | mPending = false; 27 | mTask.run(); 28 | } 29 | }); 30 | } else { 31 | mPoster.post(new Runnable() { 32 | @Override 33 | public void run() { 34 | mPending = false; 35 | mTask.run(); 36 | } 37 | }); 38 | 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/TextChar.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | import android.graphics.RectF; 4 | 5 | public class TextChar extends RectF { 6 | public char c; 7 | 8 | public TextChar(float x0, float y0, float x1, float y1, char _c) { 9 | super(x0, y0, x1, y1); 10 | c = _c; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/TextWord.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | import android.graphics.RectF; 4 | 5 | public class TextWord extends RectF { 6 | public String w; 7 | 8 | public TextWord() { 9 | super(); 10 | w = new String(); 11 | } 12 | 13 | public void Add(TextChar tc) { 14 | super.union(tc); 15 | w = w.concat(new String(new char[]{tc.c})); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/com/artifex/mupdfdemo/WidgetType.java: -------------------------------------------------------------------------------- 1 | package com.artifex.mupdfdemo; 2 | 3 | public enum WidgetType { 4 | NONE, 5 | TEXT, 6 | LISTBOX, 7 | COMBOBOX, 8 | SIGNATURE 9 | } 10 | --------------------------------------------------------------------------------