├── .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 | جاري البحث في…
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 | Sí
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í…
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…
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 | Αναζήτηση…
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…
47 | Seleccionar
48 | Seleccionar texto
49 | Tachar
50 | Texto no encontrado
51 | Resaltar y activar
52 | Subrayar
53 | Sí
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…
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 …
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… ;
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 | … को खोज रहे हैं;
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:…
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 | Sì
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 | מחפש…
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 | 검색 중…
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…
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…
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…
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…
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…
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 | Поиск…
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…
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…
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 | กำลังค้นหา…
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…
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…
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 | 搜尋中…
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 |
--------------------------------------------------------------------------------