Compare commits
20 Commits
eead76ad86
...
c6fb2aceda
Author | SHA1 | Date |
---|---|---|
![]() |
c6fb2aceda | |
![]() |
7f59118453 | |
![]() |
5b46b4c80e | |
![]() |
e34c727ff7 | |
![]() |
3e60cca098 | |
![]() |
48910db7c6 | |
![]() |
fd510a3c19 | |
![]() |
b8dcc33696 | |
![]() |
45a0952296 | |
![]() |
aaa93a6f88 | |
![]() |
414d7fe3d1 | |
![]() |
99c8c13fec | |
![]() |
1cf1c7ec28 | |
![]() |
ac4aa0bbb9 | |
![]() |
abfb212011 | |
![]() |
a3ba77534c | |
![]() |
ed3cf2c08f | |
![]() |
e1dd3db05a | |
![]() |
22bd993a75 | |
![]() |
a73caa5914 |
|
@ -10,11 +10,11 @@ jobs:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Set up JDK 18
|
- name: Set up JDK 19
|
||||||
uses: actions/setup-java@v3
|
uses: actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
distribution: 'temurin'
|
distribution: 'temurin'
|
||||||
java-version: 18
|
java-version: 19
|
||||||
cache: gradle
|
cache: gradle
|
||||||
- name: Build with Gradle
|
- name: Build with Gradle
|
||||||
run: ./gradlew build --no-daemon
|
run: ./gradlew build --no-daemon
|
||||||
|
|
|
@ -33,7 +33,7 @@ android {
|
||||||
}
|
}
|
||||||
|
|
||||||
compileSdk = 33
|
compileSdk = 33
|
||||||
buildToolsVersion = "33.0.0"
|
buildToolsVersion = "33.0.1"
|
||||||
|
|
||||||
namespace = "app.grapheneos.pdfviewer"
|
namespace = "app.grapheneos.pdfviewer"
|
||||||
|
|
||||||
|
@ -84,6 +84,6 @@ android {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation("androidx.appcompat:appcompat:1.5.1")
|
implementation("androidx.appcompat:appcompat:1.6.0")
|
||||||
implementation("com.google.android.material:material:1.6.1")
|
implementation("com.google.android.material:material:1.7.0")
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,10 +4,8 @@
|
||||||
<original-package android:name="org.grapheneos.pdfviewer" />
|
<original-package android:name="org.grapheneos.pdfviewer" />
|
||||||
|
|
||||||
<application android:name=".App"
|
<application android:name=".App"
|
||||||
android:allowBackup="true"
|
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:roundIcon="@mipmap/ic_launcher"
|
|
||||||
android:theme="@style/AppTheme">
|
android:theme="@style/AppTheme">
|
||||||
<activity android:name=".PdfViewer"
|
<activity android:name=".PdfViewer"
|
||||||
android:documentLaunchMode="always"
|
android:documentLaunchMode="always"
|
||||||
|
|
|
@ -1,24 +1,36 @@
|
||||||
|
html, body {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
body, canvas {
|
body, canvas {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
canvas {
|
|
||||||
margin: auto;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
body {
|
||||||
background-color: #c0c0c0;
|
background-color: #c0c0c0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
display: grid;
|
||||||
|
place-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#container canvas, #container .textLayer {
|
||||||
|
/* overlay child elements on top of each other */
|
||||||
|
grid-row-start: 1;
|
||||||
|
grid-column-start: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
canvas, .textLayer {
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
.textLayer {
|
.textLayer {
|
||||||
position: absolute;
|
|
||||||
text-align: initial;
|
text-align: initial;
|
||||||
left: 0;
|
|
||||||
top: 0;
|
|
||||||
right: 0;
|
|
||||||
bottom: 0;
|
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
opacity: 0.2;
|
opacity: 0.2;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
|
|
|
@ -7,8 +7,10 @@
|
||||||
<script src="pdf.js"></script>
|
<script src="pdf.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<canvas id="content"></canvas>
|
<div id="container">
|
||||||
<div id="text" class="textLayer"></div>
|
<canvas id="content"></canvas>
|
||||||
|
<div id="text" class="textLayer"></div>
|
||||||
|
</div>
|
||||||
<script src="viewer.js"></script>
|
<script src="viewer.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -252,6 +252,7 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader
|
||||||
settings.setAllowFileAccess(false);
|
settings.setAllowFileAccess(false);
|
||||||
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
|
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
|
||||||
settings.setJavaScriptEnabled(true);
|
settings.setJavaScriptEnabled(true);
|
||||||
|
settings.setMinimumFontSize(1);
|
||||||
|
|
||||||
CookieManager.getInstance().setAcceptCookie(false);
|
CookieManager.getInstance().setAcceptCookie(false);
|
||||||
|
|
||||||
|
@ -385,7 +386,9 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
|
||||||
mUri = savedInstanceState.getParcelable(STATE_URI);
|
@SuppressWarnings("deprecation")
|
||||||
|
final Uri uri = savedInstanceState.getParcelable(STATE_URI);
|
||||||
|
mUri = uri;
|
||||||
} else {
|
} else {
|
||||||
mUri = savedInstanceState.getParcelable(STATE_URI, Uri.class);
|
mUri = savedInstanceState.getParcelable(STATE_URI, Uri.class);
|
||||||
}
|
}
|
||||||
|
@ -437,6 +440,15 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader
|
||||||
return mPasswordPromptFragment;
|
return mPasswordPromptFragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setToolbarTitleWithDocumentName() {
|
||||||
|
String documentName = getCurrentDocumentName();
|
||||||
|
if (documentName != null && !documentName.isEmpty()) {
|
||||||
|
getSupportActionBar().setTitle(documentName);
|
||||||
|
} else {
|
||||||
|
getSupportActionBar().setTitle(R.string.app_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
@ -468,6 +480,7 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader
|
||||||
@Override
|
@Override
|
||||||
public void onLoadFinished(@NonNull Loader<List<CharSequence>> loader, List<CharSequence> data) {
|
public void onLoadFinished(@NonNull Loader<List<CharSequence>> loader, List<CharSequence> data) {
|
||||||
mDocumentProperties = data;
|
mDocumentProperties = data;
|
||||||
|
setToolbarTitleWithDocumentName();
|
||||||
LoaderManager.getInstance(this).destroyLoader(DocumentPropertiesLoader.ID);
|
LoaderManager.getInstance(this).destroyLoader(DocumentPropertiesLoader.ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,23 +22,19 @@ public class JumpToPageFragment extends DialogFragment {
|
||||||
|
|
||||||
private NumberPicker mPicker;
|
private NumberPicker mPicker;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onActivityCreated(Bundle savedInstanceState) {
|
|
||||||
super.onActivityCreated(savedInstanceState);
|
|
||||||
if (savedInstanceState != null) {
|
|
||||||
mPicker.setMinValue(savedInstanceState.getInt(STATE_PICKER_MIN));
|
|
||||||
mPicker.setMaxValue(savedInstanceState.getInt(STATE_PICKER_MAX));
|
|
||||||
mPicker.setValue(savedInstanceState.getInt(STATE_PICKER_CUR));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
mPicker = new NumberPicker(getActivity());
|
mPicker = new NumberPicker(getActivity());
|
||||||
mPicker.setMinValue(1);
|
if (savedInstanceState != null) {
|
||||||
mPicker.setMaxValue(((PdfViewer)requireActivity()).mNumPages);
|
mPicker.setMinValue(savedInstanceState.getInt(STATE_PICKER_MIN));
|
||||||
mPicker.setValue(((PdfViewer)requireActivity()).mPage);
|
mPicker.setMaxValue(savedInstanceState.getInt(STATE_PICKER_MAX));
|
||||||
|
mPicker.setValue(savedInstanceState.getInt(STATE_PICKER_CUR));
|
||||||
|
} else {
|
||||||
|
mPicker.setMinValue(1);
|
||||||
|
mPicker.setMaxValue(((PdfViewer)requireActivity()).mNumPages);
|
||||||
|
mPicker.setValue(((PdfViewer)requireActivity()).mPage);
|
||||||
|
}
|
||||||
|
|
||||||
final FrameLayout layout = new FrameLayout(getActivity());
|
final FrameLayout layout = new FrameLayout(getActivity());
|
||||||
layout.addView(mPicker, new FrameLayout.LayoutParams(
|
layout.addView(mPicker, new FrameLayout.LayoutParams(
|
||||||
|
|
|
@ -1,17 +1,11 @@
|
||||||
buildscript {
|
buildscript {
|
||||||
repositories {
|
repositories {
|
||||||
// dependabot cannot handle google()
|
google()
|
||||||
maven {
|
mavenCentral()
|
||||||
url = uri("https://dl.google.com/dl/android/maven2")
|
|
||||||
}
|
|
||||||
// dependabot cannot handle mavenCentral()
|
|
||||||
maven {
|
|
||||||
url = uri("https://repo.maven.apache.org/maven2")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath("com.android.tools.build:gradle:7.3.0")
|
classpath("com.android.tools.build:gradle:7.4.0")
|
||||||
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.20")
|
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.22")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
@ -1,6 +1,7 @@
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionSha256Sum=f6b8596b10cce501591e92f229816aa4046424f3b24d771751b06779d58c8ec4
|
distributionSha256Sum=7ba68c54029790ab444b39d7e293d3236b2632631fb5f2e012bb28b4ff669e4b
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
|
||||||
|
networkTimeout=10000
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
|
|
@ -55,7 +55,7 @@
|
||||||
# Darwin, MinGW, and NonStop.
|
# Darwin, MinGW, and NonStop.
|
||||||
#
|
#
|
||||||
# (3) This script is generated from the Groovy template
|
# (3) This script is generated from the Groovy template
|
||||||
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
||||||
# within the Gradle project.
|
# within the Gradle project.
|
||||||
#
|
#
|
||||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
# You can find Gradle at https://github.com/gradle/gradle/.
|
||||||
|
@ -80,10 +80,10 @@ do
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
|
# This is normally unused
|
||||||
|
# shellcheck disable=SC2034
|
||||||
APP_NAME="Gradle"
|
|
||||||
APP_BASE_NAME=${0##*/}
|
APP_BASE_NAME=${0##*/}
|
||||||
|
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
|
||||||
|
|
||||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||||
|
@ -143,12 +143,16 @@ fi
|
||||||
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
||||||
case $MAX_FD in #(
|
case $MAX_FD in #(
|
||||||
max*)
|
max*)
|
||||||
|
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
|
||||||
|
# shellcheck disable=SC3045
|
||||||
MAX_FD=$( ulimit -H -n ) ||
|
MAX_FD=$( ulimit -H -n ) ||
|
||||||
warn "Could not query maximum file descriptor limit"
|
warn "Could not query maximum file descriptor limit"
|
||||||
esac
|
esac
|
||||||
case $MAX_FD in #(
|
case $MAX_FD in #(
|
||||||
'' | soft) :;; #(
|
'' | soft) :;; #(
|
||||||
*)
|
*)
|
||||||
|
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
|
||||||
|
# shellcheck disable=SC3045
|
||||||
ulimit -n "$MAX_FD" ||
|
ulimit -n "$MAX_FD" ||
|
||||||
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
||||||
esac
|
esac
|
||||||
|
|
|
@ -26,6 +26,7 @@ if "%OS%"=="Windows_NT" setlocal
|
||||||
|
|
||||||
set DIRNAME=%~dp0
|
set DIRNAME=%~dp0
|
||||||
if "%DIRNAME%"=="" set DIRNAME=.
|
if "%DIRNAME%"=="" set DIRNAME=.
|
||||||
|
@rem This is normally unused
|
||||||
set APP_BASE_NAME=%~n0
|
set APP_BASE_NAME=%~n0
|
||||||
set APP_HOME=%DIRNAME%
|
set APP_HOME=%DIRNAME%
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit cc3d3bf299ae11f8f72ae8d64cbf19b340f9a996
|
Subproject commit 5f07d5a4159bb99eee2f6143d1297f03b45bba58
|
Loading…
Reference in New Issue