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 = ""; + 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"