commit 62a7ab2a636f779a66eeb4f627d421c044cc41a3
Author: jahruz67
Date: Thu May 21 15:48:57 2026 -0700
first commit
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..cb2d93e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+/.gradle
+/.idea
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..64c69bd
--- /dev/null
+++ b/README.md
@@ -0,0 +1,15 @@
+# Biblia Diaria
+
+Android app en español para leer la Palabra del día desde Vatican News.
+
+La app calcula la fecha del dispositivo y carga esta ruta:
+
+```text
+https://www.vaticannews.va/es/evangelio-de-hoy/YYYY/MM/DD.html
+```
+
+La pantalla principal muestra primero la Palabra de Dios, después la lectura del día y las palabras de los Papas. El botón `Extras` abre una sección de oraciones especiales, empezando con `Ven, Espíritu Creador`. El selector de fecha en la parte superior abre un calendario mensual para cambiar de día, mes o año; al abrir la app siempre vuelve a la fecha actual del dispositivo. El botón flotante `Aa` abre un control para ajustar el tamaño de letra.
+
+## Abrir el proyecto
+
+Abre esta carpeta en Android Studio y sincroniza el proyecto Gradle. Este entorno no incluye Java, Gradle ni Android SDK, así que la compilación debe hacerse desde Android Studio o desde una terminal que ya tenga esas herramientas instaladas.
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644
index 0000000..454843c
--- /dev/null
+++ b/app/build.gradle
@@ -0,0 +1,25 @@
+plugins {
+ id "com.android.application"
+}
+
+android {
+ namespace "com.bibliadiaria.app"
+ compileSdk 35
+
+ defaultConfig {
+ applicationId "com.bibliadiaria.app"
+ minSdk 23
+ targetSdk 35
+ versionCode 1
+ versionName "1.0"
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_17
+ targetCompatibility JavaVersion.VERSION_17
+ }
+}
+
+tasks.withType(JavaCompile).configureEach {
+ options.encoding = "UTF-8"
+}
diff --git a/app/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json b/app/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/app/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/app/build/intermediates/annotation_processor_list/debugAndroidTest/javaPreCompileDebugAndroidTest/annotationProcessors.json b/app/build/intermediates/annotation_processor_list/debugAndroidTest/javaPreCompileDebugAndroidTest/annotationProcessors.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/app/build/intermediates/annotation_processor_list/debugAndroidTest/javaPreCompileDebugAndroidTest/annotationProcessors.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/app/build/intermediates/annotation_processor_list/debugUnitTest/javaPreCompileDebugUnitTest/annotationProcessors.json b/app/build/intermediates/annotation_processor_list/debugUnitTest/javaPreCompileDebugUnitTest/annotationProcessors.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/app/build/intermediates/annotation_processor_list/debugUnitTest/javaPreCompileDebugUnitTest/annotationProcessors.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/app/build/intermediates/apk/debug/app-debug.apk b/app/build/intermediates/apk/debug/app-debug.apk
new file mode 100644
index 0000000..84246c1
Binary files /dev/null and b/app/build/intermediates/apk/debug/app-debug.apk differ
diff --git a/app/build/intermediates/apk/debug/output-metadata.json b/app/build/intermediates/apk/debug/output-metadata.json
new file mode 100644
index 0000000..2edc812
--- /dev/null
+++ b/app/build/intermediates/apk/debug/output-metadata.json
@@ -0,0 +1,21 @@
+{
+ "version": 3,
+ "artifactType": {
+ "type": "APK",
+ "kind": "Directory"
+ },
+ "applicationId": "com.bibliadiaria.app",
+ "variantName": "debug",
+ "elements": [
+ {
+ "type": "SINGLE",
+ "filters": [],
+ "attributes": [],
+ "versionCode": 1,
+ "versionName": "1.0",
+ "outputFile": "app-debug.apk"
+ }
+ ],
+ "elementType": "File",
+ "minSdkVersionForDexing": 24
+}
\ No newline at end of file
diff --git a/app/build/intermediates/apk_ide_redirect_file/debug/createDebugApkListingFileRedirect/redirect.txt b/app/build/intermediates/apk_ide_redirect_file/debug/createDebugApkListingFileRedirect/redirect.txt
new file mode 100644
index 0000000..8ed2aa0
--- /dev/null
+++ b/app/build/intermediates/apk_ide_redirect_file/debug/createDebugApkListingFileRedirect/redirect.txt
@@ -0,0 +1,2 @@
+#- File Locator -
+listingFile=../../../../outputs/apk/debug/output-metadata.json
diff --git a/app/build/intermediates/apk_ide_redirect_file/debugAndroidTest/createDebugAndroidTestApkListingFileRedirect/redirect.txt b/app/build/intermediates/apk_ide_redirect_file/debugAndroidTest/createDebugAndroidTestApkListingFileRedirect/redirect.txt
new file mode 100644
index 0000000..84e7ae0
--- /dev/null
+++ b/app/build/intermediates/apk_ide_redirect_file/debugAndroidTest/createDebugAndroidTestApkListingFileRedirect/redirect.txt
@@ -0,0 +1,2 @@
+#- File Locator -
+listingFile=../../../../outputs/apk/androidTest/debug/output-metadata.json
diff --git a/app/build/intermediates/app_metadata/debug/writeDebugAppMetadata/app-metadata.properties b/app/build/intermediates/app_metadata/debug/writeDebugAppMetadata/app-metadata.properties
new file mode 100644
index 0000000..d3f8884
--- /dev/null
+++ b/app/build/intermediates/app_metadata/debug/writeDebugAppMetadata/app-metadata.properties
@@ -0,0 +1,2 @@
+appMetadataVersion=1.1
+androidGradlePluginVersion=8.7.3
diff --git a/app/build/intermediates/compatible_screen_manifest/debug/createDebugCompatibleScreenManifests/output-metadata.json b/app/build/intermediates/compatible_screen_manifest/debug/createDebugCompatibleScreenManifests/output-metadata.json
new file mode 100644
index 0000000..116296f
--- /dev/null
+++ b/app/build/intermediates/compatible_screen_manifest/debug/createDebugCompatibleScreenManifests/output-metadata.json
@@ -0,0 +1,10 @@
+{
+ "version": 3,
+ "artifactType": {
+ "type": "COMPATIBLE_SCREEN_MANIFEST",
+ "kind": "Directory"
+ },
+ "applicationId": "com.bibliadiaria.app",
+ "variantName": "debug",
+ "elements": []
+}
\ No newline at end of file
diff --git a/app/build/intermediates/compile_and_runtime_not_namespaced_r_class_jar/debug/processDebugResources/R.jar b/app/build/intermediates/compile_and_runtime_not_namespaced_r_class_jar/debug/processDebugResources/R.jar
new file mode 100644
index 0000000..d550c52
Binary files /dev/null and b/app/build/intermediates/compile_and_runtime_not_namespaced_r_class_jar/debug/processDebugResources/R.jar differ
diff --git a/app/build/intermediates/compile_and_runtime_not_namespaced_r_class_jar/debugAndroidTest/processDebugAndroidTestResources/R.jar b/app/build/intermediates/compile_and_runtime_not_namespaced_r_class_jar/debugAndroidTest/processDebugAndroidTestResources/R.jar
new file mode 100644
index 0000000..3dc8511
Binary files /dev/null and b/app/build/intermediates/compile_and_runtime_not_namespaced_r_class_jar/debugAndroidTest/processDebugAndroidTestResources/R.jar differ
diff --git a/app/build/intermediates/compile_app_classes_jar/debug/bundleDebugClassesToCompileJar/classes.jar b/app/build/intermediates/compile_app_classes_jar/debug/bundleDebugClassesToCompileJar/classes.jar
new file mode 100644
index 0000000..f7ec692
Binary files /dev/null and b/app/build/intermediates/compile_app_classes_jar/debug/bundleDebugClassesToCompileJar/classes.jar differ
diff --git a/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/dirs_bucket_0/graph.bin b/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/dirs_bucket_0/graph.bin
new file mode 100644
index 0000000..601f245
Binary files /dev/null and b/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/dirs_bucket_0/graph.bin differ
diff --git a/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/dirs_bucket_1/graph.bin b/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/dirs_bucket_1/graph.bin
new file mode 100644
index 0000000..5d1a6bc
Binary files /dev/null and b/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/dirs_bucket_1/graph.bin differ
diff --git a/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/dirs_bucket_2/graph.bin b/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/dirs_bucket_2/graph.bin
new file mode 100644
index 0000000..a7d216c
Binary files /dev/null and b/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/dirs_bucket_2/graph.bin differ
diff --git a/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/dirs_bucket_3/graph.bin b/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/dirs_bucket_3/graph.bin
new file mode 100644
index 0000000..601f245
Binary files /dev/null and b/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/dirs_bucket_3/graph.bin differ
diff --git a/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/jar_3303706eb93b2c82251b2b2efb60d8ef16a8c06b8d977e608c9abdceeec2abe2_bucket_0/graph.bin b/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/jar_3303706eb93b2c82251b2b2efb60d8ef16a8c06b8d977e608c9abdceeec2abe2_bucket_0/graph.bin
new file mode 100644
index 0000000..601f245
Binary files /dev/null and b/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/jar_3303706eb93b2c82251b2b2efb60d8ef16a8c06b8d977e608c9abdceeec2abe2_bucket_0/graph.bin differ
diff --git a/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/jar_3303706eb93b2c82251b2b2efb60d8ef16a8c06b8d977e608c9abdceeec2abe2_bucket_1/graph.bin b/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/jar_3303706eb93b2c82251b2b2efb60d8ef16a8c06b8d977e608c9abdceeec2abe2_bucket_1/graph.bin
new file mode 100644
index 0000000..601f245
Binary files /dev/null and b/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/jar_3303706eb93b2c82251b2b2efb60d8ef16a8c06b8d977e608c9abdceeec2abe2_bucket_1/graph.bin differ
diff --git a/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/jar_3303706eb93b2c82251b2b2efb60d8ef16a8c06b8d977e608c9abdceeec2abe2_bucket_2/graph.bin b/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/jar_3303706eb93b2c82251b2b2efb60d8ef16a8c06b8d977e608c9abdceeec2abe2_bucket_2/graph.bin
new file mode 100644
index 0000000..601f245
Binary files /dev/null and b/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/jar_3303706eb93b2c82251b2b2efb60d8ef16a8c06b8d977e608c9abdceeec2abe2_bucket_2/graph.bin differ
diff --git a/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/jar_3303706eb93b2c82251b2b2efb60d8ef16a8c06b8d977e608c9abdceeec2abe2_bucket_3/graph.bin b/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/jar_3303706eb93b2c82251b2b2efb60d8ef16a8c06b8d977e608c9abdceeec2abe2_bucket_3/graph.bin
new file mode 100644
index 0000000..601f245
Binary files /dev/null and b/app/build/intermediates/desugar_graph/debug/dexBuilderDebug/out/currentProject/jar_3303706eb93b2c82251b2b2efb60d8ef16a8c06b8d977e608c9abdceeec2abe2_bucket_3/graph.bin differ
diff --git a/app/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_1cad183fe8ecb4dd77bba66be5b5c70393173c26efebff4fdc474aab0adc5d2b_bucket_0/graph.bin b/app/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_1cad183fe8ecb4dd77bba66be5b5c70393173c26efebff4fdc474aab0adc5d2b_bucket_0/graph.bin
new file mode 100644
index 0000000..601f245
Binary files /dev/null and b/app/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_1cad183fe8ecb4dd77bba66be5b5c70393173c26efebff4fdc474aab0adc5d2b_bucket_0/graph.bin differ
diff --git a/app/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_1cad183fe8ecb4dd77bba66be5b5c70393173c26efebff4fdc474aab0adc5d2b_bucket_1/graph.bin b/app/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_1cad183fe8ecb4dd77bba66be5b5c70393173c26efebff4fdc474aab0adc5d2b_bucket_1/graph.bin
new file mode 100644
index 0000000..601f245
Binary files /dev/null and b/app/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_1cad183fe8ecb4dd77bba66be5b5c70393173c26efebff4fdc474aab0adc5d2b_bucket_1/graph.bin differ
diff --git a/app/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_1cad183fe8ecb4dd77bba66be5b5c70393173c26efebff4fdc474aab0adc5d2b_bucket_2/graph.bin b/app/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_1cad183fe8ecb4dd77bba66be5b5c70393173c26efebff4fdc474aab0adc5d2b_bucket_2/graph.bin
new file mode 100644
index 0000000..601f245
Binary files /dev/null and b/app/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_1cad183fe8ecb4dd77bba66be5b5c70393173c26efebff4fdc474aab0adc5d2b_bucket_2/graph.bin differ
diff --git a/app/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_1cad183fe8ecb4dd77bba66be5b5c70393173c26efebff4fdc474aab0adc5d2b_bucket_3/graph.bin b/app/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_1cad183fe8ecb4dd77bba66be5b5c70393173c26efebff4fdc474aab0adc5d2b_bucket_3/graph.bin
new file mode 100644
index 0000000..601f245
Binary files /dev/null and b/app/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_1cad183fe8ecb4dd77bba66be5b5c70393173c26efebff4fdc474aab0adc5d2b_bucket_3/graph.bin differ
diff --git a/app/build/intermediates/dex/debug/mergeProjectDexDebug/0/classes.dex b/app/build/intermediates/dex/debug/mergeProjectDexDebug/0/classes.dex
new file mode 100644
index 0000000..ec2e978
Binary files /dev/null and b/app/build/intermediates/dex/debug/mergeProjectDexDebug/0/classes.dex differ
diff --git a/app/build/intermediates/dex/debug/mergeProjectDexDebug/13/classes.dex b/app/build/intermediates/dex/debug/mergeProjectDexDebug/13/classes.dex
new file mode 100644
index 0000000..012ce6a
Binary files /dev/null and b/app/build/intermediates/dex/debug/mergeProjectDexDebug/13/classes.dex differ
diff --git a/app/build/intermediates/dex/debugAndroidTest/mergeProjectDexDebugAndroidTest/0/classes.dex b/app/build/intermediates/dex/debugAndroidTest/mergeProjectDexDebugAndroidTest/0/classes.dex
new file mode 100644
index 0000000..cd8d3dd
Binary files /dev/null and b/app/build/intermediates/dex/debugAndroidTest/mergeProjectDexDebugAndroidTest/0/classes.dex differ
diff --git a/app/build/intermediates/dex_archive_input_jar_hashes/debug/dexBuilderDebug/out b/app/build/intermediates/dex_archive_input_jar_hashes/debug/dexBuilderDebug/out
new file mode 100644
index 0000000..eaba0d1
Binary files /dev/null and b/app/build/intermediates/dex_archive_input_jar_hashes/debug/dexBuilderDebug/out differ
diff --git a/app/build/intermediates/dex_archive_input_jar_hashes/debugAndroidTest/dexBuilderDebugAndroidTest/out b/app/build/intermediates/dex_archive_input_jar_hashes/debugAndroidTest/dexBuilderDebugAndroidTest/out
new file mode 100644
index 0000000..2fef80e
Binary files /dev/null and b/app/build/intermediates/dex_archive_input_jar_hashes/debugAndroidTest/dexBuilderDebugAndroidTest/out differ
diff --git a/app/build/intermediates/dex_number_of_buckets_file/debug/dexBuilderDebug/out b/app/build/intermediates/dex_number_of_buckets_file/debug/dexBuilderDebug/out
new file mode 100644
index 0000000..bf0d87a
--- /dev/null
+++ b/app/build/intermediates/dex_number_of_buckets_file/debug/dexBuilderDebug/out
@@ -0,0 +1 @@
+4
\ No newline at end of file
diff --git a/app/build/intermediates/dex_number_of_buckets_file/debugAndroidTest/dexBuilderDebugAndroidTest/out b/app/build/intermediates/dex_number_of_buckets_file/debugAndroidTest/dexBuilderDebugAndroidTest/out
new file mode 100644
index 0000000..bf0d87a
--- /dev/null
+++ b/app/build/intermediates/dex_number_of_buckets_file/debugAndroidTest/dexBuilderDebugAndroidTest/out
@@ -0,0 +1 @@
+4
\ No newline at end of file
diff --git a/app/build/intermediates/incremental/debug-mergeJavaRes/merge-state b/app/build/intermediates/incremental/debug-mergeJavaRes/merge-state
new file mode 100644
index 0000000..1c983fc
Binary files /dev/null and b/app/build/intermediates/incremental/debug-mergeJavaRes/merge-state differ
diff --git a/app/build/intermediates/incremental/debug/mergeDebugResources/compile-file-map.properties b/app/build/intermediates/incremental/debug/mergeDebugResources/compile-file-map.properties
new file mode 100644
index 0000000..99bdc47
--- /dev/null
+++ b/app/build/intermediates/incremental/debug/mergeDebugResources/compile-file-map.properties
@@ -0,0 +1,2 @@
+#Wed May 20 19:49:08 PDT 2026
+com.bibliadiaria.app-main-6\:/drawable/ic_launcher.xml=C\:\\Users\\360he\\Documents\\Bible app\\app\\build\\intermediates\\merged_res\\debug\\mergeDebugResources\\drawable_ic_launcher.xml.flat
diff --git a/app/build/intermediates/incremental/debug/mergeDebugResources/merged.dir/values/values.xml b/app/build/intermediates/incremental/debug/mergeDebugResources/merged.dir/values/values.xml
new file mode 100644
index 0000000..44951dd
--- /dev/null
+++ b/app/build/intermediates/incremental/debug/mergeDebugResources/merged.dir/values/values.xml
@@ -0,0 +1,12 @@
+
+
+ Biblia Diaria
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/incremental/debug/mergeDebugResources/merger.xml b/app/build/intermediates/incremental/debug/mergeDebugResources/merger.xml
new file mode 100644
index 0000000..9be148f
--- /dev/null
+++ b/app/build/intermediates/incremental/debug/mergeDebugResources/merger.xml
@@ -0,0 +1,9 @@
+
+Biblia Diaria
\ No newline at end of file
diff --git a/app/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties b/app/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties
new file mode 100644
index 0000000..fa30fc6
--- /dev/null
+++ b/app/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties
@@ -0,0 +1,2 @@
+#Wed May 20 19:49:08 PDT 2026
+com.bibliadiaria.app-main-5\:/drawable/ic_launcher.xml=C\:\\Users\\360he\\Documents\\Bible app\\app\\build\\intermediates\\packaged_res\\debug\\packageDebugResources\\drawable\\ic_launcher.xml
diff --git a/app/build/intermediates/incremental/debug/packageDebugResources/merged.dir/values/values.xml b/app/build/intermediates/incremental/debug/packageDebugResources/merged.dir/values/values.xml
new file mode 100644
index 0000000..44951dd
--- /dev/null
+++ b/app/build/intermediates/incremental/debug/packageDebugResources/merged.dir/values/values.xml
@@ -0,0 +1,12 @@
+
+
+ Biblia Diaria
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/incremental/debug/packageDebugResources/merger.xml b/app/build/intermediates/incremental/debug/packageDebugResources/merger.xml
new file mode 100644
index 0000000..9be148f
--- /dev/null
+++ b/app/build/intermediates/incremental/debug/packageDebugResources/merger.xml
@@ -0,0 +1,9 @@
+
+Biblia Diaria
\ No newline at end of file
diff --git a/app/build/intermediates/incremental/debugAndroidTest-mergeJavaRes/merge-state b/app/build/intermediates/incremental/debugAndroidTest-mergeJavaRes/merge-state
new file mode 100644
index 0000000..1c983fc
Binary files /dev/null and b/app/build/intermediates/incremental/debugAndroidTest-mergeJavaRes/merge-state differ
diff --git a/app/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/compile-file-map.properties b/app/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/compile-file-map.properties
new file mode 100644
index 0000000..34cc8d9
--- /dev/null
+++ b/app/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/compile-file-map.properties
@@ -0,0 +1 @@
+#Wed May 20 20:10:16 PDT 2026
diff --git a/app/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/merger.xml b/app/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/merger.xml
new file mode 100644
index 0000000..af0b3cf
--- /dev/null
+++ b/app/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/merger.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/incremental/mergeDebugAndroidTestAssets/merger.xml b/app/build/intermediates/incremental/mergeDebugAndroidTestAssets/merger.xml
new file mode 100644
index 0000000..4362b59
--- /dev/null
+++ b/app/build/intermediates/incremental/mergeDebugAndroidTestAssets/merger.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/incremental/mergeDebugAndroidTestJniLibFolders/merger.xml b/app/build/intermediates/incremental/mergeDebugAndroidTestJniLibFolders/merger.xml
new file mode 100644
index 0000000..89602a6
--- /dev/null
+++ b/app/build/intermediates/incremental/mergeDebugAndroidTestJniLibFolders/merger.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/incremental/mergeDebugAndroidTestShaders/merger.xml b/app/build/intermediates/incremental/mergeDebugAndroidTestShaders/merger.xml
new file mode 100644
index 0000000..664aec9
--- /dev/null
+++ b/app/build/intermediates/incremental/mergeDebugAndroidTestShaders/merger.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/incremental/mergeDebugAssets/merger.xml b/app/build/intermediates/incremental/mergeDebugAssets/merger.xml
new file mode 100644
index 0000000..0acc08c
--- /dev/null
+++ b/app/build/intermediates/incremental/mergeDebugAssets/merger.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml b/app/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml
new file mode 100644
index 0000000..fd6533f
--- /dev/null
+++ b/app/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/incremental/mergeDebugShaders/merger.xml b/app/build/intermediates/incremental/mergeDebugShaders/merger.xml
new file mode 100644
index 0000000..0a43d58
--- /dev/null
+++ b/app/build/intermediates/incremental/mergeDebugShaders/merger.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt b/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt
new file mode 100644
index 0000000..443bbfb
--- /dev/null
+++ b/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt
@@ -0,0 +1,7 @@
+#Wed May 20 20:10:15 PDT 2026
+base.0=C\:\\Users\\360he\\Documents\\Bible app\\app\\build\\intermediates\\dex\\debug\\mergeProjectDexDebug\\0\\classes.dex
+base.1=C\:\\Users\\360he\\Documents\\Bible app\\app\\build\\intermediates\\dex\\debug\\mergeProjectDexDebug\\13\\classes.dex
+path.0=0/classes.dex
+path.1=13/classes.dex
+renamed.0=classes.dex
+renamed.1=classes2.dex
diff --git a/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/androidResources b/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/androidResources
new file mode 100644
index 0000000..1bc0abe
Binary files /dev/null and b/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/androidResources differ
diff --git a/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/javaResources0 b/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/javaResources0
new file mode 100644
index 0000000..945a7c5
Binary files /dev/null and b/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/javaResources0 differ
diff --git a/app/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/dex-renamer-state.txt b/app/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/dex-renamer-state.txt
new file mode 100644
index 0000000..61fd21f
--- /dev/null
+++ b/app/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/dex-renamer-state.txt
@@ -0,0 +1,4 @@
+#Wed May 20 20:10:16 PDT 2026
+base.0=C\:\\Users\\360he\\Documents\\Bible app\\app\\build\\intermediates\\dex\\debugAndroidTest\\mergeProjectDexDebugAndroidTest\\0\\classes.dex
+path.0=0/classes.dex
+renamed.0=classes.dex
diff --git a/app/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/zip-cache/androidResources b/app/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/zip-cache/androidResources
new file mode 100644
index 0000000..aba1273
Binary files /dev/null and b/app/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/zip-cache/androidResources differ
diff --git a/app/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/zip-cache/javaResources0 b/app/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/zip-cache/javaResources0
new file mode 100644
index 0000000..945a7c5
Binary files /dev/null and b/app/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/zip-cache/javaResources0 differ
diff --git a/app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/bibliadiaria/app/ExtrasActivity.class b/app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/bibliadiaria/app/ExtrasActivity.class
new file mode 100644
index 0000000..b241489
Binary files /dev/null and b/app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/bibliadiaria/app/ExtrasActivity.class differ
diff --git a/app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/bibliadiaria/app/MainActivity$1.class b/app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/bibliadiaria/app/MainActivity$1.class
new file mode 100644
index 0000000..1827bf4
Binary files /dev/null and b/app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/bibliadiaria/app/MainActivity$1.class differ
diff --git a/app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/bibliadiaria/app/MainActivity$DailyReading.class b/app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/bibliadiaria/app/MainActivity$DailyReading.class
new file mode 100644
index 0000000..984d600
Binary files /dev/null and b/app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/bibliadiaria/app/MainActivity$DailyReading.class differ
diff --git a/app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/bibliadiaria/app/MainActivity$DailySection.class b/app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/bibliadiaria/app/MainActivity$DailySection.class
new file mode 100644
index 0000000..caa6389
Binary files /dev/null and b/app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/bibliadiaria/app/MainActivity$DailySection.class differ
diff --git a/app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/bibliadiaria/app/MainActivity.class b/app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/bibliadiaria/app/MainActivity.class
new file mode 100644
index 0000000..ebc9dde
Binary files /dev/null and b/app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/bibliadiaria/app/MainActivity.class differ
diff --git a/app/build/intermediates/linked_resources_binary_format/debug/processDebugResources/linked-resources-binary-format-debug.ap_ b/app/build/intermediates/linked_resources_binary_format/debug/processDebugResources/linked-resources-binary-format-debug.ap_
new file mode 100644
index 0000000..b361b19
Binary files /dev/null and b/app/build/intermediates/linked_resources_binary_format/debug/processDebugResources/linked-resources-binary-format-debug.ap_ differ
diff --git a/app/build/intermediates/linked_resources_binary_format/debug/processDebugResources/output-metadata.json b/app/build/intermediates/linked_resources_binary_format/debug/processDebugResources/output-metadata.json
new file mode 100644
index 0000000..4a3ab88
--- /dev/null
+++ b/app/build/intermediates/linked_resources_binary_format/debug/processDebugResources/output-metadata.json
@@ -0,0 +1,20 @@
+{
+ "version": 3,
+ "artifactType": {
+ "type": "LINKED_RESOURCES_BINARY_FORMAT",
+ "kind": "Directory"
+ },
+ "applicationId": "com.bibliadiaria.app",
+ "variantName": "debug",
+ "elements": [
+ {
+ "type": "SINGLE",
+ "filters": [],
+ "attributes": [],
+ "versionCode": 1,
+ "versionName": "1.0",
+ "outputFile": "linked-resources-binary-format-debug.ap_"
+ }
+ ],
+ "elementType": "File"
+}
\ No newline at end of file
diff --git a/app/build/intermediates/linked_resources_binary_format/debugAndroidTest/processDebugAndroidTestResources/linked-resources-binary-format.ap_ b/app/build/intermediates/linked_resources_binary_format/debugAndroidTest/processDebugAndroidTestResources/linked-resources-binary-format.ap_
new file mode 100644
index 0000000..6add2b9
Binary files /dev/null and b/app/build/intermediates/linked_resources_binary_format/debugAndroidTest/processDebugAndroidTestResources/linked-resources-binary-format.ap_ differ
diff --git a/app/build/intermediates/linked_resources_binary_format/debugAndroidTest/processDebugAndroidTestResources/output-metadata.json b/app/build/intermediates/linked_resources_binary_format/debugAndroidTest/processDebugAndroidTestResources/output-metadata.json
new file mode 100644
index 0000000..6d292f6
--- /dev/null
+++ b/app/build/intermediates/linked_resources_binary_format/debugAndroidTest/processDebugAndroidTestResources/output-metadata.json
@@ -0,0 +1,20 @@
+{
+ "version": 3,
+ "artifactType": {
+ "type": "LINKED_RESOURCES_BINARY_FORMAT",
+ "kind": "Directory"
+ },
+ "applicationId": "com.bibliadiaria.app.test",
+ "variantName": "debugAndroidTest",
+ "elements": [
+ {
+ "type": "SINGLE",
+ "filters": [],
+ "attributes": [],
+ "versionCode": 0,
+ "versionName": "",
+ "outputFile": "linked-resources-binary-format.ap_"
+ }
+ ],
+ "elementType": "File"
+}
\ No newline at end of file
diff --git a/app/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt b/app/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt
new file mode 100644
index 0000000..7d786a1
--- /dev/null
+++ b/app/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt
@@ -0,0 +1,5 @@
+R_DEF: Internal format may change without notice
+local
+drawable ic_launcher
+string app_name
+style AppTheme
diff --git a/app/build/intermediates/manifest_merge_blame_file/debug/processDebugMainManifest/manifest-merger-blame-debug-report.txt b/app/build/intermediates/manifest_merge_blame_file/debug/processDebugMainManifest/manifest-merger-blame-debug-report.txt
new file mode 100644
index 0000000..4e958aa
--- /dev/null
+++ b/app/build/intermediates/manifest_merge_blame_file/debug/processDebugMainManifest/manifest-merger-blame-debug-report.txt
@@ -0,0 +1,54 @@
+1
+2
+6
+7
+10
+11
+11-->C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:4:5-67
+11-->C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:4:22-64
+12
+13 C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:6:5-25:19
+14 android:allowBackup="true"
+14-->C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:7:9-35
+15 android:debuggable="true"
+16 android:extractNativeLibs="false"
+17 android:icon="@drawable/ic_launcher"
+17-->C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:8:9-45
+18 android:label="@string/app_name"
+18-->C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:9:9-41
+19 android:theme="@style/AppTheme"
+19-->C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:10:9-40
+20 android:usesCleartextTraffic="false" >
+20-->C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:11:9-45
+21 C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:12:9-14:40
+22 android:name="com.bibliadiaria.app.ExtrasActivity"
+22-->C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:13:13-43
+23 android:exported="false" />
+23-->C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:14:13-37
+24 C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:16:9-24:20
+25 android:name="com.bibliadiaria.app.MainActivity"
+25-->C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:17:13-41
+26 android:exported="true" >
+26-->C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:18:13-36
+27
+27-->C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:19:13-23:29
+28
+28-->C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:20:17-69
+28-->C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:20:25-66
+29
+30
+30-->C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:22:17-77
+30-->C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:22:27-74
+31
+32
+33
+34
+35
diff --git a/app/build/intermediates/manifest_merge_blame_file/debugAndroidTest/processDebugAndroidTestManifest/manifest-merger-blame-debug-androidTest-report.txt b/app/build/intermediates/manifest_merge_blame_file/debugAndroidTest/processDebugAndroidTestManifest/manifest-merger-blame-debug-androidTest-report.txt
new file mode 100644
index 0000000..c5f8d08
--- /dev/null
+++ b/app/build/intermediates/manifest_merge_blame_file/debugAndroidTest/processDebugAndroidTestManifest/manifest-merger-blame-debug-androidTest-report.txt
@@ -0,0 +1,34 @@
+1
+2
+4
+5 C:\Users\360he\Documents\Bible app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest13603668895631883139.xml:5:5-74
+6 android:minSdkVersion="23"
+6-->C:\Users\360he\Documents\Bible app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest13603668895631883139.xml:5:15-41
+7 android:targetSdkVersion="35" />
+7-->C:\Users\360he\Documents\Bible app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest13603668895631883139.xml:5:42-71
+8
+9 C:\Users\360he\Documents\Bible app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest13603668895631883139.xml:11:5-15:70
+10 android:name="android.test.InstrumentationTestRunner"
+10-->C:\Users\360he\Documents\Bible app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest13603668895631883139.xml:11:22-75
+11 android:functionalTest="false"
+11-->C:\Users\360he\Documents\Bible app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest13603668895631883139.xml:14:22-52
+12 android:handleProfiling="false"
+12-->C:\Users\360he\Documents\Bible app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest13603668895631883139.xml:13:22-53
+13 android:label="Tests for com.bibliadiaria.app"
+13-->C:\Users\360he\Documents\Bible app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest13603668895631883139.xml:15:22-68
+14 android:targetPackage="com.bibliadiaria.app" />
+14-->C:\Users\360he\Documents\Bible app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest13603668895631883139.xml:12:22-66
+15
+16 C:\Users\360he\Documents\Bible app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest13603668895631883139.xml:7:5-9:19
+17 android:debuggable="true"
+18 android:extractNativeLibs="false" >
+19
+19-->C:\Users\360he\Documents\Bible app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest13603668895631883139.xml:8:9-60
+19-->C:\Users\360he\Documents\Bible app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest13603668895631883139.xml:8:23-57
+20
+21
+22
diff --git a/app/build/intermediates/merged_java_res/debug/mergeDebugJavaResource/base.jar b/app/build/intermediates/merged_java_res/debug/mergeDebugJavaResource/base.jar
new file mode 100644
index 0000000..15cb0ec
Binary files /dev/null and b/app/build/intermediates/merged_java_res/debug/mergeDebugJavaResource/base.jar differ
diff --git a/app/build/intermediates/merged_java_res/debugAndroidTest/mergeDebugAndroidTestJavaResource/feature-app.jar b/app/build/intermediates/merged_java_res/debugAndroidTest/mergeDebugAndroidTestJavaResource/feature-app.jar
new file mode 100644
index 0000000..15cb0ec
Binary files /dev/null and b/app/build/intermediates/merged_java_res/debugAndroidTest/mergeDebugAndroidTestJavaResource/feature-app.jar differ
diff --git a/app/build/intermediates/merged_manifest/debug/processDebugMainManifest/AndroidManifest.xml b/app/build/intermediates/merged_manifest/debug/processDebugMainManifest/AndroidManifest.xml
new file mode 100644
index 0000000..7776a14
--- /dev/null
+++ b/app/build/intermediates/merged_manifest/debug/processDebugMainManifest/AndroidManifest.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/merged_manifests/debug/processDebugManifest/AndroidManifest.xml b/app/build/intermediates/merged_manifests/debug/processDebugManifest/AndroidManifest.xml
new file mode 100644
index 0000000..7776a14
--- /dev/null
+++ b/app/build/intermediates/merged_manifests/debug/processDebugManifest/AndroidManifest.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/merged_manifests/debug/processDebugManifest/output-metadata.json b/app/build/intermediates/merged_manifests/debug/processDebugManifest/output-metadata.json
new file mode 100644
index 0000000..004f687
--- /dev/null
+++ b/app/build/intermediates/merged_manifests/debug/processDebugManifest/output-metadata.json
@@ -0,0 +1,20 @@
+{
+ "version": 3,
+ "artifactType": {
+ "type": "MERGED_MANIFESTS",
+ "kind": "Directory"
+ },
+ "applicationId": "com.bibliadiaria.app",
+ "variantName": "debug",
+ "elements": [
+ {
+ "type": "SINGLE",
+ "filters": [],
+ "attributes": [],
+ "versionCode": 1,
+ "versionName": "1.0",
+ "outputFile": "AndroidManifest.xml"
+ }
+ ],
+ "elementType": "File"
+}
\ No newline at end of file
diff --git a/app/build/intermediates/merged_res/debug/mergeDebugResources/drawable_ic_launcher.xml.flat b/app/build/intermediates/merged_res/debug/mergeDebugResources/drawable_ic_launcher.xml.flat
new file mode 100644
index 0000000..4e3d87f
Binary files /dev/null and b/app/build/intermediates/merged_res/debug/mergeDebugResources/drawable_ic_launcher.xml.flat differ
diff --git a/app/build/intermediates/merged_res/debug/mergeDebugResources/values_values.arsc.flat b/app/build/intermediates/merged_res/debug/mergeDebugResources/values_values.arsc.flat
new file mode 100644
index 0000000..c519622
Binary files /dev/null and b/app/build/intermediates/merged_res/debug/mergeDebugResources/values_values.arsc.flat differ
diff --git a/app/build/intermediates/merged_res_blame_folder/debug/mergeDebugResources/out/multi-v2/mergeDebugResources.json b/app/build/intermediates/merged_res_blame_folder/debug/mergeDebugResources/out/multi-v2/mergeDebugResources.json
new file mode 100644
index 0000000..c5e417a
--- /dev/null
+++ b/app/build/intermediates/merged_res_blame_folder/debug/mergeDebugResources/out/multi-v2/mergeDebugResources.json
@@ -0,0 +1,38 @@
+{
+ "logs": [
+ {
+ "outputFile": "com.bibliadiaria.app-debug-4:/values_values.arsc.flat",
+ "map": [
+ {
+ "source": "C:\\Users\\360he\\Documents\\Bible app\\app\\src\\main\\res\\values\\styles.xml",
+ "from": {
+ "startLines": "2",
+ "startColumns": "4",
+ "startOffsets": "55",
+ "endLines": "9",
+ "endColumns": "12",
+ "endOffsets": "500"
+ },
+ "to": {
+ "startLines": "3",
+ "startColumns": "4",
+ "startOffsets": "106",
+ "endLines": "10",
+ "endColumns": "12",
+ "endOffsets": "551"
+ }
+ },
+ {
+ "source": "C:\\Users\\360he\\Documents\\Bible app\\app\\src\\main\\res\\values\\strings.xml",
+ "from": {
+ "startLines": "2",
+ "startColumns": "4",
+ "startOffsets": "55",
+ "endColumns": "50",
+ "endOffsets": "101"
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/app/build/intermediates/merged_res_blame_folder/debug/mergeDebugResources/out/multi-v2/values.json b/app/build/intermediates/merged_res_blame_folder/debug/mergeDebugResources/out/multi-v2/values.json
new file mode 100644
index 0000000..8152d0c
--- /dev/null
+++ b/app/build/intermediates/merged_res_blame_folder/debug/mergeDebugResources/out/multi-v2/values.json
@@ -0,0 +1,38 @@
+{
+ "logs": [
+ {
+ "outputFile": "com.bibliadiaria.app-mergeDebugResources-2:/values/values.xml",
+ "map": [
+ {
+ "source": "C:\\Users\\360he\\Documents\\Bible app\\app\\src\\main\\res\\values\\styles.xml",
+ "from": {
+ "startLines": "2",
+ "startColumns": "4",
+ "startOffsets": "55",
+ "endLines": "9",
+ "endColumns": "12",
+ "endOffsets": "500"
+ },
+ "to": {
+ "startLines": "3",
+ "startColumns": "4",
+ "startOffsets": "106",
+ "endLines": "10",
+ "endColumns": "12",
+ "endOffsets": "551"
+ }
+ },
+ {
+ "source": "C:\\Users\\360he\\Documents\\Bible app\\app\\src\\main\\res\\values\\strings.xml",
+ "from": {
+ "startLines": "2",
+ "startColumns": "4",
+ "startOffsets": "55",
+ "endColumns": "50",
+ "endOffsets": "101"
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/app/build/intermediates/merged_res_blame_folder/debug/mergeDebugResources/out/single/mergeDebugResources.json b/app/build/intermediates/merged_res_blame_folder/debug/mergeDebugResources/out/single/mergeDebugResources.json
new file mode 100644
index 0000000..88f7c38
--- /dev/null
+++ b/app/build/intermediates/merged_res_blame_folder/debug/mergeDebugResources/out/single/mergeDebugResources.json
@@ -0,0 +1,6 @@
+[
+ {
+ "merged": "com.bibliadiaria.app-debug-4:/drawable_ic_launcher.xml.flat",
+ "source": "com.bibliadiaria.app-main-6:/drawable/ic_launcher.xml"
+ }
+]
\ No newline at end of file
diff --git a/app/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json b/app/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json
new file mode 100644
index 0000000..0637a08
--- /dev/null
+++ b/app/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/app/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt b/app/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt
new file mode 100644
index 0000000..08f4ebe
--- /dev/null
+++ b/app/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt
@@ -0,0 +1 @@
+0 Warning/Error
\ No newline at end of file
diff --git a/app/build/intermediates/nested_resources_validation_report/debugAndroidTest/generateDebugAndroidTestResources/nestedResourcesValidationReport.txt b/app/build/intermediates/nested_resources_validation_report/debugAndroidTest/generateDebugAndroidTestResources/nestedResourcesValidationReport.txt
new file mode 100644
index 0000000..08f4ebe
--- /dev/null
+++ b/app/build/intermediates/nested_resources_validation_report/debugAndroidTest/generateDebugAndroidTestResources/nestedResourcesValidationReport.txt
@@ -0,0 +1 @@
+0 Warning/Error
\ No newline at end of file
diff --git a/app/build/intermediates/packaged_manifests/debug/processDebugManifestForPackage/AndroidManifest.xml b/app/build/intermediates/packaged_manifests/debug/processDebugManifestForPackage/AndroidManifest.xml
new file mode 100644
index 0000000..7776a14
--- /dev/null
+++ b/app/build/intermediates/packaged_manifests/debug/processDebugManifestForPackage/AndroidManifest.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/packaged_manifests/debug/processDebugManifestForPackage/output-metadata.json b/app/build/intermediates/packaged_manifests/debug/processDebugManifestForPackage/output-metadata.json
new file mode 100644
index 0000000..fd85ae4
--- /dev/null
+++ b/app/build/intermediates/packaged_manifests/debug/processDebugManifestForPackage/output-metadata.json
@@ -0,0 +1,20 @@
+{
+ "version": 3,
+ "artifactType": {
+ "type": "PACKAGED_MANIFESTS",
+ "kind": "Directory"
+ },
+ "applicationId": "com.bibliadiaria.app",
+ "variantName": "debug",
+ "elements": [
+ {
+ "type": "SINGLE",
+ "filters": [],
+ "attributes": [],
+ "versionCode": 1,
+ "versionName": "1.0",
+ "outputFile": "AndroidManifest.xml"
+ }
+ ],
+ "elementType": "File"
+}
\ No newline at end of file
diff --git a/app/build/intermediates/packaged_manifests/debugAndroidTest/processDebugAndroidTestManifest/AndroidManifest.xml b/app/build/intermediates/packaged_manifests/debugAndroidTest/processDebugAndroidTestManifest/AndroidManifest.xml
new file mode 100644
index 0000000..4f75f96
--- /dev/null
+++ b/app/build/intermediates/packaged_manifests/debugAndroidTest/processDebugAndroidTestManifest/AndroidManifest.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/packaged_manifests/debugAndroidTest/processDebugAndroidTestManifest/output-metadata.json b/app/build/intermediates/packaged_manifests/debugAndroidTest/processDebugAndroidTestManifest/output-metadata.json
new file mode 100644
index 0000000..6b3271b
--- /dev/null
+++ b/app/build/intermediates/packaged_manifests/debugAndroidTest/processDebugAndroidTestManifest/output-metadata.json
@@ -0,0 +1,18 @@
+{
+ "version": 3,
+ "artifactType": {
+ "type": "PACKAGED_MANIFESTS",
+ "kind": "Directory"
+ },
+ "applicationId": "com.bibliadiaria.app.test",
+ "variantName": "debugAndroidTest",
+ "elements": [
+ {
+ "type": "SINGLE",
+ "filters": [],
+ "attributes": [],
+ "outputFile": "AndroidManifest.xml"
+ }
+ ],
+ "elementType": "File"
+}
\ No newline at end of file
diff --git a/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable/ic_launcher.xml b/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable/ic_launcher.xml
new file mode 100644
index 0000000..80ce5bd
--- /dev/null
+++ b/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable/ic_launcher.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
diff --git a/app/build/intermediates/packaged_res/debug/packageDebugResources/values/values.xml b/app/build/intermediates/packaged_res/debug/packageDebugResources/values/values.xml
new file mode 100644
index 0000000..44951dd
--- /dev/null
+++ b/app/build/intermediates/packaged_res/debug/packageDebugResources/values/values.xml
@@ -0,0 +1,12 @@
+
+
+ Biblia Diaria
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/project_dex_archive/debug/dexBuilderDebug/out/2509813633471efcff3946df72daf297e5ef45a69b63411e52d40ef0b5791dce_1.jar b/app/build/intermediates/project_dex_archive/debug/dexBuilderDebug/out/2509813633471efcff3946df72daf297e5ef45a69b63411e52d40ef0b5791dce_1.jar
new file mode 100644
index 0000000..92daf6d
Binary files /dev/null and b/app/build/intermediates/project_dex_archive/debug/dexBuilderDebug/out/2509813633471efcff3946df72daf297e5ef45a69b63411e52d40ef0b5791dce_1.jar differ
diff --git a/app/build/intermediates/project_dex_archive/debug/dexBuilderDebug/out/com/bibliadiaria/app/ExtrasActivity.dex b/app/build/intermediates/project_dex_archive/debug/dexBuilderDebug/out/com/bibliadiaria/app/ExtrasActivity.dex
new file mode 100644
index 0000000..95e848a
Binary files /dev/null and b/app/build/intermediates/project_dex_archive/debug/dexBuilderDebug/out/com/bibliadiaria/app/ExtrasActivity.dex differ
diff --git a/app/build/intermediates/project_dex_archive/debug/dexBuilderDebug/out/com/bibliadiaria/app/MainActivity$1.dex b/app/build/intermediates/project_dex_archive/debug/dexBuilderDebug/out/com/bibliadiaria/app/MainActivity$1.dex
new file mode 100644
index 0000000..cc487bb
Binary files /dev/null and b/app/build/intermediates/project_dex_archive/debug/dexBuilderDebug/out/com/bibliadiaria/app/MainActivity$1.dex differ
diff --git a/app/build/intermediates/project_dex_archive/debug/dexBuilderDebug/out/com/bibliadiaria/app/MainActivity$DailyReading.dex b/app/build/intermediates/project_dex_archive/debug/dexBuilderDebug/out/com/bibliadiaria/app/MainActivity$DailyReading.dex
new file mode 100644
index 0000000..4a52083
Binary files /dev/null and b/app/build/intermediates/project_dex_archive/debug/dexBuilderDebug/out/com/bibliadiaria/app/MainActivity$DailyReading.dex differ
diff --git a/app/build/intermediates/project_dex_archive/debug/dexBuilderDebug/out/com/bibliadiaria/app/MainActivity$DailySection.dex b/app/build/intermediates/project_dex_archive/debug/dexBuilderDebug/out/com/bibliadiaria/app/MainActivity$DailySection.dex
new file mode 100644
index 0000000..924d7c0
Binary files /dev/null and b/app/build/intermediates/project_dex_archive/debug/dexBuilderDebug/out/com/bibliadiaria/app/MainActivity$DailySection.dex differ
diff --git a/app/build/intermediates/project_dex_archive/debug/dexBuilderDebug/out/com/bibliadiaria/app/MainActivity.dex b/app/build/intermediates/project_dex_archive/debug/dexBuilderDebug/out/com/bibliadiaria/app/MainActivity.dex
new file mode 100644
index 0000000..dc7ef67
Binary files /dev/null and b/app/build/intermediates/project_dex_archive/debug/dexBuilderDebug/out/com/bibliadiaria/app/MainActivity.dex differ
diff --git a/app/build/intermediates/project_dex_archive/debugAndroidTest/dexBuilderDebugAndroidTest/out/3f1410b5279802ae43caaa23febdb38845ba07d2aad9ba94e65c1659b1d71f9a_2.jar b/app/build/intermediates/project_dex_archive/debugAndroidTest/dexBuilderDebugAndroidTest/out/3f1410b5279802ae43caaa23febdb38845ba07d2aad9ba94e65c1659b1d71f9a_2.jar
new file mode 100644
index 0000000..b8d1f63
Binary files /dev/null and b/app/build/intermediates/project_dex_archive/debugAndroidTest/dexBuilderDebugAndroidTest/out/3f1410b5279802ae43caaa23febdb38845ba07d2aad9ba94e65c1659b1d71f9a_2.jar differ
diff --git a/app/build/intermediates/runtime_symbol_list/debug/processDebugResources/R.txt b/app/build/intermediates/runtime_symbol_list/debug/processDebugResources/R.txt
new file mode 100644
index 0000000..0164d3d
--- /dev/null
+++ b/app/build/intermediates/runtime_symbol_list/debug/processDebugResources/R.txt
@@ -0,0 +1,3 @@
+int drawable ic_launcher 0x7f010000
+int string app_name 0x7f020000
+int style AppTheme 0x7f030000
diff --git a/app/build/intermediates/runtime_symbol_list/debugAndroidTest/processDebugAndroidTestResources/R.txt b/app/build/intermediates/runtime_symbol_list/debugAndroidTest/processDebugAndroidTestResources/R.txt
new file mode 100644
index 0000000..e69de29
diff --git a/app/build/intermediates/signing_config_versions/debug/writeDebugSigningConfigVersions/signing-config-versions.json b/app/build/intermediates/signing_config_versions/debug/writeDebugSigningConfigVersions/signing-config-versions.json
new file mode 100644
index 0000000..bb4deaa
--- /dev/null
+++ b/app/build/intermediates/signing_config_versions/debug/writeDebugSigningConfigVersions/signing-config-versions.json
@@ -0,0 +1 @@
+{"enableV1Signing":true,"enableV2Signing":true,"enableV3Signing":false,"enableV4Signing":false}
\ No newline at end of file
diff --git a/app/build/intermediates/signing_config_versions/debugAndroidTest/writeDebugAndroidTestSigningConfigVersions/signing-config-versions.json b/app/build/intermediates/signing_config_versions/debugAndroidTest/writeDebugAndroidTestSigningConfigVersions/signing-config-versions.json
new file mode 100644
index 0000000..bb4deaa
--- /dev/null
+++ b/app/build/intermediates/signing_config_versions/debugAndroidTest/writeDebugAndroidTestSigningConfigVersions/signing-config-versions.json
@@ -0,0 +1 @@
+{"enableV1Signing":true,"enableV2Signing":true,"enableV3Signing":false,"enableV4Signing":false}
\ No newline at end of file
diff --git a/app/build/intermediates/source_set_path_map/debug/mapDebugSourceSetPaths/file-map.txt b/app/build/intermediates/source_set_path_map/debug/mapDebugSourceSetPaths/file-map.txt
new file mode 100644
index 0000000..38e4ee4
--- /dev/null
+++ b/app/build/intermediates/source_set_path_map/debug/mapDebugSourceSetPaths/file-map.txt
@@ -0,0 +1,7 @@
+com.bibliadiaria.app-pngs-0 C:\Users\360he\Documents\Bible app\app\build\generated\res\pngs\debug
+com.bibliadiaria.app-resValues-1 C:\Users\360he\Documents\Bible app\app\build\generated\res\resValues\debug
+com.bibliadiaria.app-packageDebugResources-2 C:\Users\360he\Documents\Bible app\app\build\intermediates\incremental\debug\packageDebugResources\merged.dir
+com.bibliadiaria.app-packageDebugResources-3 C:\Users\360he\Documents\Bible app\app\build\intermediates\incremental\debug\packageDebugResources\stripped.dir
+com.bibliadiaria.app-debug-4 C:\Users\360he\Documents\Bible app\app\build\intermediates\merged_res\debug\mergeDebugResources
+com.bibliadiaria.app-debug-5 C:\Users\360he\Documents\Bible app\app\src\debug\res
+com.bibliadiaria.app-main-6 C:\Users\360he\Documents\Bible app\app\src\main\res
diff --git a/app/build/intermediates/source_set_path_map/debugAndroidTest/mapDebugAndroidTestSourceSetPaths/file-map.txt b/app/build/intermediates/source_set_path_map/debugAndroidTest/mapDebugAndroidTestSourceSetPaths/file-map.txt
new file mode 100644
index 0000000..f35e9f9
--- /dev/null
+++ b/app/build/intermediates/source_set_path_map/debugAndroidTest/mapDebugAndroidTestSourceSetPaths/file-map.txt
@@ -0,0 +1,4 @@
+com.bibliadiaria.app.test.app-androidTest-0 C:\Users\360he\Documents\Bible app\app\build\generated\res\resValues\androidTest\debug
+com.bibliadiaria.app.test.app-mergeDebugAndroidTestResources-1 C:\Users\360he\Documents\Bible app\app\build\intermediates\incremental\debugAndroidTest\mergeDebugAndroidTestResources\merged.dir
+com.bibliadiaria.app.test.app-mergeDebugAndroidTestResources-2 C:\Users\360he\Documents\Bible app\app\build\intermediates\incremental\debugAndroidTest\mergeDebugAndroidTestResources\stripped.dir
+com.bibliadiaria.app.test.app-debugAndroidTest-3 C:\Users\360he\Documents\Bible app\app\build\intermediates\merged_res\debugAndroidTest\mergeDebugAndroidTestResources
diff --git a/app/build/intermediates/stable_resource_ids_file/debug/processDebugResources/stableIds.txt b/app/build/intermediates/stable_resource_ids_file/debug/processDebugResources/stableIds.txt
new file mode 100644
index 0000000..b2fa533
--- /dev/null
+++ b/app/build/intermediates/stable_resource_ids_file/debug/processDebugResources/stableIds.txt
@@ -0,0 +1,3 @@
+com.bibliadiaria.app:style/AppTheme = 0x7f030000
+com.bibliadiaria.app:string/app_name = 0x7f020000
+com.bibliadiaria.app:drawable/ic_launcher = 0x7f010000
diff --git a/app/build/intermediates/stable_resource_ids_file/debugAndroidTest/processDebugAndroidTestResources/stableIds.txt b/app/build/intermediates/stable_resource_ids_file/debugAndroidTest/processDebugAndroidTestResources/stableIds.txt
new file mode 100644
index 0000000..e69de29
diff --git a/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk b/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk
new file mode 100644
index 0000000..6050323
Binary files /dev/null and b/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk differ
diff --git a/app/build/outputs/apk/androidTest/debug/output-metadata.json b/app/build/outputs/apk/androidTest/debug/output-metadata.json
new file mode 100644
index 0000000..1d57f7a
--- /dev/null
+++ b/app/build/outputs/apk/androidTest/debug/output-metadata.json
@@ -0,0 +1,21 @@
+{
+ "version": 3,
+ "artifactType": {
+ "type": "APK",
+ "kind": "Directory"
+ },
+ "applicationId": "com.bibliadiaria.app.test",
+ "variantName": "debugAndroidTest",
+ "elements": [
+ {
+ "type": "SINGLE",
+ "filters": [],
+ "attributes": [],
+ "versionCode": 0,
+ "versionName": "",
+ "outputFile": "app-debug-androidTest.apk"
+ }
+ ],
+ "elementType": "File",
+ "minSdkVersionForDexing": 23
+}
\ No newline at end of file
diff --git a/app/build/outputs/apk/debug/output-metadata.json b/app/build/outputs/apk/debug/output-metadata.json
new file mode 100644
index 0000000..6c19acb
--- /dev/null
+++ b/app/build/outputs/apk/debug/output-metadata.json
@@ -0,0 +1,21 @@
+{
+ "version": 3,
+ "artifactType": {
+ "type": "APK",
+ "kind": "Directory"
+ },
+ "applicationId": "com.bibliadiaria.app",
+ "variantName": "debug",
+ "elements": [
+ {
+ "type": "SINGLE",
+ "filters": [],
+ "attributes": [],
+ "versionCode": 1,
+ "versionName": "1.0",
+ "outputFile": "app-debug.apk"
+ }
+ ],
+ "elementType": "File",
+ "minSdkVersionForDexing": 23
+}
\ No newline at end of file
diff --git a/app/build/outputs/apk/debug/wordofgod.apk b/app/build/outputs/apk/debug/wordofgod.apk
new file mode 100644
index 0000000..0152988
Binary files /dev/null and b/app/build/outputs/apk/debug/wordofgod.apk differ
diff --git a/app/build/outputs/logs/manifest-merger-debug-report.txt b/app/build/outputs/logs/manifest-merger-debug-report.txt
new file mode 100644
index 0000000..7d95993
--- /dev/null
+++ b/app/build/outputs/logs/manifest-merger-debug-report.txt
@@ -0,0 +1,63 @@
+-- Merging decision tree log ---
+manifest
+ADDED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:2:1-27:12
+INJECTED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:2:1-27:12
+INJECTED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:2:1-27:12
+INJECTED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:2:1-27:12
+ package
+ INJECTED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml
+ android:versionName
+ INJECTED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml
+ android:versionCode
+ INJECTED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml
+ xmlns:android
+ ADDED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:2:11-69
+uses-permission#android.permission.INTERNET
+ADDED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:4:5-67
+ android:name
+ ADDED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:4:22-64
+application
+ADDED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:6:5-25:19
+INJECTED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:6:5-25:19
+ android:extractNativeLibs
+ INJECTED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml
+ android:label
+ ADDED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:9:9-41
+ android:icon
+ ADDED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:8:9-45
+ android:allowBackup
+ ADDED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:7:9-35
+ android:theme
+ ADDED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:10:9-40
+ android:usesCleartextTraffic
+ ADDED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:11:9-45
+activity#com.bibliadiaria.app.ExtrasActivity
+ADDED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:12:9-14:40
+ android:exported
+ ADDED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:14:13-37
+ android:name
+ ADDED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:13:13-43
+activity#com.bibliadiaria.app.MainActivity
+ADDED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:16:9-24:20
+ android:exported
+ ADDED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:18:13-36
+ android:name
+ ADDED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:17:13-41
+intent-filter#action:name:android.intent.action.MAIN+category:name:android.intent.category.LAUNCHER
+ADDED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:19:13-23:29
+action#android.intent.action.MAIN
+ADDED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:20:17-69
+ android:name
+ ADDED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:20:25-66
+category#android.intent.category.LAUNCHER
+ADDED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:22:17-77
+ android:name
+ ADDED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml:22:27-74
+uses-sdk
+INJECTED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml reason: use-sdk injection requested
+INJECTED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml
+INJECTED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml
+ android:targetSdkVersion
+ INJECTED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml
+ android:minSdkVersion
+ INJECTED from C:\Users\360he\Documents\Bible app\app\src\main\AndroidManifest.xml
diff --git a/app/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/ExtrasActivity.class.uniqueId3 b/app/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/ExtrasActivity.class.uniqueId3
new file mode 100644
index 0000000..fe4d569
Binary files /dev/null and b/app/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/ExtrasActivity.class.uniqueId3 differ
diff --git a/app/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/MainActivity$1.class.uniqueId2 b/app/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/MainActivity$1.class.uniqueId2
new file mode 100644
index 0000000..1827bf4
Binary files /dev/null and b/app/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/MainActivity$1.class.uniqueId2 differ
diff --git a/app/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/MainActivity$DailyReading.class.uniqueId0 b/app/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/MainActivity$DailyReading.class.uniqueId0
new file mode 100644
index 0000000..984d600
Binary files /dev/null and b/app/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/MainActivity$DailyReading.class.uniqueId0 differ
diff --git a/app/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/MainActivity$DailySection.class.uniqueId4 b/app/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/MainActivity$DailySection.class.uniqueId4
new file mode 100644
index 0000000..caa6389
Binary files /dev/null and b/app/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/MainActivity$DailySection.class.uniqueId4 differ
diff --git a/app/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/MainActivity.class.uniqueId1 b/app/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/MainActivity.class.uniqueId1
new file mode 100644
index 0000000..ebc9dde
Binary files /dev/null and b/app/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/MainActivity.class.uniqueId1 differ
diff --git a/app/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin b/app/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin
new file mode 100644
index 0000000..ea14f28
Binary files /dev/null and b/app/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..3c060d3
--- /dev/null
+++ b/app/src/main/AndroidManifest.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/bibliadiaria/app/ExtrasActivity.java b/app/src/main/java/com/bibliadiaria/app/ExtrasActivity.java
new file mode 100644
index 0000000..32e503e
--- /dev/null
+++ b/app/src/main/java/com/bibliadiaria/app/ExtrasActivity.java
@@ -0,0 +1,283 @@
+package com.bibliadiaria.app;
+
+import android.app.Activity;
+import android.graphics.Color;
+import android.graphics.Typeface;
+import android.graphics.drawable.GradientDrawable;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.LinearLayout;
+import android.widget.ScrollView;
+import android.widget.TextView;
+
+public class ExtrasActivity extends Activity {
+ private static final int COLOR_BACKGROUND = Color.rgb(247, 248, 246);
+ private static final int COLOR_CARD = Color.WHITE;
+ private static final int COLOR_INK = Color.rgb(25, 31, 31);
+ private static final int COLOR_MUTED = Color.rgb(91, 99, 98);
+ private static final int COLOR_ACCENT = Color.rgb(0, 107, 90);
+ private static final int COLOR_WARM = Color.rgb(217, 75, 61);
+
+ private static final String VENI_CREATOR_PRAYER =
+ "Ven, Espíritu Creador,\n"
+ + "visita las almas de tus fieles\n"
+ + "y llena de la gracia divina\n"
+ + "los corazones que tú mismo creaste.\n\n"
+ + "Tú eres nuestro Consolador,\n"
+ + "don del Dios altísimo,\n"
+ + "fuente viva, fuego, caridad\n"
+ + "y espiritual unción.\n\n"
+ + "Tú derramas sobre nosotros\n"
+ + "los siete dones;\n"
+ + "tú eres el dedo de la diestra del Padre,\n"
+ + "promesa solemne del Padre,\n"
+ + "que pones en nuestros labios la palabra.\n\n"
+ + "Enciende tu luz en nuestras mentes,\n"
+ + "infunde tu amor en nuestros corazones\n"
+ + "y fortalece con tu fuerza constante\n"
+ + "la debilidad de nuestro cuerpo.\n\n"
+ + "Aleja de nosotros al enemigo,\n"
+ + "danos pronto la paz;\n"
+ + "siendo tú nuestro guía,\n"
+ + "evitaremos todo mal.\n\n"
+ + "Por ti conozcamos al Padre,\n"
+ + "y también al Hijo;\n"
+ + "y que en ti, Espíritu de ambos,\n"
+ + "creamos en todo tiempo.\n\n"
+ + "Gloria a Dios Padre,\n"
+ + "y al Hijo que resucitó,\n"
+ + "y al Espíritu Consolador,\n"
+ + "por los siglos de los siglos.\n\n"
+ + "Amén.";
+
+ private ScrollView scrollView;
+ private LinearLayout listContainer;
+ private LinearLayout detailContainer;
+ private TextView titleText;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ getWindow().setStatusBarColor(COLOR_BACKGROUND);
+ getWindow().setNavigationBarColor(COLOR_BACKGROUND);
+ }
+
+ setContentView(createScreen());
+ }
+
+ @Override
+ public void onBackPressed() {
+ if (detailContainer != null && detailContainer.getVisibility() == View.VISIBLE) {
+ showPrayerList();
+ return;
+ }
+ super.onBackPressed();
+ }
+
+ private View createScreen() {
+ FrameLayout root = new FrameLayout(this);
+ root.setBackgroundColor(COLOR_BACKGROUND);
+
+ scrollView = new ScrollView(this);
+ scrollView.setFillViewport(true);
+ scrollView.setClipToPadding(false);
+
+ LinearLayout content = new LinearLayout(this);
+ content.setOrientation(LinearLayout.VERTICAL);
+ content.setPadding(dp(20), dp(28), dp(20), dp(28));
+ scrollView.addView(content, new ScrollView.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ ));
+
+ content.addView(createTopBar());
+
+ titleText = textView("Extras", 34, COLOR_INK, Typeface.BOLD);
+ titleText.setIncludeFontPadding(false);
+ LinearLayout.LayoutParams titleParams = new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ );
+ titleParams.setMargins(0, dp(18), 0, dp(18));
+ content.addView(titleText, titleParams);
+
+ listContainer = new LinearLayout(this);
+ listContainer.setOrientation(LinearLayout.VERTICAL);
+ listContainer.addView(createPrayerCard());
+ content.addView(listContainer, new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ ));
+
+ detailContainer = createPrayerDetail();
+ detailContainer.setVisibility(View.GONE);
+ content.addView(detailContainer, new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ ));
+
+ root.addView(scrollView, new FrameLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT
+ ));
+
+ root.setOnApplyWindowInsetsListener((view, insets) -> {
+ content.setPadding(
+ dp(20),
+ dp(28) + insets.getSystemWindowInsetTop(),
+ dp(20),
+ dp(28) + insets.getSystemWindowInsetBottom()
+ );
+ return insets;
+ });
+ root.requestApplyInsets();
+
+ return root;
+ }
+
+ private View createTopBar() {
+ LinearLayout topBar = new LinearLayout(this);
+ topBar.setOrientation(LinearLayout.HORIZONTAL);
+ topBar.setGravity(Gravity.CENTER_VERTICAL);
+
+ TextView label = textView("ORACIONES", 12, COLOR_ACCENT, Typeface.BOLD);
+ topBar.addView(label, new LinearLayout.LayoutParams(
+ 0,
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ 1f
+ ));
+
+ TextView home = textView("Inicio", 15, COLOR_ACCENT, Typeface.BOLD);
+ home.setGravity(Gravity.CENTER);
+ home.setPadding(dp(14), 0, dp(14), 0);
+ home.setBackground(roundedRect(Color.WHITE, dp(8), Color.rgb(219, 226, 222), dp(1)));
+ home.setOnClickListener(view -> finish());
+ topBar.addView(home, new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ dp(40)
+ ));
+
+ return topBar;
+ }
+
+ private View createPrayerCard() {
+ LinearLayout card = new LinearLayout(this);
+ card.setOrientation(LinearLayout.HORIZONTAL);
+ card.setGravity(Gravity.CENTER_VERTICAL);
+ card.setPadding(dp(18), dp(16), dp(16), dp(16));
+ card.setBackground(roundedRect(COLOR_CARD, dp(8), Color.rgb(229, 232, 230), dp(1)));
+ card.setOnClickListener(view -> showPrayerDetail());
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ card.setElevation(dp(1));
+ }
+
+ LinearLayout copy = new LinearLayout(this);
+ copy.setOrientation(LinearLayout.VERTICAL);
+
+ TextView title = textView("Ven, Espíritu Creador", 20, COLOR_INK, Typeface.BOLD);
+ title.setIncludeFontPadding(false);
+ copy.addView(title);
+
+ TextView subtitle = textView("Veni Creator Spiritus", 14, COLOR_MUTED, Typeface.BOLD);
+ LinearLayout.LayoutParams subtitleParams = new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ );
+ subtitleParams.setMargins(0, dp(6), 0, 0);
+ copy.addView(subtitle, subtitleParams);
+
+ card.addView(copy, new LinearLayout.LayoutParams(
+ 0,
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ 1f
+ ));
+
+ TextView arrow = textView(">", 22, COLOR_ACCENT, Typeface.BOLD);
+ arrow.setGravity(Gravity.CENTER);
+ card.addView(arrow, new LinearLayout.LayoutParams(
+ dp(28),
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ ));
+
+ return card;
+ }
+
+ private LinearLayout createPrayerDetail() {
+ LinearLayout detail = new LinearLayout(this);
+ detail.setOrientation(LinearLayout.VERTICAL);
+
+ TextView subtitle = textView("Veni Creator Spiritus", 14, COLOR_WARM, Typeface.BOLD);
+ detail.addView(subtitle);
+
+ TextView prayer = textView(VENI_CREATOR_PRAYER, 21, COLOR_INK, Typeface.NORMAL);
+ prayer.setLineSpacing(dp(5), 1.14f);
+ LinearLayout.LayoutParams prayerParams = new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ );
+ prayerParams.setMargins(0, dp(16), 0, dp(18));
+ detail.addView(prayer, prayerParams);
+
+ TextView backToList = textView("Volver a extras", 15, COLOR_ACCENT, Typeface.BOLD);
+ backToList.setGravity(Gravity.CENTER);
+ backToList.setPadding(dp(14), 0, dp(14), 0);
+ backToList.setBackground(roundedRect(Color.WHITE, dp(8), Color.rgb(219, 226, 222), dp(1)));
+ backToList.setOnClickListener(view -> showPrayerList());
+ detail.addView(backToList, new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ dp(42)
+ ));
+
+ return detail;
+ }
+
+ private void showPrayerDetail() {
+ titleText.setText("Ven, Espíritu Creador");
+ listContainer.setVisibility(View.GONE);
+ detailContainer.setVisibility(View.VISIBLE);
+ scrollToTop();
+ }
+
+ private void showPrayerList() {
+ titleText.setText("Extras");
+ detailContainer.setVisibility(View.GONE);
+ listContainer.setVisibility(View.VISIBLE);
+ scrollToTop();
+ }
+
+ private void scrollToTop() {
+ if (scrollView != null) {
+ scrollView.post(() -> scrollView.smoothScrollTo(0, 0));
+ }
+ }
+
+ private TextView textView(String text, int sizeSp, int color, int style) {
+ TextView textView = new TextView(this);
+ textView.setText(text);
+ textView.setTextSize(sizeSp);
+ textView.setTextColor(color);
+ textView.setTypeface(Typeface.DEFAULT, style);
+ return textView;
+ }
+
+ private GradientDrawable roundedRect(int color, int radius, int strokeColor, int strokeWidth) {
+ GradientDrawable drawable = new GradientDrawable();
+ drawable.setShape(GradientDrawable.RECTANGLE);
+ drawable.setColor(color);
+ drawable.setCornerRadius(radius);
+ if (strokeWidth > 0) {
+ drawable.setStroke(strokeWidth, strokeColor);
+ }
+ return drawable;
+ }
+
+ private int dp(int value) {
+ return Math.round(value * getResources().getDisplayMetrics().density);
+ }
+}
diff --git a/app/src/main/java/com/bibliadiaria/app/MainActivity.java b/app/src/main/java/com/bibliadiaria/app/MainActivity.java
new file mode 100644
index 0000000..18f570d
--- /dev/null
+++ b/app/src/main/java/com/bibliadiaria/app/MainActivity.java
@@ -0,0 +1,1240 @@
+package com.bibliadiaria.app;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.graphics.Color;
+import android.graphics.Typeface;
+import android.graphics.drawable.GradientDrawable;
+import android.os.Build;
+import android.os.Bundle;
+import android.text.Html;
+import android.text.Spanned;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.FrameLayout;
+import android.widget.GridLayout;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.ScrollView;
+import android.widget.SeekBar;
+import android.widget.TextView;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.text.Normalizer;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+public class MainActivity extends Activity {
+ private static final int COLOR_BACKGROUND = Color.rgb(247, 248, 246);
+ private static final int COLOR_CARD = Color.WHITE;
+ private static final int COLOR_INK = Color.rgb(25, 31, 31);
+ private static final int COLOR_MUTED = Color.rgb(91, 99, 98);
+ private static final int COLOR_ACCENT = Color.rgb(0, 107, 90);
+ private static final int COLOR_WARM = Color.rgb(217, 75, 61);
+ private static final int MIN_FONT_SP = 16;
+ private static final int MAX_FONT_SP = 30;
+
+ private final Locale spanishLocale = new Locale("es", "ES");
+ private final List resizableTextViews = new ArrayList<>();
+
+ private ExecutorService executor;
+ private SharedPreferences preferences;
+ private LinearLayout sectionsLayout;
+ private TextView dateText;
+ private TextView dateChipPrimary;
+ private TextView dateChipSecondary;
+ private TextView liturgyText;
+ private TextView statusText;
+ private TextView sourceText;
+ private LinearLayout statusBlock;
+ private LinearLayout calendarPanel;
+ private TextView calendarMonthText;
+ private GridLayout calendarGrid;
+ private ProgressBar progressBar;
+ private Button retryButton;
+ private LinearLayout fontPanel;
+ private TextView fontValueText;
+ private Calendar selectedDateCalendar;
+ private Calendar visibleMonthCalendar;
+ private int loadGeneration;
+ private float readingFontSp;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ getWindow().setStatusBarColor(COLOR_BACKGROUND);
+ getWindow().setNavigationBarColor(COLOR_BACKGROUND);
+ }
+
+ preferences = getSharedPreferences("preferencias_lectura", MODE_PRIVATE);
+ readingFontSp = preferences.getFloat("tamano_letra", 20f);
+ selectedDateCalendar = startOfDay(Calendar.getInstance());
+ visibleMonthCalendar = startOfMonth(selectedDateCalendar);
+ executor = Executors.newSingleThreadExecutor();
+
+ setContentView(createScreen());
+ loadToday();
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ if (executor != null) {
+ executor.shutdownNow();
+ }
+ }
+
+ private View createScreen() {
+ FrameLayout root = new FrameLayout(this);
+ root.setBackgroundColor(COLOR_BACKGROUND);
+
+ ScrollView scrollView = new ScrollView(this);
+ scrollView.setFillViewport(true);
+ scrollView.setClipToPadding(false);
+
+ LinearLayout content = new LinearLayout(this);
+ content.setOrientation(LinearLayout.VERTICAL);
+ content.setPadding(dp(20), dp(28), dp(20), dp(126));
+ scrollView.addView(content, new ScrollView.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ ));
+
+ content.addView(createHeader());
+ content.addView(createStatusBlock());
+
+ sectionsLayout = new LinearLayout(this);
+ sectionsLayout.setOrientation(LinearLayout.VERTICAL);
+ content.addView(sectionsLayout, new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ ));
+
+ sourceText = textView("Fuente: Vatican News", 13, COLOR_MUTED, Typeface.NORMAL);
+ LinearLayout.LayoutParams sourceParams = new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ );
+ sourceParams.setMargins(0, dp(6), 0, 0);
+ content.addView(sourceText, sourceParams);
+
+ root.addView(scrollView, new FrameLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT
+ ));
+
+ fontPanel = createFontPanel();
+ FrameLayout.LayoutParams panelParams = new FrameLayout.LayoutParams(
+ dp(286),
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ Gravity.END | Gravity.BOTTOM
+ );
+ panelParams.setMargins(dp(16), dp(16), dp(16), dp(88));
+ root.addView(fontPanel, panelParams);
+
+ TextView fontButton = createFontButton();
+ FrameLayout.LayoutParams buttonParams = new FrameLayout.LayoutParams(
+ dp(58),
+ dp(58),
+ Gravity.END | Gravity.BOTTOM
+ );
+ buttonParams.setMargins(0, 0, dp(18), dp(18));
+ root.addView(fontButton, buttonParams);
+
+ root.setOnApplyWindowInsetsListener((view, insets) -> {
+ int topInset = insets.getSystemWindowInsetTop();
+ int bottomInset = insets.getSystemWindowInsetBottom();
+
+ content.setPadding(dp(20), dp(28) + topInset, dp(20), dp(126) + bottomInset);
+
+ FrameLayout.LayoutParams currentPanelParams =
+ (FrameLayout.LayoutParams) fontPanel.getLayoutParams();
+ currentPanelParams.setMargins(dp(16), dp(16), dp(16), dp(88) + bottomInset);
+ fontPanel.setLayoutParams(currentPanelParams);
+
+ FrameLayout.LayoutParams currentButtonParams =
+ (FrameLayout.LayoutParams) fontButton.getLayoutParams();
+ currentButtonParams.setMargins(0, 0, dp(18), dp(18) + bottomInset);
+ fontButton.setLayoutParams(currentButtonParams);
+
+ return insets;
+ });
+ root.requestApplyInsets();
+
+ return root;
+ }
+
+ private View createHeader() {
+ LinearLayout header = new LinearLayout(this);
+ header.setOrientation(LinearLayout.VERTICAL);
+ header.setPadding(0, 0, 0, dp(24));
+
+ LinearLayout topRow = new LinearLayout(this);
+ topRow.setOrientation(LinearLayout.HORIZONTAL);
+ topRow.setGravity(Gravity.CENTER_VERTICAL);
+
+ TextView source = textView("VATICAN NEWS", 12, COLOR_ACCENT, Typeface.BOLD);
+ topRow.addView(source, new LinearLayout.LayoutParams(
+ 0,
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ 1f
+ ));
+
+ topRow.addView(createDateChip());
+ header.addView(topRow);
+
+ TextView title = textView("Palabra del día", 34, COLOR_INK, Typeface.BOLD);
+ title.setIncludeFontPadding(false);
+ LinearLayout.LayoutParams titleParams = new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ );
+ titleParams.setMargins(0, dp(8), 0, dp(10));
+ header.addView(title, titleParams);
+
+ LinearLayout.LayoutParams extrasParams = new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ dp(40)
+ );
+ extrasParams.setMargins(0, 0, 0, dp(12));
+ header.addView(createExtrasButton(), extrasParams);
+
+ calendarPanel = createCalendarPanel();
+ LinearLayout.LayoutParams calendarParams = new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ );
+ calendarParams.setMargins(0, dp(2), 0, dp(14));
+ header.addView(calendarPanel, calendarParams);
+
+ dateText = textView("", 16, COLOR_MUTED, Typeface.BOLD);
+ header.addView(dateText);
+
+ liturgyText = textView("", 16, COLOR_INK, Typeface.NORMAL);
+ liturgyText.setLineSpacing(0, 1.12f);
+ LinearLayout.LayoutParams liturgyParams = new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ );
+ liturgyParams.setMargins(0, dp(8), 0, 0);
+ header.addView(liturgyText, liturgyParams);
+
+ return header;
+ }
+
+ private View createExtrasButton() {
+ TextView button = textView("Extras", 15, Color.WHITE, Typeface.BOLD);
+ button.setGravity(Gravity.CENTER);
+ button.setPadding(dp(16), 0, dp(16), 0);
+ button.setBackground(roundedRect(COLOR_ACCENT, dp(8), Color.TRANSPARENT, 0));
+ button.setContentDescription("Abrir extras");
+ button.setOnClickListener(view -> {
+ calendarPanel.setVisibility(View.GONE);
+ if (fontPanel != null) {
+ fontPanel.setVisibility(View.GONE);
+ }
+ startActivity(new Intent(this, ExtrasActivity.class));
+ });
+ return button;
+ }
+
+ private View createDateChip() {
+ LinearLayout chip = new LinearLayout(this);
+ chip.setOrientation(LinearLayout.HORIZONTAL);
+ chip.setGravity(Gravity.CENTER_VERTICAL);
+ chip.setPadding(dp(12), dp(8), dp(10), dp(8));
+ chip.setBackground(roundedRect(Color.WHITE, dp(8), Color.rgb(219, 226, 222), dp(1)));
+ chip.setContentDescription("Elegir fecha");
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ chip.setElevation(dp(1));
+ }
+ chip.setOnClickListener(view -> toggleCalendarPanel());
+
+ LinearLayout labelGroup = new LinearLayout(this);
+ labelGroup.setOrientation(LinearLayout.VERTICAL);
+ labelGroup.setGravity(Gravity.CENTER_VERTICAL);
+
+ dateChipPrimary = textView("", 20, COLOR_INK, Typeface.BOLD);
+ dateChipPrimary.setIncludeFontPadding(false);
+ labelGroup.addView(dateChipPrimary);
+
+ dateChipSecondary = textView("", 11, COLOR_MUTED, Typeface.BOLD);
+ dateChipSecondary.setIncludeFontPadding(false);
+ labelGroup.addView(dateChipSecondary);
+
+ chip.addView(labelGroup);
+
+ TextView chevron = textView("v", 15, COLOR_ACCENT, Typeface.BOLD);
+ chevron.setGravity(Gravity.CENTER);
+ LinearLayout.LayoutParams chevronParams = new LinearLayout.LayoutParams(
+ dp(22),
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ );
+ chevronParams.setMargins(dp(6), 0, 0, 0);
+ chip.addView(chevron, chevronParams);
+
+ updateDateChip();
+ return chip;
+ }
+
+ private LinearLayout createCalendarPanel() {
+ LinearLayout panel = new LinearLayout(this);
+ panel.setOrientation(LinearLayout.VERTICAL);
+ panel.setPadding(dp(14), dp(12), dp(14), dp(14));
+ panel.setVisibility(View.GONE);
+ panel.setBackground(roundedRect(Color.WHITE, dp(8), Color.rgb(219, 226, 222), dp(1)));
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ panel.setElevation(dp(4));
+ }
+
+ LinearLayout monthRow = new LinearLayout(this);
+ monthRow.setOrientation(LinearLayout.HORIZONTAL);
+ monthRow.setGravity(Gravity.CENTER_VERTICAL);
+
+ monthRow.addView(calendarNavButton("<", view -> changeVisibleMonth(-1)));
+
+ calendarMonthText = textView("", 18, COLOR_INK, Typeface.BOLD);
+ calendarMonthText.setGravity(Gravity.CENTER);
+ monthRow.addView(calendarMonthText, new LinearLayout.LayoutParams(
+ 0,
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ 1f
+ ));
+
+ monthRow.addView(calendarNavButton(">", view -> changeVisibleMonth(1)));
+ panel.addView(monthRow);
+
+ LinearLayout quickRow = new LinearLayout(this);
+ quickRow.setOrientation(LinearLayout.HORIZONTAL);
+ quickRow.setGravity(Gravity.CENTER_VERTICAL);
+ LinearLayout.LayoutParams quickParams = new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ );
+ quickParams.setMargins(0, dp(10), 0, dp(6));
+
+ quickRow.addView(smallCalendarButton("- Año", view -> changeVisibleYear(-1)));
+ quickRow.addView(smallCalendarButton("Hoy", view -> selectDate(Calendar.getInstance())));
+ quickRow.addView(smallCalendarButton("+ Año", view -> changeVisibleYear(1)));
+ panel.addView(quickRow, quickParams);
+
+ LinearLayout weekdays = new LinearLayout(this);
+ weekdays.setOrientation(LinearLayout.HORIZONTAL);
+ String[] labels = {"L", "M", "X", "J", "V", "S", "D"};
+ for (String label : labels) {
+ TextView dayLabel = textView(label, 12, COLOR_MUTED, Typeface.BOLD);
+ dayLabel.setGravity(Gravity.CENTER);
+ weekdays.addView(dayLabel, new LinearLayout.LayoutParams(
+ 0,
+ dp(24),
+ 1f
+ ));
+ }
+ panel.addView(weekdays);
+
+ calendarGrid = new GridLayout(this);
+ calendarGrid.setColumnCount(7);
+ calendarGrid.setRowCount(6);
+ panel.addView(calendarGrid, new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ ));
+
+ renderCalendar();
+ return panel;
+ }
+
+ private TextView calendarNavButton(String text, View.OnClickListener listener) {
+ TextView button = textView(text, 22, COLOR_ACCENT, Typeface.BOLD);
+ button.setGravity(Gravity.CENTER);
+ button.setBackground(roundedRect(Color.rgb(229, 244, 240), dp(8), Color.TRANSPARENT, 0));
+ button.setOnClickListener(listener);
+ button.setContentDescription(text.equals("<") ? "Mes anterior" : "Mes siguiente");
+ return button;
+ }
+
+ private TextView smallCalendarButton(String text, View.OnClickListener listener) {
+ TextView button = textView(text, 13, COLOR_ACCENT, Typeface.BOLD);
+ button.setGravity(Gravity.CENTER);
+ button.setPadding(dp(8), 0, dp(8), 0);
+ button.setBackground(roundedRect(Color.rgb(229, 244, 240), dp(8), Color.TRANSPARENT, 0));
+ button.setOnClickListener(listener);
+
+ LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
+ 0,
+ dp(36),
+ 1f
+ );
+ params.setMargins(dp(3), 0, dp(3), 0);
+ button.setLayoutParams(params);
+ return button;
+ }
+
+ private void toggleCalendarPanel() {
+ int nextVisibility = calendarPanel.getVisibility() == View.VISIBLE ? View.GONE : View.VISIBLE;
+ calendarPanel.setVisibility(nextVisibility);
+ if (nextVisibility == View.VISIBLE) {
+ fontPanel.setVisibility(View.GONE);
+ renderCalendar();
+ }
+ }
+
+ private void changeVisibleMonth(int amount) {
+ visibleMonthCalendar.add(Calendar.MONTH, amount);
+ visibleMonthCalendar = startOfMonth(visibleMonthCalendar);
+ renderCalendar();
+ }
+
+ private void changeVisibleYear(int amount) {
+ visibleMonthCalendar.add(Calendar.YEAR, amount);
+ visibleMonthCalendar = startOfMonth(visibleMonthCalendar);
+ renderCalendar();
+ }
+
+ private void selectDate(Calendar calendar) {
+ selectedDateCalendar = startOfDay(calendar);
+ visibleMonthCalendar = startOfMonth(selectedDateCalendar);
+ calendarPanel.setVisibility(View.GONE);
+ updateDateChip();
+ renderCalendar();
+ loadSelectedDate();
+ }
+
+ private void renderCalendar() {
+ if (calendarGrid == null || calendarMonthText == null || visibleMonthCalendar == null) {
+ return;
+ }
+
+ calendarMonthText.setText(formatMonthTitle(visibleMonthCalendar.getTime()));
+ calendarGrid.removeAllViews();
+
+ Calendar monthStart = startOfMonth(visibleMonthCalendar);
+ int firstDayOfWeek = monthStart.get(Calendar.DAY_OF_WEEK);
+ int firstOffset = (firstDayOfWeek + 5) % 7;
+ int daysInMonth = monthStart.getActualMaximum(Calendar.DAY_OF_MONTH);
+
+ Calendar today = startOfDay(Calendar.getInstance());
+
+ for (int cell = 0; cell < 42; cell++) {
+ TextView dayCell = textView("", 16, COLOR_INK, Typeface.BOLD);
+ dayCell.setGravity(Gravity.CENTER);
+ dayCell.setIncludeFontPadding(false);
+
+ GridLayout.LayoutParams params = new GridLayout.LayoutParams(
+ GridLayout.spec(GridLayout.UNDEFINED, 1f),
+ GridLayout.spec(GridLayout.UNDEFINED, 1f)
+ );
+ params.width = 0;
+ params.height = dp(42);
+ params.setMargins(dp(2), dp(2), dp(2), dp(2));
+ dayCell.setLayoutParams(params);
+
+ int dayNumber = cell - firstOffset + 1;
+ if (dayNumber >= 1 && dayNumber <= daysInMonth) {
+ Calendar cellDate = startOfMonth(visibleMonthCalendar);
+ cellDate.set(Calendar.DAY_OF_MONTH, dayNumber);
+
+ dayCell.setText(String.valueOf(dayNumber));
+ if (isSameDay(cellDate, selectedDateCalendar)) {
+ dayCell.setTextColor(Color.WHITE);
+ dayCell.setBackground(oval(COLOR_ACCENT));
+ } else if (isSameDay(cellDate, today)) {
+ dayCell.setTextColor(COLOR_WARM);
+ dayCell.setBackground(roundedRect(Color.rgb(255, 239, 236), dp(8), Color.TRANSPARENT, 0));
+ } else {
+ dayCell.setBackground(roundedRect(Color.TRANSPARENT, dp(8), Color.TRANSPARENT, 0));
+ }
+
+ Calendar dateForClick = (Calendar) cellDate.clone();
+ dayCell.setOnClickListener(view -> selectDate(dateForClick));
+ } else {
+ dayCell.setText("");
+ dayCell.setEnabled(false);
+ }
+
+ calendarGrid.addView(dayCell);
+ }
+ }
+
+ private View createStatusBlock() {
+ statusBlock = new LinearLayout(this);
+ statusBlock.setOrientation(LinearLayout.VERTICAL);
+ statusBlock.setPadding(dp(18), dp(16), dp(18), dp(16));
+ statusBlock.setBackground(roundedRect(COLOR_CARD, dp(8), Color.TRANSPARENT, 0));
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ statusBlock.setElevation(dp(1));
+ }
+
+ LinearLayout row = new LinearLayout(this);
+ row.setOrientation(LinearLayout.HORIZONTAL);
+ row.setGravity(Gravity.CENTER_VERTICAL);
+
+ progressBar = new ProgressBar(this);
+ LinearLayout.LayoutParams progressParams = new LinearLayout.LayoutParams(dp(30), dp(30));
+ progressParams.setMargins(0, 0, dp(12), 0);
+ row.addView(progressBar, progressParams);
+
+ statusText = textView("Cargando la Palabra de hoy...", 16, COLOR_INK, Typeface.NORMAL);
+ statusText.setLineSpacing(0, 1.16f);
+ row.addView(statusText, new LinearLayout.LayoutParams(
+ 0,
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ 1f
+ ));
+ statusBlock.addView(row);
+
+ retryButton = new Button(this);
+ retryButton.setText("Reintentar");
+ retryButton.setTextColor(Color.WHITE);
+ retryButton.setTextSize(14);
+ retryButton.setAllCaps(false);
+ retryButton.setBackground(roundedRect(COLOR_ACCENT, dp(8), Color.TRANSPARENT, 0));
+ retryButton.setVisibility(View.GONE);
+ retryButton.setOnClickListener(view -> loadSelectedDate());
+ LinearLayout.LayoutParams retryParams = new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ dp(44)
+ );
+ retryParams.setMargins(0, dp(14), 0, 0);
+ statusBlock.addView(retryButton, retryParams);
+
+ LinearLayout.LayoutParams blockParams = new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ );
+ blockParams.setMargins(0, 0, 0, dp(18));
+ statusBlock.setLayoutParams(blockParams);
+ return statusBlock;
+ }
+
+ private LinearLayout createFontPanel() {
+ LinearLayout panel = new LinearLayout(this);
+ panel.setOrientation(LinearLayout.VERTICAL);
+ panel.setPadding(dp(16), dp(14), dp(16), dp(14));
+ panel.setVisibility(View.GONE);
+ panel.setBackground(roundedRect(Color.WHITE, dp(8), Color.rgb(223, 229, 226), dp(1)));
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ panel.setElevation(dp(8));
+ }
+
+ LinearLayout labelRow = new LinearLayout(this);
+ labelRow.setGravity(Gravity.CENTER_VERTICAL);
+
+ TextView label = textView("Tamaño de letra", 15, COLOR_INK, Typeface.BOLD);
+ labelRow.addView(label, new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f));
+
+ fontValueText = textView(Math.round(readingFontSp) + " sp", 14, COLOR_MUTED, Typeface.BOLD);
+ labelRow.addView(fontValueText);
+ panel.addView(labelRow);
+
+ SeekBar seekBar = new SeekBar(this);
+ seekBar.setMax(MAX_FONT_SP - MIN_FONT_SP);
+ seekBar.setProgress(Math.round(readingFontSp) - MIN_FONT_SP);
+ seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+ readingFontSp = MIN_FONT_SP + progress;
+ preferences.edit().putFloat("tamano_letra", readingFontSp).apply();
+ fontValueText.setText(Math.round(readingFontSp) + " sp");
+ applyReadingFontSize();
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {
+ }
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {
+ }
+ });
+ LinearLayout.LayoutParams seekParams = new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ );
+ seekParams.setMargins(0, dp(8), 0, 0);
+ panel.addView(seekBar, seekParams);
+
+ return panel;
+ }
+
+ private TextView createFontButton() {
+ TextView button = textView("Aa", 20, Color.WHITE, Typeface.BOLD);
+ button.setGravity(Gravity.CENTER);
+ button.setContentDescription("Cambiar tamaño de letra");
+ button.setBackground(oval(COLOR_ACCENT));
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ button.setElevation(dp(10));
+ }
+ button.setOnClickListener(view -> {
+ int nextVisibility = fontPanel.getVisibility() == View.VISIBLE ? View.GONE : View.VISIBLE;
+ fontPanel.setVisibility(nextVisibility);
+ if (nextVisibility == View.VISIBLE) {
+ calendarPanel.setVisibility(View.GONE);
+ }
+ });
+ return button;
+ }
+
+ private void loadToday() {
+ selectedDateCalendar = startOfDay(Calendar.getInstance());
+ visibleMonthCalendar = startOfMonth(selectedDateCalendar);
+ updateDateChip();
+ renderCalendar();
+ loadSelectedDate();
+ }
+
+ private void loadSelectedDate() {
+ loadDate(selectedDateCalendar.getTime());
+ }
+
+ private void loadDate(Date date) {
+ String url = buildVaticanUrl(date);
+ int generation = ++loadGeneration;
+
+ showLoading(date, url);
+
+ executor.submit(() -> {
+ try {
+ String html = download(url);
+ DailyReading reading = parseDailyReading(html, date, url);
+ runOnUiThread(() -> {
+ if (generation == loadGeneration) {
+ renderReading(reading);
+ }
+ });
+ } catch (Exception error) {
+ runOnUiThread(() -> {
+ if (generation == loadGeneration) {
+ showError(error, url);
+ }
+ });
+ }
+ });
+ }
+
+ private void showLoading(Date date, String url) {
+ resizableTextViews.clear();
+ sectionsLayout.removeAllViews();
+ statusBlock.setVisibility(View.VISIBLE);
+ dateText.setText(formatDisplayDate(date));
+ liturgyText.setText("Lecturas según la fecha del dispositivo.");
+ statusText.setText("Cargando la Palabra de hoy...");
+ progressBar.setVisibility(View.VISIBLE);
+ retryButton.setVisibility(View.GONE);
+ sourceText.setText("Fuente: Vatican News\n" + url);
+ }
+
+ private void renderReading(DailyReading reading) {
+ statusBlock.setVisibility(View.GONE);
+ progressBar.setVisibility(View.GONE);
+ retryButton.setVisibility(View.GONE);
+ statusText.setText("Actualizado desde Vatican News.");
+
+ resizableTextViews.clear();
+ sectionsLayout.removeAllViews();
+
+ dateText.setText(reading.displayDate);
+ if (reading.liturgicalTitle.isEmpty()) {
+ liturgyText.setText("Palabra del día");
+ } else {
+ liturgyText.setText(reading.liturgicalTitle);
+ }
+
+ addScriptureCard("Palabra de Dios", "Evangelio del Día", reading.gospel, true);
+ addScriptureCard("Lectura del Día", null, reading.firstReading, false);
+ addReflectionCard(reading.papalWords);
+
+ sourceText.setText("Fuente: Vatican News\n" + reading.sourceUrl);
+ applyReadingFontSize();
+ }
+
+ private void showError(Exception error, String url) {
+ statusBlock.setVisibility(View.VISIBLE);
+ progressBar.setVisibility(View.GONE);
+ retryButton.setVisibility(View.VISIBLE);
+ sectionsLayout.removeAllViews();
+ statusText.setText("No se pudo cargar la lectura de hoy. Revisa la conexión e intenta de nuevo.\n\n"
+ + cleanErrorMessage(error));
+ sourceText.setText("Fuente prevista: Vatican News\n" + url);
+ }
+
+ private void addScriptureCard(String title, String overline, DailySection section, boolean featured) {
+ if (section == null || section.body.isEmpty()) {
+ return;
+ }
+
+ LinearLayout card = createCard(featured ? dp(22) : dp(18));
+
+ if (overline != null && !overline.isEmpty()) {
+ TextView overlineText = textView(overline.toUpperCase(spanishLocale), 12, COLOR_WARM, Typeface.BOLD);
+ card.addView(overlineText);
+ }
+
+ TextView titleText = textView(title, featured ? 28 : 22, COLOR_INK, Typeface.BOLD);
+ titleText.setIncludeFontPadding(false);
+ LinearLayout.LayoutParams titleParams = new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ );
+ titleParams.setMargins(0, overline == null ? 0 : dp(8), 0, dp(12));
+ card.addView(titleText, titleParams);
+
+ if (!section.introduction.isEmpty()) {
+ TextView introText = textView(section.introduction, 16, COLOR_MUTED, Typeface.BOLD);
+ introText.setLineSpacing(0, 1.14f);
+ resizableTextViews.add(introText);
+ card.addView(introText);
+ }
+
+ if (!section.reference.isEmpty()) {
+ TextView referenceText = textView(section.reference, 15, COLOR_ACCENT, Typeface.BOLD);
+ referenceText.setGravity(Gravity.CENTER_VERTICAL);
+ referenceText.setBackground(roundedRect(Color.rgb(229, 244, 240), dp(8), Color.TRANSPARENT, 0));
+ referenceText.setPadding(dp(10), dp(6), dp(10), dp(6));
+ LinearLayout.LayoutParams referenceParams = new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ );
+ referenceParams.setMargins(0, dp(12), 0, dp(14));
+ card.addView(referenceText, referenceParams);
+ }
+
+ TextView bodyText = textView(section.body, Math.round(readingFontSp), COLOR_INK, Typeface.NORMAL);
+ bodyText.setLineSpacing(dp(4), 1.16f);
+ resizableTextViews.add(bodyText);
+ card.addView(bodyText);
+
+ addCardToSections(card);
+ }
+
+ private void addReflectionCard(DailySection section) {
+ if (section == null || section.body.isEmpty()) {
+ return;
+ }
+
+ LinearLayout card = createCard(dp(18));
+
+ TextView title = textView("Las palabras de los Papas", 22, COLOR_INK, Typeface.BOLD);
+ title.setIncludeFontPadding(false);
+ card.addView(title);
+
+ TextView body = textView(section.body, Math.round(readingFontSp), COLOR_INK, Typeface.NORMAL);
+ body.setLineSpacing(dp(4), 1.16f);
+ LinearLayout.LayoutParams bodyParams = new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ );
+ bodyParams.setMargins(0, dp(14), 0, 0);
+ card.addView(body, bodyParams);
+ resizableTextViews.add(body);
+
+ addCardToSections(card);
+ }
+
+ private LinearLayout createCard(int padding) {
+ LinearLayout card = new LinearLayout(this);
+ card.setOrientation(LinearLayout.VERTICAL);
+ card.setPadding(padding, padding, padding, padding);
+ card.setBackground(roundedRect(COLOR_CARD, dp(8), Color.rgb(229, 232, 230), dp(1)));
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ card.setElevation(dp(1));
+ }
+ return card;
+ }
+
+ private void addCardToSections(View card) {
+ LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ );
+ params.setMargins(0, 0, 0, dp(16));
+ sectionsLayout.addView(card, params);
+ }
+
+ private void applyReadingFontSize() {
+ for (TextView textView : resizableTextViews) {
+ textView.setTextSize(readingFontSp);
+ }
+ }
+
+ private String download(String urlText) throws IOException {
+ HttpURLConnection connection = (HttpURLConnection) new URL(urlText).openConnection();
+ connection.setConnectTimeout(12000);
+ connection.setReadTimeout(12000);
+ connection.setRequestProperty("User-Agent", "BibliaDiaria/1.0 Android");
+ connection.setRequestProperty("Accept-Language", "es-ES,es;q=0.9");
+
+ int responseCode = connection.getResponseCode();
+ if (responseCode < 200 || responseCode >= 300) {
+ throw new IOException("Vatican News respondió con código " + responseCode + ".");
+ }
+
+ try (InputStream stream = connection.getInputStream()) {
+ return readStream(stream);
+ } finally {
+ connection.disconnect();
+ }
+ }
+
+ private String readStream(InputStream stream) throws IOException {
+ StringBuilder builder = new StringBuilder();
+ try (BufferedReader reader = new BufferedReader(
+ new InputStreamReader(stream, StandardCharsets.UTF_8))) {
+ String line;
+ while ((line = reader.readLine()) != null) {
+ builder.append(line).append('\n');
+ }
+ }
+ return builder.toString();
+ }
+
+ private DailyReading parseDailyReading(String html, Date date, String url) throws IOException {
+ String firstReadingText = extractHtmlContentByHeading(html, "Lectura del Día");
+ String gospelText = extractHtmlContentByHeading(html, "Evangelio del Día");
+ String papalText = extractHtmlContentByHeading(html, "Las palabras de los Papas");
+ String plainText = htmlToPlainText(html);
+
+ if (firstReadingText.isEmpty()) {
+ firstReadingText = extractSection(plainText, "Lectura del Día", "Evangelio del Día");
+ }
+ if (gospelText.isEmpty()) {
+ gospelText = extractSection(plainText, "Evangelio del Día", "Las palabras de los Papas");
+ }
+ if (papalText.isEmpty()) {
+ papalText = extractSection(
+ plainText,
+ "Las palabras de los Papas",
+ "Su contribución",
+ "Los textos de la Sagrada Escritura",
+ "Enviar",
+ "Otros eventos programados"
+ );
+ }
+
+ DailySection firstReading = DailySection.fromScripture(firstReadingText);
+ DailySection gospel = DailySection.fromScripture(gospelText);
+ DailySection papalWords = DailySection.reflection(cleanSectionText(papalText));
+
+ if (gospel.body.isEmpty() && firstReading.body.isEmpty() && papalWords.body.isEmpty()) {
+ throw new IOException("No encontré las secciones esperadas en la página.");
+ }
+
+ return new DailyReading(
+ formatDisplayDate(date),
+ extractLiturgicalTitle(html, plainText, date),
+ url,
+ firstReading,
+ gospel,
+ papalWords
+ );
+ }
+
+ private String extractHtmlContentByHeading(String html, String heading) {
+ String targetKey = headingKey(heading);
+ String lowerHtml = html.toLowerCase(Locale.US);
+ int searchFrom = 0;
+
+ while (searchFrom < html.length()) {
+ int h2Start = lowerHtml.indexOf("', h2Start);
+ int h2Close = lowerHtml.indexOf("
", h2OpenEnd + 1);
+ if (h2OpenEnd < 0 || h2Close < 0) {
+ return "";
+ }
+
+ String h2Text = htmlFragmentToText(html.substring(h2OpenEnd + 1, h2Close));
+ if (headingKey(h2Text).equals(targetKey)) {
+ int sectionStart = lowerHtml.lastIndexOf("", h2Close);
+ if (sectionStart < 0 || sectionEnd < 0) {
+ return "";
+ }
+ sectionEnd += "".length();
+
+ int contentTagStart = findTagWithClass(
+ html,
+ "div",
+ "section__content",
+ h2Close,
+ sectionEnd
+ );
+ if (contentTagStart < 0) {
+ return "";
+ }
+
+ int contentOpenEnd = html.indexOf('>', contentTagStart);
+ int contentClose = findMatchingClosingTag(html, contentTagStart, "div", sectionEnd);
+ if (contentOpenEnd < 0 || contentClose < 0 || contentClose <= contentOpenEnd) {
+ return "";
+ }
+
+ return cleanSectionText(htmlFragmentToText(html.substring(contentOpenEnd + 1, contentClose)));
+ }
+
+ searchFrom = h2Close + "".length();
+ }
+
+ return "";
+ }
+
+ private int findTagWithClass(String html, String tagName, String className, int start, int end) {
+ String lowerHtml = html.toLowerCase(Locale.US);
+ String tagStart = "<" + tagName.toLowerCase(Locale.US);
+ String classKey = className.toLowerCase(Locale.US);
+ int searchFrom = start;
+
+ while (searchFrom >= 0 && searchFrom < end) {
+ int tagIndex = lowerHtml.indexOf(tagStart, searchFrom);
+ if (tagIndex < 0 || tagIndex >= end) {
+ return -1;
+ }
+
+ int tagEnd = html.indexOf('>', tagIndex);
+ if (tagEnd < 0 || tagEnd >= end) {
+ return -1;
+ }
+
+ String openingTag = lowerHtml.substring(tagIndex, tagEnd + 1);
+ if (openingTag.contains("class=") && openingTag.contains(classKey)) {
+ return tagIndex;
+ }
+
+ searchFrom = tagEnd + 1;
+ }
+
+ return -1;
+ }
+
+ private int findMatchingClosingTag(String html, int openingTagStart, String tagName, int limit) {
+ String lowerHtml = html.toLowerCase(Locale.US);
+ String openToken = "<" + tagName.toLowerCase(Locale.US);
+ String closeToken = "" + tagName.toLowerCase(Locale.US) + ">";
+ int depth = 0;
+ int searchFrom = openingTagStart;
+
+ while (searchFrom >= 0 && searchFrom < limit) {
+ int nextOpen = lowerHtml.indexOf(openToken, searchFrom);
+ int nextClose = lowerHtml.indexOf(closeToken, searchFrom);
+
+ if (nextClose < 0 || nextClose >= limit) {
+ return -1;
+ }
+
+ if (nextOpen >= 0 && nextOpen < nextClose && nextOpen < limit) {
+ int openEnd = html.indexOf('>', nextOpen);
+ if (openEnd < 0 || openEnd >= limit) {
+ return -1;
+ }
+ String openingTag = html.substring(nextOpen, openEnd + 1).trim();
+ if (!openingTag.endsWith("/>")) {
+ depth++;
+ }
+ searchFrom = openEnd + 1;
+ } else {
+ depth--;
+ if (depth == 0) {
+ return nextClose;
+ }
+ searchFrom = nextClose + closeToken.length();
+ }
+ }
+
+ return -1;
+ }
+
+ private String htmlFragmentToText(String html) {
+ return htmlToPlainText(html);
+ }
+
+ private String htmlToPlainText(String html) {
+ String scrubbed = html
+ .replaceAll("(?is)", " ")
+ .replaceAll("(?is)", " ")
+ .replaceAll("(?is)", " ")
+ .replaceAll("(?i)
", "\n")
+ .replaceAll("(?i)
", "\n")
+ .replaceAll("(?i)", "\n")
+ .replaceAll("(?i)", "\n")
+ .replaceAll("(?i)", "\n");
+
+ Spanned spanned;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ spanned = Html.fromHtml(scrubbed, Html.FROM_HTML_MODE_LEGACY);
+ } else {
+ spanned = Html.fromHtml(scrubbed);
+ }
+
+ return normalizeWhitespace(spanned.toString());
+ }
+
+ private String extractSection(String text, String startHeading, String... endHeadings) {
+ int start = text.indexOf(startHeading);
+ if (start < 0) {
+ return "";
+ }
+ start += startHeading.length();
+
+ int end = text.length();
+ for (String endHeading : endHeadings) {
+ int candidate = text.indexOf(endHeading, start);
+ if (candidate >= 0 && candidate < end) {
+ end = candidate;
+ }
+ }
+
+ return cleanSectionText(text.substring(start, end));
+ }
+
+ private String extractLiturgicalTitle(String html, String text, Date date) {
+ String htmlTitle = extractLiturgicalTitleFromHtml(html);
+ if (!htmlTitle.isEmpty()) {
+ return htmlTitle;
+ }
+
+ String dateToken = new SimpleDateFormat("dd/MM/yyyy", spanishLocale).format(date);
+ int start = text.indexOf("Fecha" + dateToken);
+ if (start >= 0) {
+ start += ("Fecha" + dateToken).length();
+ } else {
+ start = text.indexOf("Fecha");
+ if (start < 0) {
+ return "";
+ }
+ start += "Fecha".length();
+ }
+
+ int end = text.indexOf("La Palabra del día es", start);
+ if (end < 0) {
+ end = text.indexOf("Lectura del Día", start);
+ }
+ if (end < 0 || end <= start) {
+ return "";
+ }
+
+ String title = text.substring(start, end)
+ .replaceFirst("^\\s*\\d{1,2}/\\d{1,2}/\\d{4}\\s*", "");
+ return cleanSectionText(title);
+ }
+
+ private String extractLiturgicalTitleFromHtml(String html) {
+ int containerStart = findTagWithClass(
+ html,
+ "div",
+ "indicazioneLiturgica",
+ 0,
+ html.length()
+ );
+ if (containerStart < 0) {
+ return "";
+ }
+
+ int containerOpenEnd = html.indexOf('>', containerStart);
+ int containerClose = findMatchingClosingTag(html, containerStart, "div", html.length());
+ if (containerOpenEnd < 0 || containerClose < 0) {
+ return "";
+ }
+
+ return cleanSectionText(htmlFragmentToText(html.substring(containerOpenEnd + 1, containerClose)));
+ }
+
+ private String cleanSectionText(String text) {
+ String cleaned = normalizeWhitespace(text)
+ .replace("Cookie Policy", "")
+ .replace("I AGREE", "")
+ .trim();
+ cleaned = cleaned.replaceAll("(?m)^\\s*[•*]\\s*", "");
+ return cleaned.trim();
+ }
+
+ private String normalizeWhitespace(String text) {
+ String normalized = text.replace('\u00A0', ' ')
+ .replace("\r", "\n")
+ .replaceAll("[\\t\\x0B\\f]+", " ")
+ .replaceAll(" *\\n *", "\n")
+ .replaceAll("\\n{3,}", "\n\n")
+ .replaceAll(" {2,}", " ");
+ return normalized.trim();
+ }
+
+ private String headingKey(String text) {
+ String normalized = Normalizer.normalize(text, Normalizer.Form.NFD)
+ .replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
+ return normalizeWhitespace(normalized).toLowerCase(Locale.US);
+ }
+
+ private String cleanErrorMessage(Exception error) {
+ String message = error.getMessage();
+ if (message == null || message.trim().isEmpty()) {
+ return "Error desconocido.";
+ }
+ return message.trim();
+ }
+
+ private String buildVaticanUrl(Date date) {
+ String pathDate = new SimpleDateFormat("yyyy/MM/dd", Locale.US).format(date);
+ return "https://www.vaticannews.va/es/evangelio-de-hoy/" + pathDate + ".html";
+ }
+
+ private String formatDisplayDate(Date date) {
+ return new SimpleDateFormat("EEEE, d 'de' MMMM 'de' yyyy", spanishLocale).format(date);
+ }
+
+ private String formatMonthTitle(Date date) {
+ return new SimpleDateFormat("MMMM yyyy", spanishLocale).format(date);
+ }
+
+ private void updateDateChip() {
+ if (dateChipPrimary == null || dateChipSecondary == null || selectedDateCalendar == null) {
+ return;
+ }
+
+ Date selectedDate = selectedDateCalendar.getTime();
+ dateChipPrimary.setText(new SimpleDateFormat("EEE d", spanishLocale).format(selectedDate));
+ dateChipSecondary.setText(new SimpleDateFormat("MMM yyyy", spanishLocale).format(selectedDate));
+ }
+
+ private Calendar startOfDay(Calendar calendar) {
+ Calendar copy = (Calendar) calendar.clone();
+ copy.set(Calendar.HOUR_OF_DAY, 0);
+ copy.set(Calendar.MINUTE, 0);
+ copy.set(Calendar.SECOND, 0);
+ copy.set(Calendar.MILLISECOND, 0);
+ return copy;
+ }
+
+ private Calendar startOfMonth(Calendar calendar) {
+ Calendar copy = startOfDay(calendar);
+ copy.set(Calendar.DAY_OF_MONTH, 1);
+ return copy;
+ }
+
+ private boolean isSameDay(Calendar first, Calendar second) {
+ return first != null
+ && second != null
+ && first.get(Calendar.YEAR) == second.get(Calendar.YEAR)
+ && first.get(Calendar.DAY_OF_YEAR) == second.get(Calendar.DAY_OF_YEAR);
+ }
+
+ private TextView textView(String text, int sizeSp, int color, int style) {
+ TextView textView = new TextView(this);
+ textView.setText(text);
+ textView.setTextSize(sizeSp);
+ textView.setTextColor(color);
+ textView.setTypeface(Typeface.DEFAULT, style);
+ textView.setIncludeFontPadding(true);
+ return textView;
+ }
+
+ private GradientDrawable roundedRect(int color, int radius, int strokeColor, int strokeWidth) {
+ GradientDrawable drawable = new GradientDrawable();
+ drawable.setShape(GradientDrawable.RECTANGLE);
+ drawable.setColor(color);
+ drawable.setCornerRadius(radius);
+ if (strokeWidth > 0) {
+ drawable.setStroke(strokeWidth, strokeColor);
+ }
+ return drawable;
+ }
+
+ private GradientDrawable oval(int color) {
+ GradientDrawable drawable = new GradientDrawable();
+ drawable.setShape(GradientDrawable.OVAL);
+ drawable.setColor(color);
+ return drawable;
+ }
+
+ private int dp(int value) {
+ return Math.round(value * getResources().getDisplayMetrics().density);
+ }
+
+ private static class DailyReading {
+ final String displayDate;
+ final String liturgicalTitle;
+ final String sourceUrl;
+ final DailySection firstReading;
+ final DailySection gospel;
+ final DailySection papalWords;
+
+ DailyReading(
+ String displayDate,
+ String liturgicalTitle,
+ String sourceUrl,
+ DailySection firstReading,
+ DailySection gospel,
+ DailySection papalWords
+ ) {
+ this.displayDate = displayDate;
+ this.liturgicalTitle = liturgicalTitle;
+ this.sourceUrl = sourceUrl;
+ this.firstReading = firstReading;
+ this.gospel = gospel;
+ this.papalWords = papalWords;
+ }
+ }
+
+ private static class DailySection {
+ final String introduction;
+ final String reference;
+ final String body;
+
+ DailySection(String introduction, String reference, String body) {
+ this.introduction = introduction;
+ this.reference = reference;
+ this.body = body;
+ }
+
+ static DailySection fromScripture(String sectionText) {
+ List lines = nonEmptyLines(sectionText);
+ if (lines.size() >= 3) {
+ String introduction = lines.get(0);
+ String reference = lines.get(1);
+ StringBuilder body = new StringBuilder();
+ for (int i = 2; i < lines.size(); i++) {
+ if (body.length() > 0) {
+ body.append("\n\n");
+ }
+ body.append(lines.get(i));
+ }
+ return new DailySection(introduction, reference, body.toString().trim());
+ }
+ return new DailySection("", "", sectionText.trim());
+ }
+
+ static DailySection reflection(String body) {
+ return new DailySection("", "", body.trim());
+ }
+
+ private static List nonEmptyLines(String text) {
+ List lines = new ArrayList<>();
+ String[] rawLines = text.split("\\n+");
+ for (String rawLine : rawLines) {
+ String line = rawLine.trim();
+ if (!line.isEmpty()) {
+ lines.add(line);
+ }
+ }
+ return lines;
+ }
+ }
+}
diff --git a/app/src/main/res/drawable/ic_launcher.xml b/app/src/main/res/drawable/ic_launcher.xml
new file mode 100644
index 0000000..80ce5bd
--- /dev/null
+++ b/app/src/main/res/drawable/ic_launcher.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..e929b87
--- /dev/null
+++ b/app/src/main/res/values/strings.xml
@@ -0,0 +1,4 @@
+
+
+ Biblia Diaria
+
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..054e238
--- /dev/null
+++ b/app/src/main/res/values/styles.xml
@@ -0,0 +1,11 @@
+
+
+
+
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..48d2fa1
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,3 @@
+plugins {
+ id "com.android.application" version "8.7.3" apply false
+}
diff --git a/build/reports/problems/problems-report.html b/build/reports/problems/problems-report.html
new file mode 100644
index 0000000..6b5d013
--- /dev/null
+++ b/build/reports/problems/problems-report.html
@@ -0,0 +1,663 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Gradle Configuration Cache
+
+
+
+
+
+
+ Loading...
+
+
+
+
+
+
+
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..667b332
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,3 @@
+android.useAndroidX=false
+android.nonTransitiveRClass=true
+org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..8bdaf60
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..2a84e18
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,7 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip
+networkTimeout=10000
+validateDistributionUrl=true
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
new file mode 100644
index 0000000..ef07e01
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,251 @@
+#!/bin/sh
+
+#
+# Copyright © 2015 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+
+##############################################################################
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+CLASSPATH="\\\"\\\""
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ if ! command -v java >/dev/null 2>&1
+ then
+ die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+
+# 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"'
+
+# Collect all arguments for the java command:
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+# and any embedded shellness will be escaped.
+# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+# treated as '${Hostname}' itself on the command line.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
+ "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..db3a6ac
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,94 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+@rem SPDX-License-Identifier: Apache-2.0
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/local.properties b/local.properties
new file mode 100644
index 0000000..340ab4a
--- /dev/null
+++ b/local.properties
@@ -0,0 +1,8 @@
+## This file must *NOT* be checked into Version Control Systems,
+# as it contains information specific to your local configuration.
+#
+# Location of the SDK. This is only used by Gradle.
+# For customization when using a Version Control System, please read the
+# header note.
+#Wed May 20 19:45:28 PDT 2026
+sdk.dir=C\:\\Users\\360he\\AppData\\Local\\Android\\Sdk
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..3d5d788
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,18 @@
+pluginManagement {
+ repositories {
+ google()
+ mavenCentral()
+ gradlePluginPortal()
+ }
+}
+
+dependencyResolutionManagement {
+ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+
+rootProject.name = "Biblia Diaria"
+include ":app"