Jatin Mehra commited on
Commit
b62e18b
·
1 Parent(s): fb88988

add android app files

Browse files
Files changed (38) hide show
  1. Android App/.gitignore +15 -0
  2. Android App/.idea/.gitignore +3 -0
  3. Android App/.idea/compiler.xml +6 -0
  4. Android App/.idea/deploymentTargetSelector.xml +21 -0
  5. Android App/.idea/gradle.xml +19 -0
  6. Android App/.idea/migrations.xml +10 -0
  7. Android App/.idea/misc.xml +10 -0
  8. Android App/.idea/other.xml +329 -0
  9. Android App/.idea/vcs.xml +6 -0
  10. Android App/app/.gitignore +1 -0
  11. Android App/app/build.gradle +40 -0
  12. Android App/app/proguard-rules.pro +21 -0
  13. Android App/app/release/baselineProfiles/0/app-release.dm +0 -0
  14. Android App/app/release/baselineProfiles/1/app-release.dm +0 -0
  15. Android App/app/release/output-metadata.json +37 -0
  16. Android App/app/src/androidTest/java/com/jatinmehra/pdfinsightpro/ExampleInstrumentedTest.java +26 -0
  17. Android App/app/src/main/AndroidManifest.xml +36 -0
  18. Android App/app/src/main/java/com/jatinmehra/pdfinsightpro/MainActivity.java +88 -0
  19. Android App/app/src/main/res/drawable/ic_launcher_background.xml +170 -0
  20. Android App/app/src/main/res/drawable/ic_launcher_foreground.xml +30 -0
  21. Android App/app/src/main/res/layout/activity_main.xml +18 -0
  22. Android App/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +6 -0
  23. Android App/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +6 -0
  24. Android App/app/src/main/res/values-night/themes.xml +16 -0
  25. Android App/app/src/main/res/values/colors.xml +10 -0
  26. Android App/app/src/main/res/values/strings.xml +3 -0
  27. Android App/app/src/main/res/values/themes.xml +16 -0
  28. Android App/app/src/main/res/xml/backup_rules.xml +13 -0
  29. Android App/app/src/main/res/xml/data_extraction_rules.xml +19 -0
  30. Android App/app/src/test/java/com/jatinmehra/pdfinsightpro/ExampleUnitTest.java +17 -0
  31. Android App/build.gradle +4 -0
  32. Android App/gradle.properties +22 -0
  33. Android App/gradle/libs.versions.toml +22 -0
  34. Android App/gradle/wrapper/gradle-wrapper.jar +0 -0
  35. Android App/gradle/wrapper/gradle-wrapper.properties +6 -0
  36. Android App/gradlew +185 -0
  37. Android App/gradlew.bat +89 -0
  38. Android App/settings.gradle +23 -0
Android App/.gitignore ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.iml
2
+ .gradle
3
+ /local.properties
4
+ /.idea/caches
5
+ /.idea/libraries
6
+ /.idea/modules.xml
7
+ /.idea/workspace.xml
8
+ /.idea/navEditor.xml
9
+ /.idea/assetWizardSettings.xml
10
+ .DS_Store
11
+ /build
12
+ /captures
13
+ .externalNativeBuild
14
+ .cxx
15
+ local.properties
Android App/.idea/.gitignore ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ # Default ignored files
2
+ /shelf/
3
+ /workspace.xml
Android App/.idea/compiler.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="CompilerConfiguration">
4
+ <bytecodeTargetLevel target="17" />
5
+ </component>
6
+ </project>
Android App/.idea/deploymentTargetSelector.xml ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="deploymentTargetSelector">
4
+ <selectionStates>
5
+ <SelectionState runConfigName="app">
6
+ <option name="selectionMode" value="DROPDOWN" />
7
+ <DropdownSelection timestamp="2024-11-06T18:12:39.367387Z">
8
+ <Target type="DEFAULT_BOOT">
9
+ <handle>
10
+ <DeviceId pluginId="PhysicalDevice" identifier="serial=f542e44" />
11
+ </handle>
12
+ </Target>
13
+ </DropdownSelection>
14
+ <DialogSelection />
15
+ </SelectionState>
16
+ <SelectionState runConfigName="MainActivity">
17
+ <option name="selectionMode" value="DROPDOWN" />
18
+ </SelectionState>
19
+ </selectionStates>
20
+ </component>
21
+ </project>
Android App/.idea/gradle.xml ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="GradleMigrationSettings" migrationVersion="1" />
4
+ <component name="GradleSettings">
5
+ <option name="linkedExternalProjectsSettings">
6
+ <GradleProjectSettings>
7
+ <option name="externalProjectPath" value="$PROJECT_DIR$" />
8
+ <option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
9
+ <option name="modules">
10
+ <set>
11
+ <option value="$PROJECT_DIR$" />
12
+ <option value="$PROJECT_DIR$/app" />
13
+ </set>
14
+ </option>
15
+ <option name="resolveExternalAnnotations" value="false" />
16
+ </GradleProjectSettings>
17
+ </option>
18
+ </component>
19
+ </project>
Android App/.idea/migrations.xml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectMigrations">
4
+ <option name="MigrateToGradleLocalJavaHome">
5
+ <set>
6
+ <option value="$PROJECT_DIR$" />
7
+ </set>
8
+ </option>
9
+ </component>
10
+ </project>
Android App/.idea/misc.xml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ExternalStorageConfigurationManager" enabled="true" />
4
+ <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
5
+ <output url="file://$PROJECT_DIR$/build/classes" />
6
+ </component>
7
+ <component name="ProjectType">
8
+ <option name="id" value="Android" />
9
+ </component>
10
+ </project>
Android App/.idea/other.xml ADDED
@@ -0,0 +1,329 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="direct_access_persist.xml">
4
+ <option name="deviceSelectionList">
5
+ <list>
6
+ <PersistentDeviceSelectionData>
7
+ <option name="api" value="27" />
8
+ <option name="brand" value="DOCOMO" />
9
+ <option name="codename" value="F01L" />
10
+ <option name="id" value="F01L" />
11
+ <option name="manufacturer" value="FUJITSU" />
12
+ <option name="name" value="F-01L" />
13
+ <option name="screenDensity" value="360" />
14
+ <option name="screenX" value="720" />
15
+ <option name="screenY" value="1280" />
16
+ </PersistentDeviceSelectionData>
17
+ <PersistentDeviceSelectionData>
18
+ <option name="api" value="28" />
19
+ <option name="brand" value="DOCOMO" />
20
+ <option name="codename" value="SH-01L" />
21
+ <option name="id" value="SH-01L" />
22
+ <option name="manufacturer" value="SHARP" />
23
+ <option name="name" value="AQUOS sense2 SH-01L" />
24
+ <option name="screenDensity" value="480" />
25
+ <option name="screenX" value="1080" />
26
+ <option name="screenY" value="2160" />
27
+ </PersistentDeviceSelectionData>
28
+ <PersistentDeviceSelectionData>
29
+ <option name="api" value="34" />
30
+ <option name="brand" value="Lenovo" />
31
+ <option name="codename" value="TB370FU" />
32
+ <option name="id" value="TB370FU" />
33
+ <option name="manufacturer" value="Lenovo" />
34
+ <option name="name" value="Tab P12" />
35
+ <option name="screenDensity" value="340" />
36
+ <option name="screenX" value="1840" />
37
+ <option name="screenY" value="2944" />
38
+ </PersistentDeviceSelectionData>
39
+ <PersistentDeviceSelectionData>
40
+ <option name="api" value="31" />
41
+ <option name="brand" value="samsung" />
42
+ <option name="codename" value="a51" />
43
+ <option name="id" value="a51" />
44
+ <option name="manufacturer" value="Samsung" />
45
+ <option name="name" value="Galaxy A51" />
46
+ <option name="screenDensity" value="420" />
47
+ <option name="screenX" value="1080" />
48
+ <option name="screenY" value="2400" />
49
+ </PersistentDeviceSelectionData>
50
+ <PersistentDeviceSelectionData>
51
+ <option name="api" value="34" />
52
+ <option name="brand" value="google" />
53
+ <option name="codename" value="akita" />
54
+ <option name="id" value="akita" />
55
+ <option name="manufacturer" value="Google" />
56
+ <option name="name" value="Pixel 8a" />
57
+ <option name="screenDensity" value="420" />
58
+ <option name="screenX" value="1080" />
59
+ <option name="screenY" value="2400" />
60
+ </PersistentDeviceSelectionData>
61
+ <PersistentDeviceSelectionData>
62
+ <option name="api" value="33" />
63
+ <option name="brand" value="samsung" />
64
+ <option name="codename" value="b0q" />
65
+ <option name="id" value="b0q" />
66
+ <option name="manufacturer" value="Samsung" />
67
+ <option name="name" value="Galaxy S22 Ultra" />
68
+ <option name="screenDensity" value="600" />
69
+ <option name="screenX" value="1440" />
70
+ <option name="screenY" value="3088" />
71
+ </PersistentDeviceSelectionData>
72
+ <PersistentDeviceSelectionData>
73
+ <option name="api" value="32" />
74
+ <option name="brand" value="google" />
75
+ <option name="codename" value="bluejay" />
76
+ <option name="id" value="bluejay" />
77
+ <option name="manufacturer" value="Google" />
78
+ <option name="name" value="Pixel 6a" />
79
+ <option name="screenDensity" value="420" />
80
+ <option name="screenX" value="1080" />
81
+ <option name="screenY" value="2400" />
82
+ </PersistentDeviceSelectionData>
83
+ <PersistentDeviceSelectionData>
84
+ <option name="api" value="34" />
85
+ <option name="brand" value="google" />
86
+ <option name="codename" value="caiman" />
87
+ <option name="id" value="caiman" />
88
+ <option name="manufacturer" value="Google" />
89
+ <option name="name" value="Pixel 9 Pro" />
90
+ <option name="screenDensity" value="360" />
91
+ <option name="screenX" value="960" />
92
+ <option name="screenY" value="2142" />
93
+ </PersistentDeviceSelectionData>
94
+ <PersistentDeviceSelectionData>
95
+ <option name="api" value="34" />
96
+ <option name="brand" value="google" />
97
+ <option name="codename" value="comet" />
98
+ <option name="id" value="comet" />
99
+ <option name="manufacturer" value="Google" />
100
+ <option name="name" value="Pixel 9 Pro Fold" />
101
+ <option name="screenDensity" value="390" />
102
+ <option name="screenX" value="2076" />
103
+ <option name="screenY" value="2152" />
104
+ </PersistentDeviceSelectionData>
105
+ <PersistentDeviceSelectionData>
106
+ <option name="api" value="29" />
107
+ <option name="brand" value="samsung" />
108
+ <option name="codename" value="crownqlteue" />
109
+ <option name="id" value="crownqlteue" />
110
+ <option name="manufacturer" value="Samsung" />
111
+ <option name="name" value="Galaxy Note9" />
112
+ <option name="screenDensity" value="420" />
113
+ <option name="screenX" value="2220" />
114
+ <option name="screenY" value="1080" />
115
+ </PersistentDeviceSelectionData>
116
+ <PersistentDeviceSelectionData>
117
+ <option name="api" value="34" />
118
+ <option name="brand" value="samsung" />
119
+ <option name="codename" value="dm3q" />
120
+ <option name="id" value="dm3q" />
121
+ <option name="manufacturer" value="Samsung" />
122
+ <option name="name" value="Galaxy S23 Ultra" />
123
+ <option name="screenDensity" value="600" />
124
+ <option name="screenX" value="1440" />
125
+ <option name="screenY" value="3088" />
126
+ </PersistentDeviceSelectionData>
127
+ <PersistentDeviceSelectionData>
128
+ <option name="api" value="34" />
129
+ <option name="brand" value="samsung" />
130
+ <option name="codename" value="e1q" />
131
+ <option name="id" value="e1q" />
132
+ <option name="manufacturer" value="Samsung" />
133
+ <option name="name" value="Galaxy S24" />
134
+ <option name="screenDensity" value="480" />
135
+ <option name="screenX" value="1080" />
136
+ <option name="screenY" value="2340" />
137
+ </PersistentDeviceSelectionData>
138
+ <PersistentDeviceSelectionData>
139
+ <option name="api" value="33" />
140
+ <option name="brand" value="google" />
141
+ <option name="codename" value="felix" />
142
+ <option name="id" value="felix" />
143
+ <option name="manufacturer" value="Google" />
144
+ <option name="name" value="Pixel Fold" />
145
+ <option name="screenDensity" value="420" />
146
+ <option name="screenX" value="2208" />
147
+ <option name="screenY" value="1840" />
148
+ </PersistentDeviceSelectionData>
149
+ <PersistentDeviceSelectionData>
150
+ <option name="api" value="34" />
151
+ <option name="brand" value="google" />
152
+ <option name="codename" value="felix" />
153
+ <option name="id" value="felix" />
154
+ <option name="manufacturer" value="Google" />
155
+ <option name="name" value="Pixel Fold" />
156
+ <option name="screenDensity" value="420" />
157
+ <option name="screenX" value="2208" />
158
+ <option name="screenY" value="1840" />
159
+ </PersistentDeviceSelectionData>
160
+ <PersistentDeviceSelectionData>
161
+ <option name="api" value="33" />
162
+ <option name="brand" value="google" />
163
+ <option name="codename" value="felix_camera" />
164
+ <option name="id" value="felix_camera" />
165
+ <option name="manufacturer" value="Google" />
166
+ <option name="name" value="Pixel Fold (Camera-enabled)" />
167
+ <option name="screenDensity" value="420" />
168
+ <option name="screenX" value="2208" />
169
+ <option name="screenY" value="1840" />
170
+ </PersistentDeviceSelectionData>
171
+ <PersistentDeviceSelectionData>
172
+ <option name="api" value="33" />
173
+ <option name="brand" value="samsung" />
174
+ <option name="codename" value="gts8uwifi" />
175
+ <option name="id" value="gts8uwifi" />
176
+ <option name="manufacturer" value="Samsung" />
177
+ <option name="name" value="Galaxy Tab S8 Ultra" />
178
+ <option name="screenDensity" value="320" />
179
+ <option name="screenX" value="1848" />
180
+ <option name="screenY" value="2960" />
181
+ </PersistentDeviceSelectionData>
182
+ <PersistentDeviceSelectionData>
183
+ <option name="api" value="34" />
184
+ <option name="brand" value="google" />
185
+ <option name="codename" value="husky" />
186
+ <option name="id" value="husky" />
187
+ <option name="manufacturer" value="Google" />
188
+ <option name="name" value="Pixel 8 Pro" />
189
+ <option name="screenDensity" value="390" />
190
+ <option name="screenX" value="1008" />
191
+ <option name="screenY" value="2244" />
192
+ </PersistentDeviceSelectionData>
193
+ <PersistentDeviceSelectionData>
194
+ <option name="api" value="30" />
195
+ <option name="brand" value="motorola" />
196
+ <option name="codename" value="java" />
197
+ <option name="id" value="java" />
198
+ <option name="manufacturer" value="Motorola" />
199
+ <option name="name" value="G20" />
200
+ <option name="screenDensity" value="280" />
201
+ <option name="screenX" value="720" />
202
+ <option name="screenY" value="1600" />
203
+ </PersistentDeviceSelectionData>
204
+ <PersistentDeviceSelectionData>
205
+ <option name="api" value="34" />
206
+ <option name="brand" value="google" />
207
+ <option name="codename" value="komodo" />
208
+ <option name="id" value="komodo" />
209
+ <option name="manufacturer" value="Google" />
210
+ <option name="name" value="Pixel 9 Pro XL" />
211
+ <option name="screenDensity" value="360" />
212
+ <option name="screenX" value="1008" />
213
+ <option name="screenY" value="2244" />
214
+ </PersistentDeviceSelectionData>
215
+ <PersistentDeviceSelectionData>
216
+ <option name="api" value="33" />
217
+ <option name="brand" value="google" />
218
+ <option name="codename" value="lynx" />
219
+ <option name="id" value="lynx" />
220
+ <option name="manufacturer" value="Google" />
221
+ <option name="name" value="Pixel 7a" />
222
+ <option name="screenDensity" value="420" />
223
+ <option name="screenX" value="1080" />
224
+ <option name="screenY" value="2400" />
225
+ </PersistentDeviceSelectionData>
226
+ <PersistentDeviceSelectionData>
227
+ <option name="api" value="31" />
228
+ <option name="brand" value="google" />
229
+ <option name="codename" value="oriole" />
230
+ <option name="id" value="oriole" />
231
+ <option name="manufacturer" value="Google" />
232
+ <option name="name" value="Pixel 6" />
233
+ <option name="screenDensity" value="420" />
234
+ <option name="screenX" value="1080" />
235
+ <option name="screenY" value="2400" />
236
+ </PersistentDeviceSelectionData>
237
+ <PersistentDeviceSelectionData>
238
+ <option name="api" value="33" />
239
+ <option name="brand" value="google" />
240
+ <option name="codename" value="panther" />
241
+ <option name="id" value="panther" />
242
+ <option name="manufacturer" value="Google" />
243
+ <option name="name" value="Pixel 7" />
244
+ <option name="screenDensity" value="420" />
245
+ <option name="screenX" value="1080" />
246
+ <option name="screenY" value="2400" />
247
+ </PersistentDeviceSelectionData>
248
+ <PersistentDeviceSelectionData>
249
+ <option name="api" value="34" />
250
+ <option name="brand" value="samsung" />
251
+ <option name="codename" value="q5q" />
252
+ <option name="id" value="q5q" />
253
+ <option name="manufacturer" value="Samsung" />
254
+ <option name="name" value="Galaxy Z Fold5" />
255
+ <option name="screenDensity" value="420" />
256
+ <option name="screenX" value="1812" />
257
+ <option name="screenY" value="2176" />
258
+ </PersistentDeviceSelectionData>
259
+ <PersistentDeviceSelectionData>
260
+ <option name="api" value="34" />
261
+ <option name="brand" value="samsung" />
262
+ <option name="codename" value="q6q" />
263
+ <option name="id" value="q6q" />
264
+ <option name="manufacturer" value="Samsung" />
265
+ <option name="name" value="SM-F956B" />
266
+ <option name="screenDensity" value="420" />
267
+ <option name="screenX" value="1856" />
268
+ <option name="screenY" value="2160" />
269
+ </PersistentDeviceSelectionData>
270
+ <PersistentDeviceSelectionData>
271
+ <option name="api" value="30" />
272
+ <option name="brand" value="google" />
273
+ <option name="codename" value="r11" />
274
+ <option name="id" value="r11" />
275
+ <option name="manufacturer" value="Google" />
276
+ <option name="name" value="Pixel Watch" />
277
+ <option name="screenDensity" value="320" />
278
+ <option name="screenX" value="384" />
279
+ <option name="screenY" value="384" />
280
+ <option name="type" value="WEAR_OS" />
281
+ </PersistentDeviceSelectionData>
282
+ <PersistentDeviceSelectionData>
283
+ <option name="api" value="30" />
284
+ <option name="brand" value="google" />
285
+ <option name="codename" value="redfin" />
286
+ <option name="id" value="redfin" />
287
+ <option name="manufacturer" value="Google" />
288
+ <option name="name" value="Pixel 5" />
289
+ <option name="screenDensity" value="440" />
290
+ <option name="screenX" value="1080" />
291
+ <option name="screenY" value="2340" />
292
+ </PersistentDeviceSelectionData>
293
+ <PersistentDeviceSelectionData>
294
+ <option name="api" value="34" />
295
+ <option name="brand" value="google" />
296
+ <option name="codename" value="shiba" />
297
+ <option name="id" value="shiba" />
298
+ <option name="manufacturer" value="Google" />
299
+ <option name="name" value="Pixel 8" />
300
+ <option name="screenDensity" value="420" />
301
+ <option name="screenX" value="1080" />
302
+ <option name="screenY" value="2400" />
303
+ </PersistentDeviceSelectionData>
304
+ <PersistentDeviceSelectionData>
305
+ <option name="api" value="33" />
306
+ <option name="brand" value="google" />
307
+ <option name="codename" value="tangorpro" />
308
+ <option name="id" value="tangorpro" />
309
+ <option name="manufacturer" value="Google" />
310
+ <option name="name" value="Pixel Tablet" />
311
+ <option name="screenDensity" value="320" />
312
+ <option name="screenX" value="1600" />
313
+ <option name="screenY" value="2560" />
314
+ </PersistentDeviceSelectionData>
315
+ <PersistentDeviceSelectionData>
316
+ <option name="api" value="34" />
317
+ <option name="brand" value="google" />
318
+ <option name="codename" value="tokay" />
319
+ <option name="id" value="tokay" />
320
+ <option name="manufacturer" value="Google" />
321
+ <option name="name" value="Pixel 9" />
322
+ <option name="screenDensity" value="420" />
323
+ <option name="screenX" value="1080" />
324
+ <option name="screenY" value="2424" />
325
+ </PersistentDeviceSelectionData>
326
+ </list>
327
+ </option>
328
+ </component>
329
+ </project>
Android App/.idea/vcs.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="$PROJECT_DIR$" vcs="Git" />
5
+ </component>
6
+ </project>
Android App/app/.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ /build
Android App/app/build.gradle ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ plugins {
2
+ alias(libs.plugins.android.application)
3
+ }
4
+
5
+ android {
6
+ namespace 'com.jatinmehra.pdfinsightpro'
7
+ compileSdk 34
8
+
9
+ defaultConfig {
10
+ applicationId "com.jatinmehra.pdfinsightpro"
11
+ minSdk 24
12
+ targetSdk 34
13
+ versionCode 1
14
+ versionName "1.0"
15
+
16
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
17
+ }
18
+
19
+ buildTypes {
20
+ release {
21
+ minifyEnabled false
22
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
23
+ }
24
+ }
25
+ compileOptions {
26
+ sourceCompatibility JavaVersion.VERSION_1_8
27
+ targetCompatibility JavaVersion.VERSION_1_8
28
+ }
29
+ }
30
+
31
+ dependencies {
32
+
33
+ implementation libs.appcompat
34
+ implementation libs.material
35
+ implementation libs.activity
36
+ implementation libs.constraintlayout
37
+ testImplementation libs.junit
38
+ androidTestImplementation libs.ext.junit
39
+ androidTestImplementation libs.espresso.core
40
+ }
Android App/app/proguard-rules.pro ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Add project specific ProGuard rules here.
2
+ # You can control the set of applied configuration files using the
3
+ # proguardFiles setting in build.gradle.
4
+ #
5
+ # For more details, see
6
+ # http://developer.android.com/guide/developing/tools/proguard.html
7
+
8
+ # If your project uses WebView with JS, uncomment the following
9
+ # and specify the fully qualified class name to the JavaScript interface
10
+ # class:
11
+ #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12
+ # public *;
13
+ #}
14
+
15
+ # Uncomment this to preserve the line number information for
16
+ # debugging stack traces.
17
+ #-keepattributes SourceFile,LineNumberTable
18
+
19
+ # If you keep the line number information, uncomment this to
20
+ # hide the original source file name.
21
+ #-renamesourcefileattribute SourceFile
Android App/app/release/baselineProfiles/0/app-release.dm ADDED
Binary file (2.83 kB). View file
 
Android App/app/release/baselineProfiles/1/app-release.dm ADDED
Binary file (2.76 kB). View file
 
Android App/app/release/output-metadata.json ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "version": 3,
3
+ "artifactType": {
4
+ "type": "APK",
5
+ "kind": "Directory"
6
+ },
7
+ "applicationId": "com.jatinmehra.pdfinsightpro",
8
+ "variantName": "release",
9
+ "elements": [
10
+ {
11
+ "type": "SINGLE",
12
+ "filters": [],
13
+ "attributes": [],
14
+ "versionCode": 1,
15
+ "versionName": "1.0",
16
+ "outputFile": "app-release.apk"
17
+ }
18
+ ],
19
+ "elementType": "File",
20
+ "baselineProfiles": [
21
+ {
22
+ "minApi": 28,
23
+ "maxApi": 30,
24
+ "baselineProfiles": [
25
+ "baselineProfiles/1/app-release.dm"
26
+ ]
27
+ },
28
+ {
29
+ "minApi": 31,
30
+ "maxApi": 2147483647,
31
+ "baselineProfiles": [
32
+ "baselineProfiles/0/app-release.dm"
33
+ ]
34
+ }
35
+ ],
36
+ "minSdkVersionForDexing": 24
37
+ }
Android App/app/src/androidTest/java/com/jatinmehra/pdfinsightpro/ExampleInstrumentedTest.java ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ package com.jatinmehra.pdfinsightpro;
2
+
3
+ import android.content.Context;
4
+
5
+ import androidx.test.platform.app.InstrumentationRegistry;
6
+ import androidx.test.ext.junit.runners.AndroidJUnit4;
7
+
8
+ import org.junit.Test;
9
+ import org.junit.runner.RunWith;
10
+
11
+ import static org.junit.Assert.*;
12
+
13
+ /**
14
+ * Instrumented test, which will execute on an Android device.
15
+ *
16
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
17
+ */
18
+ @RunWith(AndroidJUnit4.class)
19
+ public class ExampleInstrumentedTest {
20
+ @Test
21
+ public void useAppContext() {
22
+ // Context of the app under test.
23
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
24
+ assertEquals("com.jatinmehra.pdfinsightpro", appContext.getPackageName());
25
+ }
26
+ }
Android App/app/src/main/AndroidManifest.xml ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
+ xmlns:tools="http://schemas.android.com/tools">
4
+
5
+ <!-- Internet Permission -->
6
+ <uses-permission android:name="android.permission.INTERNET"/>
7
+
8
+ <!-- Storage Permissions -->
9
+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
10
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
11
+ android:maxSdkVersion="28"/>
12
+
13
+ <application
14
+ android:usesCleartextTraffic="true"
15
+ android:allowBackup="true"
16
+ android:dataExtractionRules="@xml/data_extraction_rules"
17
+ android:fullBackupContent="@xml/backup_rules"
18
+ android:icon="@drawable/ic_launcher_background"
19
+ android:label="@string/app_name"
20
+ android:roundIcon="@mipmap/ic_launcher_round"
21
+ android:supportsRtl="true"
22
+ android:theme="@style/Theme.PDFInsightPro"
23
+ tools:targetApi="31">
24
+
25
+ <activity
26
+ android:name=".MainActivity"
27
+ android:exported="true">
28
+ <intent-filter>
29
+ <action android:name="android.intent.action.MAIN" />
30
+ <category android:name="android.intent.category.LAUNCHER" />
31
+ </intent-filter>
32
+ </activity>
33
+
34
+ </application>
35
+
36
+ </manifest>
Android App/app/src/main/java/com/jatinmehra/pdfinsightpro/MainActivity.java ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ package com.jatinmehra.pdfinsightpro;
2
+
3
+ import android.annotation.SuppressLint;
4
+ import android.content.Intent;
5
+ import android.net.Uri;
6
+ import android.os.Bundle;
7
+ import android.webkit.ValueCallback;
8
+ import android.webkit.WebChromeClient;
9
+ import android.webkit.WebView;
10
+ import android.webkit.WebViewClient;
11
+ import android.widget.Toast;
12
+
13
+ import androidx.activity.result.ActivityResultLauncher;
14
+ import androidx.activity.result.contract.ActivityResultContracts;
15
+ import androidx.appcompat.app.AppCompatActivity;
16
+
17
+ public class MainActivity extends AppCompatActivity {
18
+
19
+ private WebView myweb;
20
+ private ValueCallback<Uri[]> filePathCallback;
21
+
22
+ // File chooser launcher
23
+ private final ActivityResultLauncher<Intent> fileChooserLauncher = registerForActivityResult(
24
+ new ActivityResultContracts.StartActivityForResult(), result -> {
25
+ if (filePathCallback != null) {
26
+ Uri[] resultUris = null;
27
+ if (result.getResultCode() == RESULT_OK && result.getData() != null) {
28
+ resultUris = new Uri[]{result.getData().getData()};
29
+ }
30
+ filePathCallback.onReceiveValue(resultUris);
31
+ filePathCallback = null;
32
+ }
33
+ }
34
+ );
35
+
36
+ @SuppressLint("SetJavaScriptEnabled")
37
+ @Override
38
+ protected void onCreate(Bundle savedInstanceState) {
39
+ super.onCreate(savedInstanceState);
40
+ setContentView(R.layout.activity_main);
41
+
42
+ // Initialize WebView
43
+ myweb = findViewById(R.id.myweb);
44
+ myweb.getSettings().setJavaScriptEnabled(true);
45
+
46
+ // Set WebViewClient to handle all URL navigation
47
+ myweb.setWebViewClient(new WebViewClient() {
48
+ @Override
49
+ public boolean shouldOverrideUrlLoading(WebView view, String url) {
50
+ // Handle mailto links
51
+ if (url.startsWith("mailto:")) {
52
+ Intent intent = new Intent(Intent.ACTION_SENDTO);
53
+ intent.setData(Uri.parse(url)); // Open the default email app
54
+ startActivity(intent);
55
+ return true;
56
+ }
57
+ return super.shouldOverrideUrlLoading(view, url);
58
+ }
59
+ });
60
+
61
+ // Set WebChromeClient to handle file chooser requests
62
+ myweb.setWebChromeClient(new WebChromeClient() {
63
+ @Override
64
+ public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
65
+ // Store the callback and open the file picker
66
+ MainActivity.this.filePathCallback = filePathCallback;
67
+ Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
68
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
69
+ intent.setType("application/pdf"); // Ensure PDF files are picked
70
+ fileChooserLauncher.launch(intent);
71
+ return true;
72
+ }
73
+ });
74
+
75
+ // Load your Streamlit app URL
76
+ myweb.loadUrl("https://jatinmehra-pdf-insight-pro.hf.space");
77
+ }
78
+
79
+ @Override
80
+ protected void onDestroy() {
81
+ super.onDestroy();
82
+ // Clean up the filePathCallback to avoid memory leaks
83
+ if (filePathCallback != null) {
84
+ filePathCallback.onReceiveValue(null);
85
+ filePathCallback = null;
86
+ }
87
+ }
88
+ }
Android App/app/src/main/res/drawable/ic_launcher_background.xml ADDED
@@ -0,0 +1,170 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <vector xmlns:android="http://schemas.android.com/apk/res/android"
3
+ android:width="108dp"
4
+ android:height="108dp"
5
+ android:viewportWidth="108"
6
+ android:viewportHeight="108">
7
+ <path
8
+ android:fillColor="#3DDC84"
9
+ android:pathData="M0,0h108v108h-108z" />
10
+ <path
11
+ android:fillColor="#00000000"
12
+ android:pathData="M9,0L9,108"
13
+ android:strokeWidth="0.8"
14
+ android:strokeColor="#33FFFFFF" />
15
+ <path
16
+ android:fillColor="#00000000"
17
+ android:pathData="M19,0L19,108"
18
+ android:strokeWidth="0.8"
19
+ android:strokeColor="#33FFFFFF" />
20
+ <path
21
+ android:fillColor="#00000000"
22
+ android:pathData="M29,0L29,108"
23
+ android:strokeWidth="0.8"
24
+ android:strokeColor="#33FFFFFF" />
25
+ <path
26
+ android:fillColor="#00000000"
27
+ android:pathData="M39,0L39,108"
28
+ android:strokeWidth="0.8"
29
+ android:strokeColor="#33FFFFFF" />
30
+ <path
31
+ android:fillColor="#00000000"
32
+ android:pathData="M49,0L49,108"
33
+ android:strokeWidth="0.8"
34
+ android:strokeColor="#33FFFFFF" />
35
+ <path
36
+ android:fillColor="#00000000"
37
+ android:pathData="M59,0L59,108"
38
+ android:strokeWidth="0.8"
39
+ android:strokeColor="#33FFFFFF" />
40
+ <path
41
+ android:fillColor="#00000000"
42
+ android:pathData="M69,0L69,108"
43
+ android:strokeWidth="0.8"
44
+ android:strokeColor="#33FFFFFF" />
45
+ <path
46
+ android:fillColor="#00000000"
47
+ android:pathData="M79,0L79,108"
48
+ android:strokeWidth="0.8"
49
+ android:strokeColor="#33FFFFFF" />
50
+ <path
51
+ android:fillColor="#00000000"
52
+ android:pathData="M89,0L89,108"
53
+ android:strokeWidth="0.8"
54
+ android:strokeColor="#33FFFFFF" />
55
+ <path
56
+ android:fillColor="#00000000"
57
+ android:pathData="M99,0L99,108"
58
+ android:strokeWidth="0.8"
59
+ android:strokeColor="#33FFFFFF" />
60
+ <path
61
+ android:fillColor="#00000000"
62
+ android:pathData="M0,9L108,9"
63
+ android:strokeWidth="0.8"
64
+ android:strokeColor="#33FFFFFF" />
65
+ <path
66
+ android:fillColor="#00000000"
67
+ android:pathData="M0,19L108,19"
68
+ android:strokeWidth="0.8"
69
+ android:strokeColor="#33FFFFFF" />
70
+ <path
71
+ android:fillColor="#00000000"
72
+ android:pathData="M0,29L108,29"
73
+ android:strokeWidth="0.8"
74
+ android:strokeColor="#33FFFFFF" />
75
+ <path
76
+ android:fillColor="#00000000"
77
+ android:pathData="M0,39L108,39"
78
+ android:strokeWidth="0.8"
79
+ android:strokeColor="#33FFFFFF" />
80
+ <path
81
+ android:fillColor="#00000000"
82
+ android:pathData="M0,49L108,49"
83
+ android:strokeWidth="0.8"
84
+ android:strokeColor="#33FFFFFF" />
85
+ <path
86
+ android:fillColor="#00000000"
87
+ android:pathData="M0,59L108,59"
88
+ android:strokeWidth="0.8"
89
+ android:strokeColor="#33FFFFFF" />
90
+ <path
91
+ android:fillColor="#00000000"
92
+ android:pathData="M0,69L108,69"
93
+ android:strokeWidth="0.8"
94
+ android:strokeColor="#33FFFFFF" />
95
+ <path
96
+ android:fillColor="#00000000"
97
+ android:pathData="M0,79L108,79"
98
+ android:strokeWidth="0.8"
99
+ android:strokeColor="#33FFFFFF" />
100
+ <path
101
+ android:fillColor="#00000000"
102
+ android:pathData="M0,89L108,89"
103
+ android:strokeWidth="0.8"
104
+ android:strokeColor="#33FFFFFF" />
105
+ <path
106
+ android:fillColor="#00000000"
107
+ android:pathData="M0,99L108,99"
108
+ android:strokeWidth="0.8"
109
+ android:strokeColor="#33FFFFFF" />
110
+ <path
111
+ android:fillColor="#00000000"
112
+ android:pathData="M19,29L89,29"
113
+ android:strokeWidth="0.8"
114
+ android:strokeColor="#33FFFFFF" />
115
+ <path
116
+ android:fillColor="#00000000"
117
+ android:pathData="M19,39L89,39"
118
+ android:strokeWidth="0.8"
119
+ android:strokeColor="#33FFFFFF" />
120
+ <path
121
+ android:fillColor="#00000000"
122
+ android:pathData="M19,49L89,49"
123
+ android:strokeWidth="0.8"
124
+ android:strokeColor="#33FFFFFF" />
125
+ <path
126
+ android:fillColor="#00000000"
127
+ android:pathData="M19,59L89,59"
128
+ android:strokeWidth="0.8"
129
+ android:strokeColor="#33FFFFFF" />
130
+ <path
131
+ android:fillColor="#00000000"
132
+ android:pathData="M19,69L89,69"
133
+ android:strokeWidth="0.8"
134
+ android:strokeColor="#33FFFFFF" />
135
+ <path
136
+ android:fillColor="#00000000"
137
+ android:pathData="M19,79L89,79"
138
+ android:strokeWidth="0.8"
139
+ android:strokeColor="#33FFFFFF" />
140
+ <path
141
+ android:fillColor="#00000000"
142
+ android:pathData="M29,19L29,89"
143
+ android:strokeWidth="0.8"
144
+ android:strokeColor="#33FFFFFF" />
145
+ <path
146
+ android:fillColor="#00000000"
147
+ android:pathData="M39,19L39,89"
148
+ android:strokeWidth="0.8"
149
+ android:strokeColor="#33FFFFFF" />
150
+ <path
151
+ android:fillColor="#00000000"
152
+ android:pathData="M49,19L49,89"
153
+ android:strokeWidth="0.8"
154
+ android:strokeColor="#33FFFFFF" />
155
+ <path
156
+ android:fillColor="#00000000"
157
+ android:pathData="M59,19L59,89"
158
+ android:strokeWidth="0.8"
159
+ android:strokeColor="#33FFFFFF" />
160
+ <path
161
+ android:fillColor="#00000000"
162
+ android:pathData="M69,19L69,89"
163
+ android:strokeWidth="0.8"
164
+ android:strokeColor="#33FFFFFF" />
165
+ <path
166
+ android:fillColor="#00000000"
167
+ android:pathData="M79,19L79,89"
168
+ android:strokeWidth="0.8"
169
+ android:strokeColor="#33FFFFFF" />
170
+ </vector>
Android App/app/src/main/res/drawable/ic_launcher_foreground.xml ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <vector xmlns:android="http://schemas.android.com/apk/res/android"
2
+ xmlns:aapt="http://schemas.android.com/aapt"
3
+ android:width="108dp"
4
+ android:height="108dp"
5
+ android:viewportWidth="108"
6
+ android:viewportHeight="108">
7
+ <path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
8
+ <aapt:attr name="android:fillColor">
9
+ <gradient
10
+ android:endX="85.84757"
11
+ android:endY="92.4963"
12
+ android:startX="42.9492"
13
+ android:startY="49.59793"
14
+ android:type="linear">
15
+ <item
16
+ android:color="#44000000"
17
+ android:offset="0.0" />
18
+ <item
19
+ android:color="#00000000"
20
+ android:offset="1.0" />
21
+ </gradient>
22
+ </aapt:attr>
23
+ </path>
24
+ <path
25
+ android:fillColor="#FFFFFF"
26
+ android:fillType="nonZero"
27
+ android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
28
+ android:strokeWidth="1"
29
+ android:strokeColor="#00000000" />
30
+ </vector>
Android App/app/src/main/res/layout/activity_main.xml ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3
+ xmlns:app="http://schemas.android.com/apk/res-auto"
4
+ xmlns:tools="http://schemas.android.com/tools"
5
+ android:id="@+id/main"
6
+ android:layout_width="match_parent"
7
+ android:layout_height="match_parent"
8
+ tools:context=".MainActivity">
9
+
10
+ <WebView
11
+ android:id="@+id/myweb"
12
+ android:layout_width="match_parent"
13
+ android:layout_height="match_parent"
14
+ app:layout_constraintBottom_toBottomOf="parent"
15
+ app:layout_constraintEnd_toEndOf="parent"
16
+ app:layout_constraintStart_toStartOf="parent"
17
+ app:layout_constraintTop_toTopOf="parent" />
18
+ </androidx.constraintlayout.widget.ConstraintLayout>
Android App/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3
+ <background android:drawable="@drawable/ic_launcher_background" />
4
+ <foreground android:drawable="@drawable/ic_launcher_foreground" />
5
+ <monochrome android:drawable="@drawable/ic_launcher_foreground" />
6
+ </adaptive-icon>
Android App/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3
+ <background android:drawable="@drawable/ic_launcher_background" />
4
+ <foreground android:drawable="@drawable/ic_launcher_foreground" />
5
+ <monochrome android:drawable="@drawable/ic_launcher_foreground" />
6
+ </adaptive-icon>
Android App/app/src/main/res/values-night/themes.xml ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <resources xmlns:tools="http://schemas.android.com/tools">
2
+ <!-- Base application theme. -->
3
+ <style name="Theme.PDFInsightPro" parent="Theme.MaterialComponents.DayNight.NoActionBar">
4
+ <!-- Primary brand color. -->
5
+ <item name="colorPrimary">@color/purple_200</item>
6
+ <item name="colorPrimaryVariant">@color/purple_700</item>
7
+ <item name="colorOnPrimary">@color/black</item>
8
+ <!-- Secondary brand color. -->
9
+ <item name="colorSecondary">@color/teal_200</item>
10
+ <item name="colorSecondaryVariant">@color/teal_200</item>
11
+ <item name="colorOnSecondary">@color/black</item>
12
+ <!-- Status bar color. -->
13
+ <item name="android:statusBarColor">?attr/colorOnPrimary</item>
14
+ <!-- Customize your theme here. -->
15
+ </style>
16
+ </resources>
Android App/app/src/main/res/values/colors.xml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <resources>
3
+ <color name="purple_200">#FFBB86FC</color>
4
+ <color name="purple_500">#FF6200EE</color>
5
+ <color name="purple_700">#FF3700B3</color>
6
+ <color name="teal_200">#FF03DAC5</color>
7
+ <color name="teal_700">#FF018786</color>
8
+ <color name="black">#FF000000</color>
9
+ <color name="white">#FFFFFFFF</color>
10
+ </resources>
Android App/app/src/main/res/values/strings.xml ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ <resources>
2
+ <string name="app_name">PDFInsightPro</string>
3
+ </resources>
Android App/app/src/main/res/values/themes.xml ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <resources xmlns:tools="http://schemas.android.com/tools">
2
+ <!-- Base application theme. -->
3
+ <style name="Theme.PDFInsightPro" parent="Theme.MaterialComponents.DayNight.NoActionBar">
4
+ <!-- Primary brand color. -->
5
+ <item name="colorPrimary">@color/purple_500</item>
6
+ <item name="colorPrimaryVariant">@color/purple_700</item>
7
+ <item name="colorOnPrimary">@color/white</item>
8
+ <!-- Secondary brand color. -->
9
+ <item name="colorSecondary">@color/teal_200</item>
10
+ <item name="colorSecondaryVariant">@color/teal_700</item>
11
+ <item name="colorOnSecondary">@color/black</item>
12
+ <!-- Status bar color. -->
13
+ <item name="android:statusBarColor">?attr/colorOnPrimary</item>
14
+ <!-- Customize your theme here. -->
15
+ </style>
16
+ </resources>
Android App/app/src/main/res/xml/backup_rules.xml ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?><!--
2
+ Sample backup rules file; uncomment and customize as necessary.
3
+ See https://developer.android.com/guide/topics/data/autobackup
4
+ for details.
5
+ Note: This file is ignored for devices older that API 31
6
+ See https://developer.android.com/about/versions/12/backup-restore
7
+ -->
8
+ <full-backup-content>
9
+ <!--
10
+ <include domain="sharedpref" path="."/>
11
+ <exclude domain="sharedpref" path="device.xml"/>
12
+ -->
13
+ </full-backup-content>
Android App/app/src/main/res/xml/data_extraction_rules.xml ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?><!--
2
+ Sample data extraction rules file; uncomment and customize as necessary.
3
+ See https://developer.android.com/about/versions/12/backup-restore#xml-changes
4
+ for details.
5
+ -->
6
+ <data-extraction-rules>
7
+ <cloud-backup>
8
+ <!-- TODO: Use <include> and <exclude> to control what is backed up.
9
+ <include .../>
10
+ <exclude .../>
11
+ -->
12
+ </cloud-backup>
13
+ <!--
14
+ <device-transfer>
15
+ <include .../>
16
+ <exclude .../>
17
+ </device-transfer>
18
+ -->
19
+ </data-extraction-rules>
Android App/app/src/test/java/com/jatinmehra/pdfinsightpro/ExampleUnitTest.java ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ package com.jatinmehra.pdfinsightpro;
2
+
3
+ import org.junit.Test;
4
+
5
+ import static org.junit.Assert.*;
6
+
7
+ /**
8
+ * Example local unit test, which will execute on the development machine (host).
9
+ *
10
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
11
+ */
12
+ public class ExampleUnitTest {
13
+ @Test
14
+ public void addition_isCorrect() {
15
+ assertEquals(4, 2 + 2);
16
+ }
17
+ }
Android App/build.gradle ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ // Top-level build file where you can add configuration options common to all sub-projects/modules.
2
+ plugins {
3
+ alias(libs.plugins.android.application) apply false
4
+ }
Android App/gradle.properties ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Project-wide Gradle settings.
2
+ # IDE (e.g. Android Studio) users:
3
+ # Gradle settings configured through the IDE *will override*
4
+ # any settings specified in this file.
5
+ # For more details on how to configure your build environment visit
6
+ # http://www.gradle.org/docs/current/userguide/build_environment.html
7
+ # Specifies the JVM arguments used for the daemon process.
8
+ # The setting is particularly useful for tweaking memory settings.
9
+ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
10
+ # When configured, Gradle will run in incubating parallel mode.
11
+ # This option should only be used with decoupled projects. For more details, visit
12
+ # https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects
13
+ # org.gradle.parallel=true
14
+ # AndroidX package structure to make it clearer which packages are bundled with the
15
+ # Android operating system, and which are packaged with your app's APK
16
+ # https://developer.android.com/topic/libraries/support-library/androidx-rn
17
+ android.useAndroidX=true
18
+ # Enables namespacing of each library's R class so that its R class includes only the
19
+ # resources declared in the library itself and none from the library's dependencies,
20
+ # thereby reducing the size of the R class for that library
21
+ android.nonTransitiveRClass=true
22
+ org.gradle.configuration-cache=true
Android App/gradle/libs.versions.toml ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [versions]
2
+ agp = "8.5.2"
3
+ junit = "4.13.2"
4
+ junitVersion = "1.2.1"
5
+ espressoCore = "3.6.1"
6
+ appcompat = "1.7.0"
7
+ material = "1.12.0"
8
+ activity = "1.9.3"
9
+ constraintlayout = "2.1.4"
10
+
11
+ [libraries]
12
+ junit = { group = "junit", name = "junit", version.ref = "junit" }
13
+ ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
14
+ espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
15
+ appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
16
+ material = { group = "com.google.android.material", name = "material", version.ref = "material" }
17
+ activity = { group = "androidx.activity", name = "activity", version.ref = "activity" }
18
+ constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" }
19
+
20
+ [plugins]
21
+ android-application = { id = "com.android.application", version.ref = "agp" }
22
+
Android App/gradle/wrapper/gradle-wrapper.jar ADDED
Binary file (59.2 kB). View file
 
Android App/gradle/wrapper/gradle-wrapper.properties ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ #Wed Nov 06 23:19:05 IST 2024
2
+ distributionBase=GRADLE_USER_HOME
3
+ distributionPath=wrapper/dists
4
+ distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
5
+ zipStoreBase=GRADLE_USER_HOME
6
+ zipStorePath=wrapper/dists
Android App/gradlew ADDED
@@ -0,0 +1,185 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env sh
2
+
3
+ #
4
+ # Copyright 2015 the original author or authors.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # https://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ ##############################################################################
20
+ ##
21
+ ## Gradle start up script for UN*X
22
+ ##
23
+ ##############################################################################
24
+
25
+ # Attempt to set APP_HOME
26
+ # Resolve links: $0 may be a link
27
+ PRG="$0"
28
+ # Need this for relative symlinks.
29
+ while [ -h "$PRG" ] ; do
30
+ ls=`ls -ld "$PRG"`
31
+ link=`expr "$ls" : '.*-> \(.*\)$'`
32
+ if expr "$link" : '/.*' > /dev/null; then
33
+ PRG="$link"
34
+ else
35
+ PRG=`dirname "$PRG"`"/$link"
36
+ fi
37
+ done
38
+ SAVED="`pwd`"
39
+ cd "`dirname \"$PRG\"`/" >/dev/null
40
+ APP_HOME="`pwd -P`"
41
+ cd "$SAVED" >/dev/null
42
+
43
+ APP_NAME="Gradle"
44
+ APP_BASE_NAME=`basename "$0"`
45
+
46
+ # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
47
+ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
48
+
49
+ # Use the maximum available, or set MAX_FD != -1 to use that value.
50
+ MAX_FD="maximum"
51
+
52
+ warn () {
53
+ echo "$*"
54
+ }
55
+
56
+ die () {
57
+ echo
58
+ echo "$*"
59
+ echo
60
+ exit 1
61
+ }
62
+
63
+ # OS specific support (must be 'true' or 'false').
64
+ cygwin=false
65
+ msys=false
66
+ darwin=false
67
+ nonstop=false
68
+ case "`uname`" in
69
+ CYGWIN* )
70
+ cygwin=true
71
+ ;;
72
+ Darwin* )
73
+ darwin=true
74
+ ;;
75
+ MINGW* )
76
+ msys=true
77
+ ;;
78
+ NONSTOP* )
79
+ nonstop=true
80
+ ;;
81
+ esac
82
+
83
+ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
84
+
85
+
86
+ # Determine the Java command to use to start the JVM.
87
+ if [ -n "$JAVA_HOME" ] ; then
88
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
89
+ # IBM's JDK on AIX uses strange locations for the executables
90
+ JAVACMD="$JAVA_HOME/jre/sh/java"
91
+ else
92
+ JAVACMD="$JAVA_HOME/bin/java"
93
+ fi
94
+ if [ ! -x "$JAVACMD" ] ; then
95
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
96
+
97
+ Please set the JAVA_HOME variable in your environment to match the
98
+ location of your Java installation."
99
+ fi
100
+ else
101
+ JAVACMD="java"
102
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
103
+
104
+ Please set the JAVA_HOME variable in your environment to match the
105
+ location of your Java installation."
106
+ fi
107
+
108
+ # Increase the maximum file descriptors if we can.
109
+ if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
110
+ MAX_FD_LIMIT=`ulimit -H -n`
111
+ if [ $? -eq 0 ] ; then
112
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
113
+ MAX_FD="$MAX_FD_LIMIT"
114
+ fi
115
+ ulimit -n $MAX_FD
116
+ if [ $? -ne 0 ] ; then
117
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
118
+ fi
119
+ else
120
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
121
+ fi
122
+ fi
123
+
124
+ # For Darwin, add options to specify how the application appears in the dock
125
+ if $darwin; then
126
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
127
+ fi
128
+
129
+ # For Cygwin or MSYS, switch paths to Windows format before running java
130
+ if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
131
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
132
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
133
+
134
+ JAVACMD=`cygpath --unix "$JAVACMD"`
135
+
136
+ # We build the pattern for arguments to be converted via cygpath
137
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
138
+ SEP=""
139
+ for dir in $ROOTDIRSRAW ; do
140
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
141
+ SEP="|"
142
+ done
143
+ OURCYGPATTERN="(^($ROOTDIRS))"
144
+ # Add a user-defined pattern to the cygpath arguments
145
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
146
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
147
+ fi
148
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
149
+ i=0
150
+ for arg in "$@" ; do
151
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
152
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
153
+
154
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
155
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
156
+ else
157
+ eval `echo args$i`="\"$arg\""
158
+ fi
159
+ i=`expr $i + 1`
160
+ done
161
+ case $i in
162
+ 0) set -- ;;
163
+ 1) set -- "$args0" ;;
164
+ 2) set -- "$args0" "$args1" ;;
165
+ 3) set -- "$args0" "$args1" "$args2" ;;
166
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
167
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
168
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
169
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
170
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
171
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
172
+ esac
173
+ fi
174
+
175
+ # Escape application args
176
+ save () {
177
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
178
+ echo " "
179
+ }
180
+ APP_ARGS=`save "$@"`
181
+
182
+ # Collect all arguments for the java command, following the shell quoting and substitution rules
183
+ eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
184
+
185
+ exec "$JAVACMD" "$@"
Android App/gradlew.bat ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @rem
2
+ @rem Copyright 2015 the original author or authors.
3
+ @rem
4
+ @rem Licensed under the Apache License, Version 2.0 (the "License");
5
+ @rem you may not use this file except in compliance with the License.
6
+ @rem You may obtain a copy of the License at
7
+ @rem
8
+ @rem https://www.apache.org/licenses/LICENSE-2.0
9
+ @rem
10
+ @rem Unless required by applicable law or agreed to in writing, software
11
+ @rem distributed under the License is distributed on an "AS IS" BASIS,
12
+ @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ @rem See the License for the specific language governing permissions and
14
+ @rem limitations under the License.
15
+ @rem
16
+
17
+ @if "%DEBUG%" == "" @echo off
18
+ @rem ##########################################################################
19
+ @rem
20
+ @rem Gradle startup script for Windows
21
+ @rem
22
+ @rem ##########################################################################
23
+
24
+ @rem Set local scope for the variables with windows NT shell
25
+ if "%OS%"=="Windows_NT" setlocal
26
+
27
+ set DIRNAME=%~dp0
28
+ if "%DIRNAME%" == "" set DIRNAME=.
29
+ set APP_BASE_NAME=%~n0
30
+ set APP_HOME=%DIRNAME%
31
+
32
+ @rem Resolve any "." and ".." in APP_HOME to make it shorter.
33
+ for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
34
+
35
+ @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
36
+ set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
37
+
38
+ @rem Find java.exe
39
+ if defined JAVA_HOME goto findJavaFromJavaHome
40
+
41
+ set JAVA_EXE=java.exe
42
+ %JAVA_EXE% -version >NUL 2>&1
43
+ if "%ERRORLEVEL%" == "0" goto execute
44
+
45
+ echo.
46
+ echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
47
+ echo.
48
+ echo Please set the JAVA_HOME variable in your environment to match the
49
+ echo location of your Java installation.
50
+
51
+ goto fail
52
+
53
+ :findJavaFromJavaHome
54
+ set JAVA_HOME=%JAVA_HOME:"=%
55
+ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
56
+
57
+ if exist "%JAVA_EXE%" goto execute
58
+
59
+ echo.
60
+ echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
61
+ echo.
62
+ echo Please set the JAVA_HOME variable in your environment to match the
63
+ echo location of your Java installation.
64
+
65
+ goto fail
66
+
67
+ :execute
68
+ @rem Setup the command line
69
+
70
+ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
71
+
72
+
73
+ @rem Execute Gradle
74
+ "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
75
+
76
+ :end
77
+ @rem End local scope for the variables with windows NT shell
78
+ if "%ERRORLEVEL%"=="0" goto mainEnd
79
+
80
+ :fail
81
+ rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
82
+ rem the _cmd.exe /c_ return code!
83
+ if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
84
+ exit /b 1
85
+
86
+ :mainEnd
87
+ if "%OS%"=="Windows_NT" endlocal
88
+
89
+ :omega
Android App/settings.gradle ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ pluginManagement {
2
+ repositories {
3
+ google {
4
+ content {
5
+ includeGroupByRegex("com\\.android.*")
6
+ includeGroupByRegex("com\\.google.*")
7
+ includeGroupByRegex("androidx.*")
8
+ }
9
+ }
10
+ mavenCentral()
11
+ gradlePluginPortal()
12
+ }
13
+ }
14
+ dependencyResolutionManagement {
15
+ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
16
+ repositories {
17
+ google()
18
+ mavenCentral()
19
+ }
20
+ }
21
+
22
+ rootProject.name = "PDFInsightPro"
23
+ include ':app'