diff --git a/.gitignore b/.gitignore index 9a38df1..8572e9d 100644 --- a/.gitignore +++ b/.gitignore @@ -46,4 +46,8 @@ Thumbs.db gen/ /android-signing-keystore.jks /secrets.properties -/java_pid9513.hprof +*.hprof + +# Other considerations +*.html +*~ diff --git a/README.md b/README.md index d5f42de..b920969 100644 --- a/README.md +++ b/README.md @@ -1,62 +1,79 @@ # Pilldroid +> I apologize. For know, even string exist in English, _Pilldroid_ is a French +> only application. That because the global drugs database contain only French +> drug's nommage. If you can find a way to provide another country global +> database,feel free to [contact +> me](mailto://pilldroid@foucry,net?Subject="Another database") +> Pilldroid est une application de gestion de stock **théorique** de médicament à destination des personnes résidant en France. -## Ce que n'est pas Pilldroid + + Get it on F-Droid + -- Pilldroid n'est pas un pilulier. Pilldroid ne vous rappellera pas de prendre -vos médicaments, c'est **VOTRE** responsabilité ; +## Qu'est-ce que Pilldroid ? -- Pilldroid n'est pas fiable, ce n'est qu'une aide. Seul votre stock réel est bon -; - -- Pilldroid ne vous surveille pas. +Pilldroid est une applicaton de gestion de stock _théorique_ de médicaments, +pour téléphone Android©. ## Pourquoi « Stock théorique » ? -Pilldroid ne sait (et n'a aucun moyen de savoir) si vous avez ou non pris vos -médicaments. Pilldroid effectue, simple calcul : `stock connus - prise par +Pilldroid ne sait ipas (et n'a aucun moyen de savoir) si vous avez ou non pris vos +médicaments. Pilldroid effectue, simple calcul : `stock connu - prise par jour`. Ce calcul est fait tous les jours entre 11h et midi. + ## De quelles autorisations l'application Pilldroid a-t-elle besoin ? - Pilldroid a besoin de savoir que le téléphone a été redémarré pour elle-même -lancer son cycle de réveil journalier ; +lancer son cycle de réveil journalier. - Pilldroid a besoin d'accéder à l'appareil photo de votre téléphone pour - scanner le code barre des boites de médicaments ; -- Pilldroid a besoin de pouvoir vous envoyer des alarmes ; -- Pilldroid a besoin de faire vibrer le téléphone pour les alarmes ; + scanner le code-barres des boîtes de médicaments. +- Pilldroid a besoin de pouvoir vous envoyer des notifications. +- Pilldroid a besoin de faire vibrer le téléphone pour les notifications. - ## L'application Pilldroid embarque-t-elle des bibliothèques tierce ? -Oui. Pour la lecture de code barre, Pilldroid utilise le projet +Oui. Pour la lecture de code-barres, Pilldroid utilise le projet [zxing](https://github.com/journeyapps/zxing-android-embedded) lui-même libre et ouvert. - ## L'application Pilldroid contient-elle des pisteurs ? -[NON !](https://reports.exodus-privacy.eu.org/fr/reports/234531/) +[NON !](https://reports.exodus-privacy.eu.org/fr/reports/net.foucry.pilldroid/latest/) ## D'où viennent les données de Pilldroid ? Elles sont issues de plusieurs fichiers de l'Agence pour la Sécurité des -Médicaments, agrégés dans une base de données grâce à script Python qui sera -prochainement mis sur mon compte `github`. +Médicaments, agrégés dans une base de données grâce à script Python qui est disponible sur le dépôt [TransformMeds](https://github.com/jfoucry/TransformMeds). + +## Ce que n'est pas Pilldroid + +- Pilldroid n'est pas un pilulier. Pilldroid ne vous rappellera pas de prendre +vos médicaments, c'est **VOTRE** responsabilité. +- Pilldroid n'est pas fiable, ce n'est qu'une aide. Seul votre stock réel est bon. ## Comment peut-on participer à Pilldroid ? Mon code est de piètre qualité et mes connaissances Java maigrelettes toute -amélioration **que je comprends** sera la bienvenue (je n'ai pas pigé les -`lambda` par exemple). +amélioration **que je comprends** sera la bienvenue. Marché de niche, Pilldroid a besoin de testeuses et testeurs. -Prochainement, vous pourrez glisser quelques menues monnaies dans une tirelire -en ligne. +Et si vous ne pouvez-vous pas par ces moyens, vous pouvez m'aider à payer mon +électricité et mon accès internet : + + ## L'application Pilldroid dispose telle d'un site web ? -Oui, [Pilldroid](https://pilldroid.foucry.net) +Oui, bien sûr : [Pilldroid](https://pilldroid.foucry.net) + +## Contact + +Le site web en premier lieu et l'adresse mail +[pilldroid@foucry.net](mailto://pilldroid@foucry.net:Subject="Contact") diff --git a/app/build.gradle b/app/build.gradle index 992003e..250f593 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,7 +18,7 @@ else { android { signingConfigs { release { - storeFile file("../android-signing-keystore.jks") + storeFile rootProject.file("android-signing-keystore.jks") storePassword secretProperties['signing_keystore_password'] keyAlias secretProperties['signing_key_alias'] keyPassword secretProperties['signing_key_password'] @@ -30,21 +30,26 @@ android { keyPassword secretProperties['signing_key_password'] } } - compileSdk 31 + compileSdk 34 defaultConfig { applicationId "net.foucry.pilldroid" + minSdkVersion defaultMinSdkVersion targetSdkVersion defaultTargetSdkVersion versionCode 350 versionName "v0.350-beta" multiDexEnabled true + javaCompileOptions { annotationProcessorOptions { arguments += ["room.schemaLocation": "$projectDir/schemas".toString()] } } } + buildFeatures { + buildConfig = true + } buildTypes { debug { @@ -59,7 +64,7 @@ android { signingConfig signingConfigs.release } } - flavorDimensions "version" + flavorDimensions = ["version"] productFlavors { dev { resValue "string", "app_name", "PillDroid dev" @@ -77,7 +82,7 @@ android { targetCompatibility JavaVersion.VERSION_11 } - buildToolsVersion = "32.0.0" + namespace 'net.foucry.pilldroid' allprojects { tasks.withType(JavaCompile) { @@ -92,26 +97,28 @@ repositories { sourceSets { main { java { - exclude 'net/foucry/pilldroid/scanActivity.java' + exclude 'net/foucry/pilldroid/ViewDialog.java' } } } + dependencies { - implementation "androidx.room:room-common:2.4.2" - annotationProcessor "androidx.room:room-compiler:2.4.2" - implementation "androidx.room:room-testing:2.4.2" - implementation "androidx.room:room-rxjava3:2.4.2" - implementation "androidx.room:room-runtime:2.4.2" + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation "androidx.room:room-common:2.6.1" + annotationProcessor "androidx.room:room-compiler:2.6.1" + implementation "androidx.room:room-testing:2.6.1" + implementation "androidx.room:room-rxjava3:2.6.1" + implementation "androidx.room:room-runtime:2.6.1" implementation fileTree(include: ['*.jar'], dir: 'libs') testImplementation 'junit:junit:4.13.2' - implementation 'androidx.appcompat:appcompat:1.4.2' - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.6.1' + implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'androidx.recyclerview:recyclerview:1.3.2' + implementation 'com.google.android.material:material:1.11.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'com.journeyapps:zxing-android-embedded:4.3.0' - implementation 'androidx.core:core:1.8.0' + implementation 'androidx.core:core:1.12.0' - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.2.0' -} \ No newline at end of file + //coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.0' +} diff --git a/app/build_BACKUP_2537.gradle b/app/build_BACKUP_2537.gradle deleted file mode 100644 index 9314be9..0000000 --- a/app/build_BACKUP_2537.gradle +++ /dev/null @@ -1,121 +0,0 @@ -//noinspection GradleCompatible -apply plugin: 'com.android.application' - -// Try reading secrets from file -def secretsPropertiesFile = rootProject.file("secrets.properties") -def secretProperties = new Properties() - -if (secretsPropertiesFile.exists()) { - secretProperties.load(new FileInputStream(secretsPropertiesFile)) -} -// Otherwise read from environment variables, this happens in CI -else { - secretProperties.setProperty("signing_keystore_password", "${System.getenv('signing_keystore_password')}") - secretProperties.setProperty("signing_key_password", "${System.getenv('signing_key_password')}") - secretProperties.setProperty("signing_key_alias", "${System.getenv('signing_key_alias')}") -} - -android { - signingConfigs { - release { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_release_alias_key'] - keyPassword secretProperties['signing_release_key_password'] - } - prerelease { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_pre-release_key_alias'] - keyPassword secretProperties['signing_pre-release_key_password'] - } - } - compileSdkVersion 31 - - defaultConfig { - applicationId "net.foucry.pilldroid" - minSdkVersion defaultMinSdkVersion - targetSdkVersion defaultTargetSdkVersion - versionCode 100 - versionName "v0.100-beta" - multiDexEnabled true - } - - buildTypes { - debug { - minifyEnabled false - debuggable true - applicationIdSuffix ".debug" - } - release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.release - } - prerelease { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.prerelease - } - } - flavorDimensions "version" - productFlavors { - dev { - resValue "string", "app_name", "PillDroid dev" - dimension ="version" - } - - product { - resValue "string", "app_name", "PillDroid" - dimension ="version" - } - preproduct { - resValue "string", "app_name", "PillDroid Pre-Release" - dimension ="version" - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 - } - - buildToolsVersion '32.0.0' - - allprojects { - tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - } - } -} - -repositories { - mavenCentral() -} -sourceSets { - main { - java { - exclude 'net/foucry/pilldroid/scanActivity.java' - } - } -} -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - testImplementation 'junit:junit:4.13.2' - -<<<<<<< HEAD - implementation 'androidx.appcompat:appcompat:1.4.1' -======= - implementation 'androidx.appcompat:appcompat:1.4.0' ->>>>>>> 5fe29e5 (Change compileSskVersion) - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.5.0' - implementation 'androidx.legacy:legacy-support-v4:1.0.0' - - implementation 'com.journeyapps:zxing-android-embedded:4.3.0' - implementation 'androidx.core:core:1.7.0' - - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' -} diff --git a/app/build_BACKUP_2948.gradle b/app/build_BACKUP_2948.gradle deleted file mode 100644 index 9314be9..0000000 --- a/app/build_BACKUP_2948.gradle +++ /dev/null @@ -1,121 +0,0 @@ -//noinspection GradleCompatible -apply plugin: 'com.android.application' - -// Try reading secrets from file -def secretsPropertiesFile = rootProject.file("secrets.properties") -def secretProperties = new Properties() - -if (secretsPropertiesFile.exists()) { - secretProperties.load(new FileInputStream(secretsPropertiesFile)) -} -// Otherwise read from environment variables, this happens in CI -else { - secretProperties.setProperty("signing_keystore_password", "${System.getenv('signing_keystore_password')}") - secretProperties.setProperty("signing_key_password", "${System.getenv('signing_key_password')}") - secretProperties.setProperty("signing_key_alias", "${System.getenv('signing_key_alias')}") -} - -android { - signingConfigs { - release { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_release_alias_key'] - keyPassword secretProperties['signing_release_key_password'] - } - prerelease { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_pre-release_key_alias'] - keyPassword secretProperties['signing_pre-release_key_password'] - } - } - compileSdkVersion 31 - - defaultConfig { - applicationId "net.foucry.pilldroid" - minSdkVersion defaultMinSdkVersion - targetSdkVersion defaultTargetSdkVersion - versionCode 100 - versionName "v0.100-beta" - multiDexEnabled true - } - - buildTypes { - debug { - minifyEnabled false - debuggable true - applicationIdSuffix ".debug" - } - release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.release - } - prerelease { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.prerelease - } - } - flavorDimensions "version" - productFlavors { - dev { - resValue "string", "app_name", "PillDroid dev" - dimension ="version" - } - - product { - resValue "string", "app_name", "PillDroid" - dimension ="version" - } - preproduct { - resValue "string", "app_name", "PillDroid Pre-Release" - dimension ="version" - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 - } - - buildToolsVersion '32.0.0' - - allprojects { - tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - } - } -} - -repositories { - mavenCentral() -} -sourceSets { - main { - java { - exclude 'net/foucry/pilldroid/scanActivity.java' - } - } -} -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - testImplementation 'junit:junit:4.13.2' - -<<<<<<< HEAD - implementation 'androidx.appcompat:appcompat:1.4.1' -======= - implementation 'androidx.appcompat:appcompat:1.4.0' ->>>>>>> 5fe29e5 (Change compileSskVersion) - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.5.0' - implementation 'androidx.legacy:legacy-support-v4:1.0.0' - - implementation 'com.journeyapps:zxing-android-embedded:4.3.0' - implementation 'androidx.core:core:1.7.0' - - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' -} diff --git a/app/build_BACKUP_3178.gradle b/app/build_BACKUP_3178.gradle deleted file mode 100644 index 9314be9..0000000 --- a/app/build_BACKUP_3178.gradle +++ /dev/null @@ -1,121 +0,0 @@ -//noinspection GradleCompatible -apply plugin: 'com.android.application' - -// Try reading secrets from file -def secretsPropertiesFile = rootProject.file("secrets.properties") -def secretProperties = new Properties() - -if (secretsPropertiesFile.exists()) { - secretProperties.load(new FileInputStream(secretsPropertiesFile)) -} -// Otherwise read from environment variables, this happens in CI -else { - secretProperties.setProperty("signing_keystore_password", "${System.getenv('signing_keystore_password')}") - secretProperties.setProperty("signing_key_password", "${System.getenv('signing_key_password')}") - secretProperties.setProperty("signing_key_alias", "${System.getenv('signing_key_alias')}") -} - -android { - signingConfigs { - release { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_release_alias_key'] - keyPassword secretProperties['signing_release_key_password'] - } - prerelease { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_pre-release_key_alias'] - keyPassword secretProperties['signing_pre-release_key_password'] - } - } - compileSdkVersion 31 - - defaultConfig { - applicationId "net.foucry.pilldroid" - minSdkVersion defaultMinSdkVersion - targetSdkVersion defaultTargetSdkVersion - versionCode 100 - versionName "v0.100-beta" - multiDexEnabled true - } - - buildTypes { - debug { - minifyEnabled false - debuggable true - applicationIdSuffix ".debug" - } - release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.release - } - prerelease { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.prerelease - } - } - flavorDimensions "version" - productFlavors { - dev { - resValue "string", "app_name", "PillDroid dev" - dimension ="version" - } - - product { - resValue "string", "app_name", "PillDroid" - dimension ="version" - } - preproduct { - resValue "string", "app_name", "PillDroid Pre-Release" - dimension ="version" - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 - } - - buildToolsVersion '32.0.0' - - allprojects { - tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - } - } -} - -repositories { - mavenCentral() -} -sourceSets { - main { - java { - exclude 'net/foucry/pilldroid/scanActivity.java' - } - } -} -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - testImplementation 'junit:junit:4.13.2' - -<<<<<<< HEAD - implementation 'androidx.appcompat:appcompat:1.4.1' -======= - implementation 'androidx.appcompat:appcompat:1.4.0' ->>>>>>> 5fe29e5 (Change compileSskVersion) - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.5.0' - implementation 'androidx.legacy:legacy-support-v4:1.0.0' - - implementation 'com.journeyapps:zxing-android-embedded:4.3.0' - implementation 'androidx.core:core:1.7.0' - - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' -} diff --git a/app/build_BACKUP_3356.gradle b/app/build_BACKUP_3356.gradle deleted file mode 100644 index 9314be9..0000000 --- a/app/build_BACKUP_3356.gradle +++ /dev/null @@ -1,121 +0,0 @@ -//noinspection GradleCompatible -apply plugin: 'com.android.application' - -// Try reading secrets from file -def secretsPropertiesFile = rootProject.file("secrets.properties") -def secretProperties = new Properties() - -if (secretsPropertiesFile.exists()) { - secretProperties.load(new FileInputStream(secretsPropertiesFile)) -} -// Otherwise read from environment variables, this happens in CI -else { - secretProperties.setProperty("signing_keystore_password", "${System.getenv('signing_keystore_password')}") - secretProperties.setProperty("signing_key_password", "${System.getenv('signing_key_password')}") - secretProperties.setProperty("signing_key_alias", "${System.getenv('signing_key_alias')}") -} - -android { - signingConfigs { - release { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_release_alias_key'] - keyPassword secretProperties['signing_release_key_password'] - } - prerelease { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_pre-release_key_alias'] - keyPassword secretProperties['signing_pre-release_key_password'] - } - } - compileSdkVersion 31 - - defaultConfig { - applicationId "net.foucry.pilldroid" - minSdkVersion defaultMinSdkVersion - targetSdkVersion defaultTargetSdkVersion - versionCode 100 - versionName "v0.100-beta" - multiDexEnabled true - } - - buildTypes { - debug { - minifyEnabled false - debuggable true - applicationIdSuffix ".debug" - } - release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.release - } - prerelease { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.prerelease - } - } - flavorDimensions "version" - productFlavors { - dev { - resValue "string", "app_name", "PillDroid dev" - dimension ="version" - } - - product { - resValue "string", "app_name", "PillDroid" - dimension ="version" - } - preproduct { - resValue "string", "app_name", "PillDroid Pre-Release" - dimension ="version" - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 - } - - buildToolsVersion '32.0.0' - - allprojects { - tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - } - } -} - -repositories { - mavenCentral() -} -sourceSets { - main { - java { - exclude 'net/foucry/pilldroid/scanActivity.java' - } - } -} -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - testImplementation 'junit:junit:4.13.2' - -<<<<<<< HEAD - implementation 'androidx.appcompat:appcompat:1.4.1' -======= - implementation 'androidx.appcompat:appcompat:1.4.0' ->>>>>>> 5fe29e5 (Change compileSskVersion) - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.5.0' - implementation 'androidx.legacy:legacy-support-v4:1.0.0' - - implementation 'com.journeyapps:zxing-android-embedded:4.3.0' - implementation 'androidx.core:core:1.7.0' - - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' -} diff --git a/app/build_BASE_2537.gradle b/app/build_BASE_2537.gradle deleted file mode 100644 index 4abead4..0000000 --- a/app/build_BASE_2537.gradle +++ /dev/null @@ -1,117 +0,0 @@ -//noinspection GradleCompatible -apply plugin: 'com.android.application' - -// Try reading secrets from file -def secretsPropertiesFile = rootProject.file("secrets.properties") -def secretProperties = new Properties() - -if (secretsPropertiesFile.exists()) { - secretProperties.load(new FileInputStream(secretsPropertiesFile)) -} -// Otherwise read from environment variables, this happens in CI -else { - secretProperties.setProperty("signing_keystore_password", "${System.getenv('signing_keystore_password')}") - secretProperties.setProperty("signing_key_password", "${System.getenv('signing_key_password')}") - secretProperties.setProperty("signing_key_alias", "${System.getenv('signing_key_alias')}") -} - -android { - signingConfigs { - release { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_release_alias_key'] - keyPassword secretProperties['signing_release_key_password'] - } - prerelease { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_pre-release_key_alias'] - keyPassword secretProperties['signing_pre-release_key_password'] - } - } - compileSdkVersion 30 - - defaultConfig { - applicationId "net.foucry.pilldroid" - minSdkVersion defaultMinSdkVersion - targetSdkVersion defaultTargetSdkVersion - versionCode 100 - versionName "v0.100-beta" - multiDexEnabled true - } - - buildTypes { - debug { - minifyEnabled false - debuggable true - applicationIdSuffix ".debug" - } - release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.release - } - prerelease { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.prerelease - } - } - flavorDimensions "version" - productFlavors { - dev { - resValue "string", "app_name", "PillDroid dev" - dimension ="version" - } - - product { - resValue "string", "app_name", "PillDroid" - dimension ="version" - } - preproduct { - resValue "string", "app_name", "PillDroid Pre-Release" - dimension ="version" - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 - } - - buildToolsVersion '32.0.0' - - allprojects { - tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - } - } -} - -repositories { - mavenCentral() -} -sourceSets { - main { - java { - exclude 'net/foucry/pilldroid/scanActivity.java' - } - } -} -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - testImplementation 'junit:junit:4.13.2' - - implementation 'androidx.appcompat:appcompat:1.2.0' - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.4.0' - implementation 'androidx.legacy:legacy-support-v4:1.0.0' - - implementation 'com.journeyapps:zxing-android-embedded:4.3.0' - implementation 'androidx.core:core:1.6.0' - - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' -} diff --git a/app/build_BASE_2948.gradle b/app/build_BASE_2948.gradle deleted file mode 100644 index 4abead4..0000000 --- a/app/build_BASE_2948.gradle +++ /dev/null @@ -1,117 +0,0 @@ -//noinspection GradleCompatible -apply plugin: 'com.android.application' - -// Try reading secrets from file -def secretsPropertiesFile = rootProject.file("secrets.properties") -def secretProperties = new Properties() - -if (secretsPropertiesFile.exists()) { - secretProperties.load(new FileInputStream(secretsPropertiesFile)) -} -// Otherwise read from environment variables, this happens in CI -else { - secretProperties.setProperty("signing_keystore_password", "${System.getenv('signing_keystore_password')}") - secretProperties.setProperty("signing_key_password", "${System.getenv('signing_key_password')}") - secretProperties.setProperty("signing_key_alias", "${System.getenv('signing_key_alias')}") -} - -android { - signingConfigs { - release { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_release_alias_key'] - keyPassword secretProperties['signing_release_key_password'] - } - prerelease { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_pre-release_key_alias'] - keyPassword secretProperties['signing_pre-release_key_password'] - } - } - compileSdkVersion 30 - - defaultConfig { - applicationId "net.foucry.pilldroid" - minSdkVersion defaultMinSdkVersion - targetSdkVersion defaultTargetSdkVersion - versionCode 100 - versionName "v0.100-beta" - multiDexEnabled true - } - - buildTypes { - debug { - minifyEnabled false - debuggable true - applicationIdSuffix ".debug" - } - release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.release - } - prerelease { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.prerelease - } - } - flavorDimensions "version" - productFlavors { - dev { - resValue "string", "app_name", "PillDroid dev" - dimension ="version" - } - - product { - resValue "string", "app_name", "PillDroid" - dimension ="version" - } - preproduct { - resValue "string", "app_name", "PillDroid Pre-Release" - dimension ="version" - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 - } - - buildToolsVersion '32.0.0' - - allprojects { - tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - } - } -} - -repositories { - mavenCentral() -} -sourceSets { - main { - java { - exclude 'net/foucry/pilldroid/scanActivity.java' - } - } -} -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - testImplementation 'junit:junit:4.13.2' - - implementation 'androidx.appcompat:appcompat:1.2.0' - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.4.0' - implementation 'androidx.legacy:legacy-support-v4:1.0.0' - - implementation 'com.journeyapps:zxing-android-embedded:4.3.0' - implementation 'androidx.core:core:1.6.0' - - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' -} diff --git a/app/build_BASE_3178.gradle b/app/build_BASE_3178.gradle deleted file mode 100644 index 4abead4..0000000 --- a/app/build_BASE_3178.gradle +++ /dev/null @@ -1,117 +0,0 @@ -//noinspection GradleCompatible -apply plugin: 'com.android.application' - -// Try reading secrets from file -def secretsPropertiesFile = rootProject.file("secrets.properties") -def secretProperties = new Properties() - -if (secretsPropertiesFile.exists()) { - secretProperties.load(new FileInputStream(secretsPropertiesFile)) -} -// Otherwise read from environment variables, this happens in CI -else { - secretProperties.setProperty("signing_keystore_password", "${System.getenv('signing_keystore_password')}") - secretProperties.setProperty("signing_key_password", "${System.getenv('signing_key_password')}") - secretProperties.setProperty("signing_key_alias", "${System.getenv('signing_key_alias')}") -} - -android { - signingConfigs { - release { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_release_alias_key'] - keyPassword secretProperties['signing_release_key_password'] - } - prerelease { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_pre-release_key_alias'] - keyPassword secretProperties['signing_pre-release_key_password'] - } - } - compileSdkVersion 30 - - defaultConfig { - applicationId "net.foucry.pilldroid" - minSdkVersion defaultMinSdkVersion - targetSdkVersion defaultTargetSdkVersion - versionCode 100 - versionName "v0.100-beta" - multiDexEnabled true - } - - buildTypes { - debug { - minifyEnabled false - debuggable true - applicationIdSuffix ".debug" - } - release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.release - } - prerelease { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.prerelease - } - } - flavorDimensions "version" - productFlavors { - dev { - resValue "string", "app_name", "PillDroid dev" - dimension ="version" - } - - product { - resValue "string", "app_name", "PillDroid" - dimension ="version" - } - preproduct { - resValue "string", "app_name", "PillDroid Pre-Release" - dimension ="version" - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 - } - - buildToolsVersion '32.0.0' - - allprojects { - tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - } - } -} - -repositories { - mavenCentral() -} -sourceSets { - main { - java { - exclude 'net/foucry/pilldroid/scanActivity.java' - } - } -} -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - testImplementation 'junit:junit:4.13.2' - - implementation 'androidx.appcompat:appcompat:1.2.0' - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.4.0' - implementation 'androidx.legacy:legacy-support-v4:1.0.0' - - implementation 'com.journeyapps:zxing-android-embedded:4.3.0' - implementation 'androidx.core:core:1.6.0' - - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' -} diff --git a/app/build_BASE_3356.gradle b/app/build_BASE_3356.gradle deleted file mode 100644 index 4abead4..0000000 --- a/app/build_BASE_3356.gradle +++ /dev/null @@ -1,117 +0,0 @@ -//noinspection GradleCompatible -apply plugin: 'com.android.application' - -// Try reading secrets from file -def secretsPropertiesFile = rootProject.file("secrets.properties") -def secretProperties = new Properties() - -if (secretsPropertiesFile.exists()) { - secretProperties.load(new FileInputStream(secretsPropertiesFile)) -} -// Otherwise read from environment variables, this happens in CI -else { - secretProperties.setProperty("signing_keystore_password", "${System.getenv('signing_keystore_password')}") - secretProperties.setProperty("signing_key_password", "${System.getenv('signing_key_password')}") - secretProperties.setProperty("signing_key_alias", "${System.getenv('signing_key_alias')}") -} - -android { - signingConfigs { - release { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_release_alias_key'] - keyPassword secretProperties['signing_release_key_password'] - } - prerelease { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_pre-release_key_alias'] - keyPassword secretProperties['signing_pre-release_key_password'] - } - } - compileSdkVersion 30 - - defaultConfig { - applicationId "net.foucry.pilldroid" - minSdkVersion defaultMinSdkVersion - targetSdkVersion defaultTargetSdkVersion - versionCode 100 - versionName "v0.100-beta" - multiDexEnabled true - } - - buildTypes { - debug { - minifyEnabled false - debuggable true - applicationIdSuffix ".debug" - } - release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.release - } - prerelease { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.prerelease - } - } - flavorDimensions "version" - productFlavors { - dev { - resValue "string", "app_name", "PillDroid dev" - dimension ="version" - } - - product { - resValue "string", "app_name", "PillDroid" - dimension ="version" - } - preproduct { - resValue "string", "app_name", "PillDroid Pre-Release" - dimension ="version" - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 - } - - buildToolsVersion '32.0.0' - - allprojects { - tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - } - } -} - -repositories { - mavenCentral() -} -sourceSets { - main { - java { - exclude 'net/foucry/pilldroid/scanActivity.java' - } - } -} -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - testImplementation 'junit:junit:4.13.2' - - implementation 'androidx.appcompat:appcompat:1.2.0' - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.4.0' - implementation 'androidx.legacy:legacy-support-v4:1.0.0' - - implementation 'com.journeyapps:zxing-android-embedded:4.3.0' - implementation 'androidx.core:core:1.6.0' - - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' -} diff --git a/app/build_LOCAL_2537.gradle b/app/build_LOCAL_2537.gradle deleted file mode 100644 index cc3eb2b..0000000 --- a/app/build_LOCAL_2537.gradle +++ /dev/null @@ -1,117 +0,0 @@ -//noinspection GradleCompatible -apply plugin: 'com.android.application' - -// Try reading secrets from file -def secretsPropertiesFile = rootProject.file("secrets.properties") -def secretProperties = new Properties() - -if (secretsPropertiesFile.exists()) { - secretProperties.load(new FileInputStream(secretsPropertiesFile)) -} -// Otherwise read from environment variables, this happens in CI -else { - secretProperties.setProperty("signing_keystore_password", "${System.getenv('signing_keystore_password')}") - secretProperties.setProperty("signing_key_password", "${System.getenv('signing_key_password')}") - secretProperties.setProperty("signing_key_alias", "${System.getenv('signing_key_alias')}") -} - -android { - signingConfigs { - release { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_release_alias_key'] - keyPassword secretProperties['signing_release_key_password'] - } - prerelease { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_pre-release_key_alias'] - keyPassword secretProperties['signing_pre-release_key_password'] - } - } - compileSdkVersion 31 - - defaultConfig { - applicationId "net.foucry.pilldroid" - minSdkVersion defaultMinSdkVersion - targetSdkVersion defaultTargetSdkVersion - versionCode 100 - versionName "v0.100-beta" - multiDexEnabled true - } - - buildTypes { - debug { - minifyEnabled false - debuggable true - applicationIdSuffix ".debug" - } - release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.release - } - prerelease { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.prerelease - } - } - flavorDimensions "version" - productFlavors { - dev { - resValue "string", "app_name", "PillDroid dev" - dimension ="version" - } - - product { - resValue "string", "app_name", "PillDroid" - dimension ="version" - } - preproduct { - resValue "string", "app_name", "PillDroid Pre-Release" - dimension ="version" - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 - } - - buildToolsVersion '32.0.0' - - allprojects { - tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - } - } -} - -repositories { - mavenCentral() -} -sourceSets { - main { - java { - exclude 'net/foucry/pilldroid/scanActivity.java' - } - } -} -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - testImplementation 'junit:junit:4.13.2' - - implementation 'androidx.appcompat:appcompat:1.4.1' - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.5.0' - implementation 'androidx.legacy:legacy-support-v4:1.0.0' - - implementation 'com.journeyapps:zxing-android-embedded:4.3.0' - implementation 'androidx.core:core:1.7.0' - - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' -} diff --git a/app/build_LOCAL_2948.gradle b/app/build_LOCAL_2948.gradle deleted file mode 100644 index cc3eb2b..0000000 --- a/app/build_LOCAL_2948.gradle +++ /dev/null @@ -1,117 +0,0 @@ -//noinspection GradleCompatible -apply plugin: 'com.android.application' - -// Try reading secrets from file -def secretsPropertiesFile = rootProject.file("secrets.properties") -def secretProperties = new Properties() - -if (secretsPropertiesFile.exists()) { - secretProperties.load(new FileInputStream(secretsPropertiesFile)) -} -// Otherwise read from environment variables, this happens in CI -else { - secretProperties.setProperty("signing_keystore_password", "${System.getenv('signing_keystore_password')}") - secretProperties.setProperty("signing_key_password", "${System.getenv('signing_key_password')}") - secretProperties.setProperty("signing_key_alias", "${System.getenv('signing_key_alias')}") -} - -android { - signingConfigs { - release { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_release_alias_key'] - keyPassword secretProperties['signing_release_key_password'] - } - prerelease { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_pre-release_key_alias'] - keyPassword secretProperties['signing_pre-release_key_password'] - } - } - compileSdkVersion 31 - - defaultConfig { - applicationId "net.foucry.pilldroid" - minSdkVersion defaultMinSdkVersion - targetSdkVersion defaultTargetSdkVersion - versionCode 100 - versionName "v0.100-beta" - multiDexEnabled true - } - - buildTypes { - debug { - minifyEnabled false - debuggable true - applicationIdSuffix ".debug" - } - release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.release - } - prerelease { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.prerelease - } - } - flavorDimensions "version" - productFlavors { - dev { - resValue "string", "app_name", "PillDroid dev" - dimension ="version" - } - - product { - resValue "string", "app_name", "PillDroid" - dimension ="version" - } - preproduct { - resValue "string", "app_name", "PillDroid Pre-Release" - dimension ="version" - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 - } - - buildToolsVersion '32.0.0' - - allprojects { - tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - } - } -} - -repositories { - mavenCentral() -} -sourceSets { - main { - java { - exclude 'net/foucry/pilldroid/scanActivity.java' - } - } -} -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - testImplementation 'junit:junit:4.13.2' - - implementation 'androidx.appcompat:appcompat:1.4.1' - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.5.0' - implementation 'androidx.legacy:legacy-support-v4:1.0.0' - - implementation 'com.journeyapps:zxing-android-embedded:4.3.0' - implementation 'androidx.core:core:1.7.0' - - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' -} diff --git a/app/build_LOCAL_3178.gradle b/app/build_LOCAL_3178.gradle deleted file mode 100644 index cc3eb2b..0000000 --- a/app/build_LOCAL_3178.gradle +++ /dev/null @@ -1,117 +0,0 @@ -//noinspection GradleCompatible -apply plugin: 'com.android.application' - -// Try reading secrets from file -def secretsPropertiesFile = rootProject.file("secrets.properties") -def secretProperties = new Properties() - -if (secretsPropertiesFile.exists()) { - secretProperties.load(new FileInputStream(secretsPropertiesFile)) -} -// Otherwise read from environment variables, this happens in CI -else { - secretProperties.setProperty("signing_keystore_password", "${System.getenv('signing_keystore_password')}") - secretProperties.setProperty("signing_key_password", "${System.getenv('signing_key_password')}") - secretProperties.setProperty("signing_key_alias", "${System.getenv('signing_key_alias')}") -} - -android { - signingConfigs { - release { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_release_alias_key'] - keyPassword secretProperties['signing_release_key_password'] - } - prerelease { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_pre-release_key_alias'] - keyPassword secretProperties['signing_pre-release_key_password'] - } - } - compileSdkVersion 31 - - defaultConfig { - applicationId "net.foucry.pilldroid" - minSdkVersion defaultMinSdkVersion - targetSdkVersion defaultTargetSdkVersion - versionCode 100 - versionName "v0.100-beta" - multiDexEnabled true - } - - buildTypes { - debug { - minifyEnabled false - debuggable true - applicationIdSuffix ".debug" - } - release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.release - } - prerelease { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.prerelease - } - } - flavorDimensions "version" - productFlavors { - dev { - resValue "string", "app_name", "PillDroid dev" - dimension ="version" - } - - product { - resValue "string", "app_name", "PillDroid" - dimension ="version" - } - preproduct { - resValue "string", "app_name", "PillDroid Pre-Release" - dimension ="version" - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 - } - - buildToolsVersion '32.0.0' - - allprojects { - tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - } - } -} - -repositories { - mavenCentral() -} -sourceSets { - main { - java { - exclude 'net/foucry/pilldroid/scanActivity.java' - } - } -} -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - testImplementation 'junit:junit:4.13.2' - - implementation 'androidx.appcompat:appcompat:1.4.1' - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.5.0' - implementation 'androidx.legacy:legacy-support-v4:1.0.0' - - implementation 'com.journeyapps:zxing-android-embedded:4.3.0' - implementation 'androidx.core:core:1.7.0' - - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' -} diff --git a/app/build_LOCAL_3356.gradle b/app/build_LOCAL_3356.gradle deleted file mode 100644 index cc3eb2b..0000000 --- a/app/build_LOCAL_3356.gradle +++ /dev/null @@ -1,117 +0,0 @@ -//noinspection GradleCompatible -apply plugin: 'com.android.application' - -// Try reading secrets from file -def secretsPropertiesFile = rootProject.file("secrets.properties") -def secretProperties = new Properties() - -if (secretsPropertiesFile.exists()) { - secretProperties.load(new FileInputStream(secretsPropertiesFile)) -} -// Otherwise read from environment variables, this happens in CI -else { - secretProperties.setProperty("signing_keystore_password", "${System.getenv('signing_keystore_password')}") - secretProperties.setProperty("signing_key_password", "${System.getenv('signing_key_password')}") - secretProperties.setProperty("signing_key_alias", "${System.getenv('signing_key_alias')}") -} - -android { - signingConfigs { - release { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_release_alias_key'] - keyPassword secretProperties['signing_release_key_password'] - } - prerelease { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_pre-release_key_alias'] - keyPassword secretProperties['signing_pre-release_key_password'] - } - } - compileSdkVersion 31 - - defaultConfig { - applicationId "net.foucry.pilldroid" - minSdkVersion defaultMinSdkVersion - targetSdkVersion defaultTargetSdkVersion - versionCode 100 - versionName "v0.100-beta" - multiDexEnabled true - } - - buildTypes { - debug { - minifyEnabled false - debuggable true - applicationIdSuffix ".debug" - } - release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.release - } - prerelease { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.prerelease - } - } - flavorDimensions "version" - productFlavors { - dev { - resValue "string", "app_name", "PillDroid dev" - dimension ="version" - } - - product { - resValue "string", "app_name", "PillDroid" - dimension ="version" - } - preproduct { - resValue "string", "app_name", "PillDroid Pre-Release" - dimension ="version" - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 - } - - buildToolsVersion '32.0.0' - - allprojects { - tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - } - } -} - -repositories { - mavenCentral() -} -sourceSets { - main { - java { - exclude 'net/foucry/pilldroid/scanActivity.java' - } - } -} -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - testImplementation 'junit:junit:4.13.2' - - implementation 'androidx.appcompat:appcompat:1.4.1' - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.5.0' - implementation 'androidx.legacy:legacy-support-v4:1.0.0' - - implementation 'com.journeyapps:zxing-android-embedded:4.3.0' - implementation 'androidx.core:core:1.7.0' - - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' -} diff --git a/app/build_REMOTE_2537.gradle b/app/build_REMOTE_2537.gradle deleted file mode 100644 index f39eced..0000000 --- a/app/build_REMOTE_2537.gradle +++ /dev/null @@ -1,117 +0,0 @@ -//noinspection GradleCompatible -apply plugin: 'com.android.application' - -// Try reading secrets from file -def secretsPropertiesFile = rootProject.file("secrets.properties") -def secretProperties = new Properties() - -if (secretsPropertiesFile.exists()) { - secretProperties.load(new FileInputStream(secretsPropertiesFile)) -} -// Otherwise read from environment variables, this happens in CI -else { - secretProperties.setProperty("signing_keystore_password", "${System.getenv('signing_keystore_password')}") - secretProperties.setProperty("signing_key_password", "${System.getenv('signing_key_password')}") - secretProperties.setProperty("signing_key_alias", "${System.getenv('signing_key_alias')}") -} - -android { - signingConfigs { - release { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_release_alias_key'] - keyPassword secretProperties['signing_release_key_password'] - } - prerelease { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_pre-release_key_alias'] - keyPassword secretProperties['signing_pre-release_key_password'] - } - } - compileSdkVersion 31 - - defaultConfig { - applicationId "net.foucry.pilldroid" - minSdkVersion defaultMinSdkVersion - targetSdkVersion defaultTargetSdkVersion - versionCode 100 - versionName "v0.100-beta" - multiDexEnabled true - } - - buildTypes { - debug { - minifyEnabled false - debuggable true - applicationIdSuffix ".debug" - } - release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.release - } - prerelease { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.prerelease - } - } - flavorDimensions "version" - productFlavors { - dev { - resValue "string", "app_name", "PillDroid dev" - dimension ="version" - } - - product { - resValue "string", "app_name", "PillDroid" - dimension ="version" - } - preproduct { - resValue "string", "app_name", "PillDroid Pre-Release" - dimension ="version" - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 - } - - buildToolsVersion '32.0.0' - - allprojects { - tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - } - } -} - -repositories { - mavenCentral() -} -sourceSets { - main { - java { - exclude 'net/foucry/pilldroid/scanActivity.java' - } - } -} -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - testImplementation 'junit:junit:4.13.2' - - implementation 'androidx.appcompat:appcompat:1.4.0' - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.4.0' - implementation 'androidx.legacy:legacy-support-v4:1.0.0' - - implementation 'com.journeyapps:zxing-android-embedded:4.3.0' - implementation 'androidx.core:core:1.6.0' - - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' -} diff --git a/app/build_REMOTE_2948.gradle b/app/build_REMOTE_2948.gradle deleted file mode 100644 index f39eced..0000000 --- a/app/build_REMOTE_2948.gradle +++ /dev/null @@ -1,117 +0,0 @@ -//noinspection GradleCompatible -apply plugin: 'com.android.application' - -// Try reading secrets from file -def secretsPropertiesFile = rootProject.file("secrets.properties") -def secretProperties = new Properties() - -if (secretsPropertiesFile.exists()) { - secretProperties.load(new FileInputStream(secretsPropertiesFile)) -} -// Otherwise read from environment variables, this happens in CI -else { - secretProperties.setProperty("signing_keystore_password", "${System.getenv('signing_keystore_password')}") - secretProperties.setProperty("signing_key_password", "${System.getenv('signing_key_password')}") - secretProperties.setProperty("signing_key_alias", "${System.getenv('signing_key_alias')}") -} - -android { - signingConfigs { - release { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_release_alias_key'] - keyPassword secretProperties['signing_release_key_password'] - } - prerelease { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_pre-release_key_alias'] - keyPassword secretProperties['signing_pre-release_key_password'] - } - } - compileSdkVersion 31 - - defaultConfig { - applicationId "net.foucry.pilldroid" - minSdkVersion defaultMinSdkVersion - targetSdkVersion defaultTargetSdkVersion - versionCode 100 - versionName "v0.100-beta" - multiDexEnabled true - } - - buildTypes { - debug { - minifyEnabled false - debuggable true - applicationIdSuffix ".debug" - } - release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.release - } - prerelease { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.prerelease - } - } - flavorDimensions "version" - productFlavors { - dev { - resValue "string", "app_name", "PillDroid dev" - dimension ="version" - } - - product { - resValue "string", "app_name", "PillDroid" - dimension ="version" - } - preproduct { - resValue "string", "app_name", "PillDroid Pre-Release" - dimension ="version" - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 - } - - buildToolsVersion '32.0.0' - - allprojects { - tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - } - } -} - -repositories { - mavenCentral() -} -sourceSets { - main { - java { - exclude 'net/foucry/pilldroid/scanActivity.java' - } - } -} -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - testImplementation 'junit:junit:4.13.2' - - implementation 'androidx.appcompat:appcompat:1.4.0' - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.4.0' - implementation 'androidx.legacy:legacy-support-v4:1.0.0' - - implementation 'com.journeyapps:zxing-android-embedded:4.3.0' - implementation 'androidx.core:core:1.6.0' - - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' -} diff --git a/app/build_REMOTE_3178.gradle b/app/build_REMOTE_3178.gradle deleted file mode 100644 index f39eced..0000000 --- a/app/build_REMOTE_3178.gradle +++ /dev/null @@ -1,117 +0,0 @@ -//noinspection GradleCompatible -apply plugin: 'com.android.application' - -// Try reading secrets from file -def secretsPropertiesFile = rootProject.file("secrets.properties") -def secretProperties = new Properties() - -if (secretsPropertiesFile.exists()) { - secretProperties.load(new FileInputStream(secretsPropertiesFile)) -} -// Otherwise read from environment variables, this happens in CI -else { - secretProperties.setProperty("signing_keystore_password", "${System.getenv('signing_keystore_password')}") - secretProperties.setProperty("signing_key_password", "${System.getenv('signing_key_password')}") - secretProperties.setProperty("signing_key_alias", "${System.getenv('signing_key_alias')}") -} - -android { - signingConfigs { - release { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_release_alias_key'] - keyPassword secretProperties['signing_release_key_password'] - } - prerelease { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_pre-release_key_alias'] - keyPassword secretProperties['signing_pre-release_key_password'] - } - } - compileSdkVersion 31 - - defaultConfig { - applicationId "net.foucry.pilldroid" - minSdkVersion defaultMinSdkVersion - targetSdkVersion defaultTargetSdkVersion - versionCode 100 - versionName "v0.100-beta" - multiDexEnabled true - } - - buildTypes { - debug { - minifyEnabled false - debuggable true - applicationIdSuffix ".debug" - } - release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.release - } - prerelease { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.prerelease - } - } - flavorDimensions "version" - productFlavors { - dev { - resValue "string", "app_name", "PillDroid dev" - dimension ="version" - } - - product { - resValue "string", "app_name", "PillDroid" - dimension ="version" - } - preproduct { - resValue "string", "app_name", "PillDroid Pre-Release" - dimension ="version" - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 - } - - buildToolsVersion '32.0.0' - - allprojects { - tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - } - } -} - -repositories { - mavenCentral() -} -sourceSets { - main { - java { - exclude 'net/foucry/pilldroid/scanActivity.java' - } - } -} -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - testImplementation 'junit:junit:4.13.2' - - implementation 'androidx.appcompat:appcompat:1.4.0' - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.4.0' - implementation 'androidx.legacy:legacy-support-v4:1.0.0' - - implementation 'com.journeyapps:zxing-android-embedded:4.3.0' - implementation 'androidx.core:core:1.6.0' - - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' -} diff --git a/app/build_REMOTE_3356.gradle b/app/build_REMOTE_3356.gradle deleted file mode 100644 index f39eced..0000000 --- a/app/build_REMOTE_3356.gradle +++ /dev/null @@ -1,117 +0,0 @@ -//noinspection GradleCompatible -apply plugin: 'com.android.application' - -// Try reading secrets from file -def secretsPropertiesFile = rootProject.file("secrets.properties") -def secretProperties = new Properties() - -if (secretsPropertiesFile.exists()) { - secretProperties.load(new FileInputStream(secretsPropertiesFile)) -} -// Otherwise read from environment variables, this happens in CI -else { - secretProperties.setProperty("signing_keystore_password", "${System.getenv('signing_keystore_password')}") - secretProperties.setProperty("signing_key_password", "${System.getenv('signing_key_password')}") - secretProperties.setProperty("signing_key_alias", "${System.getenv('signing_key_alias')}") -} - -android { - signingConfigs { - release { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_release_alias_key'] - keyPassword secretProperties['signing_release_key_password'] - } - prerelease { - storeFile rootProject.file("android-signing-keystore.jks") - storePassword secretProperties['signing_keystore_password'] - keyAlias secretProperties['signing_pre-release_key_alias'] - keyPassword secretProperties['signing_pre-release_key_password'] - } - } - compileSdkVersion 31 - - defaultConfig { - applicationId "net.foucry.pilldroid" - minSdkVersion defaultMinSdkVersion - targetSdkVersion defaultTargetSdkVersion - versionCode 100 - versionName "v0.100-beta" - multiDexEnabled true - } - - buildTypes { - debug { - minifyEnabled false - debuggable true - applicationIdSuffix ".debug" - } - release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.release - } - prerelease { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - debuggable false - signingConfig signingConfigs.prerelease - } - } - flavorDimensions "version" - productFlavors { - dev { - resValue "string", "app_name", "PillDroid dev" - dimension ="version" - } - - product { - resValue "string", "app_name", "PillDroid" - dimension ="version" - } - preproduct { - resValue "string", "app_name", "PillDroid Pre-Release" - dimension ="version" - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 - } - - buildToolsVersion '32.0.0' - - allprojects { - tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - } - } -} - -repositories { - mavenCentral() -} -sourceSets { - main { - java { - exclude 'net/foucry/pilldroid/scanActivity.java' - } - } -} -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - testImplementation 'junit:junit:4.13.2' - - implementation 'androidx.appcompat:appcompat:1.4.0' - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.4.0' - implementation 'androidx.legacy:legacy-support-v4:1.0.0' - - implementation 'com.journeyapps:zxing-android-embedded:4.3.0' - implementation 'androidx.core:core:1.6.0' - - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' -} diff --git a/app/preproduct/prerelease/output-metadata.json b/app/preproduct/prerelease/output-metadata.json deleted file mode 100644 index c0b772b..0000000 --- a/app/preproduct/prerelease/output-metadata.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": 3, - "artifactType": { - "type": "APK", - "kind": "Directory" - }, - "applicationId": "net.foucry.pilldroid", - "variantName": "preproductPrerelease", - "elements": [ - { - "type": "SINGLE", - "filters": [], - "attributes": [], - "versionCode": 24065, - "versionName": "0.65.20220101-d04e132", - "outputFile": "app-preproduct-prerelease.apk" - } - ], - "elementType": "File" -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 95217b9..ceb173a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,12 +1,17 @@ + + + + + + + diff --git a/app/src/main/assets/about.html b/app/src/main/assets/about.html index e48d667..301c173 100644 --- a/app/src/main/assets/about.html +++ b/app/src/main/assets/about.html @@ -20,6 +20,7 @@
Icône de l'application Pilldroid

[feb95329be7d05c6fd17d4ba4b72ca48c7bb294e]

+
Pilldroid © 2024 Jacques Foucry

Pilldroid est une gestion théorique de votre stock de médicaments.

Pilldroid n'a aucune connaissance des interactions des médicaments entre eux.

diff --git a/app/src/main/java/net/foucry/pilldroid/About.java b/app/src/main/java/net/foucry/pilldroid/About.java index cabe0e8..99312ba 100644 --- a/app/src/main/java/net/foucry/pilldroid/About.java +++ b/app/src/main/java/net/foucry/pilldroid/About.java @@ -2,15 +2,14 @@ package net.foucry.pilldroid; import android.graphics.Color; import android.os.Bundle; +import android.webkit.WebView; import androidx.appcompat.app.AppCompatActivity; -import android.webkit.WebView; - /** * Created by jacques on 12/06/16. */ -public class About extends AppCompatActivity{ +public class About extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { diff --git a/app/src/main/java/net/foucry/pilldroid/AlarmReceiver.java b/app/src/main/java/net/foucry/pilldroid/AlarmReceiver.java index 7555267..1b98efd 100644 --- a/app/src/main/java/net/foucry/pilldroid/AlarmReceiver.java +++ b/app/src/main/java/net/foucry/pilldroid/AlarmReceiver.java @@ -31,9 +31,54 @@ public class AlarmReceiver extends BroadcastReceiver { NotificationManager notificationManager; + public static void scheduleAlarm(Context context) { + Calendar calendar = Calendar.getInstance(); + Date today; + Date tomorrow; + LocalTime todayNow = LocalTime.now(); + + if (BuildConfig.DEBUG) { + Date nextSchedule = calendar.getTime(); + calendar.setTimeInMillis(nextSchedule.getTime()); + } else { + calendar.set(Calendar.HOUR_OF_DAY, 11); + calendar.set(Calendar.MINUTE, 15); + today = calendar.getTime(); + calendar.add(Calendar.DAY_OF_YEAR, 1); + tomorrow = calendar.getTime(); + if (todayNow.isBefore(LocalTime.NOON)) { + calendar.setTimeInMillis(today.getTime()); + } else { + calendar.setTimeInMillis(tomorrow.getTime()); + } + } + + PendingIntent alarmIntent; + + Intent intent = new Intent(context, AlarmReceiver.class); + alarmIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE); + + AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + + if (BuildConfig.DEBUG) { + alarmManager.setExact(AlarmManager.RTC_WAKEUP, (calendar.getTimeInMillis()), alarmIntent); + } else { + alarmManager.setExact(AlarmManager.RTC_WAKEUP, (calendar.getTimeInMillis()), alarmIntent); + } + + Log.d(TAG, "Alarm scheduled for " + UtilDate.convertDate(calendar.getTimeInMillis())); + if (BuildConfig.DEBUG) { + Toast.makeText(context, "Alarm scheduled for " + UtilDate.convertDate(calendar.getTimeInMillis()), Toast.LENGTH_SHORT).show(); + } + } + + public static Boolean isAlarmScheduled(Context context) { + AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + return alarmManager.getNextAlarmClock() != null; + } + @Override - public void onReceive(Context context, Intent intent) - { + public void onReceive(Context context, Intent intent) { // Show the toast like in above screen shot Log.d(TAG, "onReceive"); @@ -45,7 +90,9 @@ public class AlarmReceiver extends BroadcastReceiver { scheduleAlarm(context); } - if (BuildConfig.DEBUG) { Toast.makeText(context, "New stock calculated", Toast.LENGTH_LONG).show(); } + if (BuildConfig.DEBUG) { + Toast.makeText(context, "New stock calculated", Toast.LENGTH_LONG).show(); + } createNotificationChannel(context); PrescriptionDatabase prescriptions = PrescriptionDatabase.getInstanceDatabase(context.getApplicationContext()); PrescriptionsDAO prescriptionsDAO = prescriptions.getPrescriptionsDAO(); @@ -53,7 +100,7 @@ public class AlarmReceiver extends BroadcastReceiver { Prescription firstPrescription = null; Prescription currentPrescription; - for (int i=0 ; i < prescriptionList.size(); i++ ) { + for (int i = 0; i < prescriptionList.size(); i++) { currentPrescription = prescriptionList.get(i); currentPrescription.newStock(); prescriptionsDAO.update(currentPrescription); @@ -63,15 +110,14 @@ public class AlarmReceiver extends BroadcastReceiver { Utils.sortPrescriptionList(prescriptionList); try { firstPrescription = prescriptionList.get(0); - } - catch (Exception e){ + } catch (Exception e) { Log.e(TAG, e.toString()); e.printStackTrace(); } if (firstPrescription != null) { if (firstPrescription.getTake() != 0) { - if(firstPrescription.getStock() <= firstPrescription.getAlertThreshold()) { + if (firstPrescription.getStock() <= firstPrescription.getAlertThreshold()) { notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); Intent notificationIntent = new Intent(context, DrugListActivity.class); @@ -92,8 +138,7 @@ public class AlarmReceiver extends BroadcastReceiver { NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); int notificationId = 666; notificationManager.notify(notificationId, builder.build()); - } else - { + } else { double dummy = (firstPrescription.getStock() - firstPrescription.getAlertThreshold()); Log.d(TAG, "no notification scheduled " + dummy); } @@ -102,8 +147,8 @@ public class AlarmReceiver extends BroadcastReceiver { } private void createNotificationChannel(Context context) { - Log.d(TAG, "start create notification channel"); + CharSequence name = context.getString(R.string.channel_name); String description = context.getString(R.string.channel_description); int importance = NotificationManager.IMPORTANCE_DEFAULT; @@ -128,49 +173,4 @@ public class AlarmReceiver extends BroadcastReceiver { e.printStackTrace(); } } - public static void scheduleAlarm(Context context) { - Calendar calendar = Calendar.getInstance(); - Date today; - Date tomorrow; - LocalTime todayNow = LocalTime.now(); - - /*if (BuildConfig.DEBUG) { - Date nextSchedule = calendar.getTime(); - calendar.setTimeInMillis(nextSchedule.getTime()); - } else {*/ - calendar.set(Calendar.HOUR_OF_DAY, 11); - today = calendar.getTime(); - calendar.add(Calendar.DAY_OF_YEAR, 1); - tomorrow = calendar.getTime(); - if (todayNow.isBefore(LocalTime.NOON)) { - calendar.setTimeInMillis(today.getTime()); - } else { - calendar.setTimeInMillis(tomorrow.getTime()); - } - //} - - PendingIntent alarmIntent; - - Intent intent = new Intent(context, AlarmReceiver.class); - alarmIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE); - - AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); - - /*if (BuildConfig.DEBUG) { - alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,(calendar.getTimeInMillis()), - AlarmManager.ELAPSED_REALTIME, alarmIntent); - } else {*/ - - alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, (calendar.getTimeInMillis()), - AlarmManager.INTERVAL_DAY, alarmIntent); - //} - - Log.d(TAG, "Alarm scheduled for " + UtilDate.convertDate(calendar.getTimeInMillis())); - if (BuildConfig.DEBUG) { Toast.makeText(context, "Alarm scheduled for " + UtilDate.convertDate(calendar.getTimeInMillis()), Toast.LENGTH_SHORT).show(); } - } - - public static Boolean isAlarmScheduled(Context context) { - AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); - return alarmManager.getNextAlarmClock() != null; - } } diff --git a/app/src/main/java/net/foucry/pilldroid/CustomScannerActivity.java b/app/src/main/java/net/foucry/pilldroid/CustomScannerActivity.java index 14d90a8..a4a63a2 100644 --- a/app/src/main/java/net/foucry/pilldroid/CustomScannerActivity.java +++ b/app/src/main/java/net/foucry/pilldroid/CustomScannerActivity.java @@ -1,6 +1,5 @@ package net.foucry.pilldroid; -import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; @@ -11,8 +10,7 @@ import android.widget.ImageButton; import androidx.annotation.NonNull; -import com.journeyapps.barcodescanner.BarcodeCallback; -import com.journeyapps.barcodescanner.BarcodeResult; +import androidx.appcompat.app.AppCompatActivity; import com.journeyapps.barcodescanner.CaptureManager; import com.journeyapps.barcodescanner.DecoratedBarcodeView; import com.journeyapps.barcodescanner.ViewfinderView; @@ -20,17 +18,15 @@ import com.journeyapps.barcodescanner.ViewfinderView; /** * Custom Scanner Activity extending from Activity to display a custom layout form scanner view. */ -public class CustomScannerActivity extends Activity implements DecoratedBarcodeView.TorchListener { +public class CustomScannerActivity extends AppCompatActivity implements DecoratedBarcodeView.TorchListener { private static final String TAG = CustomScannerActivity.class.getName(); - + final Bundle captureIntentBundle = new Bundle(); private CaptureManager capture; private DecoratedBarcodeView barcodeScannerView; private ImageButton switchFlashlightButton; private ViewfinderView viewfinderView; - final Bundle captureIntentBundle = new Bundle(); - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -59,19 +55,16 @@ public class CustomScannerActivity extends Activity implements DecoratedBarcodeV //changeMaskColor(null); changeLaserVisibility(true); - barcodeScannerView.decodeSingle(new BarcodeCallback() { - @Override - public void barcodeResult(BarcodeResult result) { - Intent scanResult = new Intent(); - //Bundle scanResultBundle = new Bundle(); - scanResult.putExtra("Barcode Content", result.getText()); - scanResult.putExtra("Barcode Format name", result.getBarcodeFormat().name()); - scanResult.putExtra("returnCode", captureIntentBundle.getInt("returnCode")); - scanResult.putExtra("resultCode", 1); - CustomScannerActivity.this.setResult(RESULT_OK, scanResult); - Log.d(TAG, "scanResult == " + scanResult); - finish(); - } + barcodeScannerView.decodeSingle(result -> { + Intent scanResult = new Intent(); + //Bundle scanResultBundle = new Bundle(); + scanResult.putExtra("Barcode Content", result.getText()); + scanResult.putExtra("Barcode Format name", result.getBarcodeFormat().name()); + scanResult.putExtra("returnCode", captureIntentBundle.getInt("returnCode")); + scanResult.putExtra("resultCode", 1); + CustomScannerActivity.this.setResult(RESULT_OK, scanResult); + Log.d(TAG, "scanResult == " + scanResult); + finish(); }); } @@ -93,6 +86,11 @@ public class CustomScannerActivity extends Activity implements DecoratedBarcodeV capture.onDestroy(); } + @Override + public void onBackPressed(){ + onCancel(this.getCurrentFocus()); + } + @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); @@ -147,7 +145,7 @@ public class CustomScannerActivity extends Activity implements DecoratedBarcodeV public void onKeyboard(View view) { Log.d(TAG, "onkeyboard"); Intent resultIntent = new Intent(); - resultIntent.putExtra("returnCode",3); + resultIntent.putExtra("returnCode", 3); CustomScannerActivity.this.setResult(RESULT_OK, resultIntent); finish(); } diff --git a/app/src/main/java/net/foucry/pilldroid/DBDrugs.java b/app/src/main/java/net/foucry/pilldroid/DBDrugs.java index 912cf42..04116d2 100644 --- a/app/src/main/java/net/foucry/pilldroid/DBDrugs.java +++ b/app/src/main/java/net/foucry/pilldroid/DBDrugs.java @@ -21,35 +21,29 @@ class DBDrugs extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 1; - private static final String dbName = "drugs.db"; + private static final String dbName = "drugs.db"; + private static final String TABLE_NAME = "drugs"; + private static final String DRUG_CIS = "cis"; + private static final String DRUG_CIP13 = "cip13"; + private static final String DRUG_CIP7 = "cip7"; + private static final String DRUG_ADMIN = "administration_mode"; + private static final String DRUG_NAME = "name"; + private static final String DRUG_PRES = "presentation"; + private static final String[] COLUMNS_NAMES = {DRUG_CIS, DRUG_CIP13, DRUG_CIP7, DRUG_ADMIN, DRUG_NAME, DRUG_PRES}; + private static final String TAG = DBDrugs.class.getName(); private final Context myContext; private final SQLiteDatabase myDataBase = null; - private static final String TABLE_NAME = "drugs"; - private static final String DRUG_CIS = "cis"; - private static final String DRUG_CIP13 = "cip13"; - private static final String DRUG_CIP7 = "cip7"; - private static final String DRUG_ADMIN = "administration_mode"; - private static final String DRUG_NAME = "name"; - private static final String DRUG_PRES = "presentation"; - - private static final String[] COLUMNS_NAMES = {DRUG_CIS, DRUG_CIP13, DRUG_CIP7, DRUG_ADMIN, DRUG_NAME, DRUG_PRES}; - - private static final String TAG = DBDrugs.class.getName(); - - DBDrugs(Context context) { super(context, dbName, null, DATABASE_VERSION); this.myContext = context; } - public boolean isDBFileExist(File database) - { - try { + public boolean isDBFileExist(File database) { + try { myContext.getDatabasePath(String.valueOf(database)); - } - catch (final Exception e){ + } catch (final Exception e) { return false; } return true; @@ -166,26 +160,24 @@ class DBDrugs extends SQLiteOpenHelper { String getCIP13FromCIP7(String cip7) { - String cip13 = null; + String cip13 = null; - try { - Cursor c = this.getReadableDatabase().rawQuery("SELECT cip13 FROM "+ TABLE_NAME + " where cip7 = "+cip7, null); + try { + Cursor c = this.getReadableDatabase().rawQuery("SELECT cip13 FROM " + TABLE_NAME + " where cip7 = " + cip7, null); - Log.d(TAG, "Cursor == " + DatabaseUtils.dumpCursorToString(c)); + Log.d(TAG, "Cursor == " + DatabaseUtils.dumpCursorToString(c)); - c.moveToFirst(); + c.moveToFirst(); - if(c.getCount()>0) - { - cip13 = c.getString(0); - } - c.close(); - } catch(Exception e) - { - e.printStackTrace(); + if (c.getCount() > 0) { + cip13 = c.getString(0); } - return cip13; + c.close(); + } catch (Exception e) { + e.printStackTrace(); } + return cip13; + } Drug getDrugByCIP7(String cip7) { Log.d(TAG, "CIP7 - " + cip7); diff --git a/app/src/main/java/net/foucry/pilldroid/DBHelper.java b/app/src/main/java/net/foucry/pilldroid/DBHelper.java index d2dc1bf..17dc45d 100644 --- a/app/src/main/java/net/foucry/pilldroid/DBHelper.java +++ b/app/src/main/java/net/foucry/pilldroid/DBHelper.java @@ -10,7 +10,6 @@ import android.text.format.DateUtils; import android.util.Log; import java.util.ArrayList; -import java.util.Comparator; import java.util.List; /** @@ -18,31 +17,27 @@ import java.util.List; */ - class DBHelper extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 1; private static final String DATABASE_NAME = "prescription.db"; - private static final String TABLE_DRUG = "drug"; - private static final String KEY_ID = "id"; - private static final String KEY_CIS = "cis"; - private static final String KEY_CIP13 = "cip13"; - private static final String KEY_NAME = "name"; - private static final String KEY_ADMIN = "administration_mode"; - private static final String KEY_PRES = "presentation"; - private static final String KEY_STOCK = "stock"; - private static final String KEY_TAKE = "take"; - private static final String KEY_THRESHOLD_WARN = "warning"; + private static final String TABLE_DRUG = "drug"; + private static final String KEY_ID = "id"; + private static final String KEY_CIS = "cis"; + private static final String KEY_CIP13 = "cip13"; + private static final String KEY_NAME = "name"; + private static final String KEY_ADMIN = "administration_mode"; + private static final String KEY_PRES = "presentation"; + private static final String KEY_STOCK = "stock"; + private static final String KEY_TAKE = "take"; + private static final String KEY_THRESHOLD_WARN = "warning"; private static final String KEY_THRESHOLD_ALERT = "alert"; - private static final String KEY_LAST_UPDATE = "last_update"; - - final List drugs = new ArrayList<>(); - + private static final String KEY_LAST_UPDATE = "last_update"; private static final String TAG = DBHelper.class.getName(); - - private static final String[] COLUMNS = {KEY_ID, KEY_CIS,KEY_CIP13, KEY_NAME, KEY_ADMIN, KEY_PRES, KEY_STOCK, KEY_TAKE, + private static final String[] COLUMNS = {KEY_ID, KEY_CIS, KEY_CIP13, KEY_NAME, KEY_ADMIN, KEY_PRES, KEY_STOCK, KEY_TAKE, KEY_THRESHOLD_WARN, KEY_THRESHOLD_ALERT, KEY_LAST_UPDATE}; + final List drugs = new ArrayList<>(); DBHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); @@ -53,7 +48,7 @@ class DBHelper extends SQLiteOpenHelper { String CREATE_DRUG_TABLE = "CREATE TABLE drug ( " + "id INTEGER PRIMARY KEY AUTOINCREMENT," + "cis TEXT, " + - "cip13 TEXT, " + + "cip13 TEXT, " + "name TEXT, " + "administration_mode TEXT, " + "presentation TEXT, " + @@ -88,6 +83,7 @@ class DBHelper extends SQLiteOpenHelper { /** * Split drug values into database record and record it to the DB + * * @param drug the drug object to be saved */ void addDrug(Drug drug) { @@ -123,6 +119,7 @@ class DBHelper extends SQLiteOpenHelper { /** * return a drug from the DB with is id + * * @param id of the drug we looking for (not used) * @return return the found drug of null */ @@ -134,7 +131,7 @@ class DBHelper extends SQLiteOpenHelper { Cursor cursor = db.query(TABLE_DRUG, // Which table COLUMNS, // column names " id = ?", // selections - new String[] { String.valueOf(id) }, // selections args + new String[]{String.valueOf(id)}, // selections args null, // group by null, // having null, // order by @@ -161,7 +158,7 @@ class DBHelper extends SQLiteOpenHelper { drug.setDateLastUpdate(Long.parseLong(cursor.getString(10))); } // Log - Log.d(TAG, "getDrug("+id+")" + drug); + Log.d(TAG, "getDrug(" + id + ")" + drug); assert cursor != null; cursor.close(); @@ -172,7 +169,6 @@ class DBHelper extends SQLiteOpenHelper { } /** - * * @param cip13 drug id in French nomenclature * @return the drug object found in DB or null */ @@ -218,7 +214,6 @@ class DBHelper extends SQLiteOpenHelper { } /** - * * @return a Sorted and updated by dateEndOfStock List of All drugs presents in database */ @@ -262,43 +257,36 @@ class DBHelper extends SQLiteOpenHelper { db.close(); Drug currentDrug; - for (int position = 0 ; position < getCount() ; position++ ) { + for (int position = 0; position < getCount(); position++) { currentDrug = getItem(position); - if (!DateUtils.isToday(currentDrug.getDateLastUpdate())) - { + if (!DateUtils.isToday(currentDrug.getDateLastUpdate())) { currentDrug.newStock(); updateDrug(currentDrug); } } - Log.d(TAG, "Before sort == " + drugs); - drugs.sort(new Comparator() { - @Override - public int compare(Drug lhs, Drug rhs) { - if (lhs.getDateEndOfStock().compareTo(rhs.getDateEndOfStock()) != 0) - return lhs.getDateEndOfStock().compareTo(rhs.getDateEndOfStock()); - else - return (int) (lhs.getStock() - rhs.getStock()); - } + drugs.sort((lhs, rhs) -> { + if (lhs.getDateEndOfStock().compareTo(rhs.getDateEndOfStock()) != 0) + return lhs.getDateEndOfStock().compareTo(rhs.getDateEndOfStock()); + else + return (int) (lhs.getStock() - rhs.getStock()); }); Log.d(TAG, "After sort " + drugs); // Move drug with prise = 0 at the end of the list // todo: If some drug moved, must redo all the loop - int position = 0 ; - for ( int nbOps = 0; nbOps < getCount() ; nbOps ++ ) { + int position = 0; + for (int nbOps = 0; nbOps < getCount(); nbOps++) { currentDrug = getItem(position); double currentTake = currentDrug.getTake(); - if (currentTake == 0) - { + if (currentTake == 0) { drug = drugs.remove(position); drugs.add(drug); - } else - { + } else { position++; } } @@ -306,7 +294,6 @@ class DBHelper extends SQLiteOpenHelper { } /** - * * @param drug object to be updated in DB */ public void updateDrug(Drug drug) { @@ -319,19 +306,19 @@ class DBHelper extends SQLiteOpenHelper { // Create ContentValues to add column/value ContentValues values = new ContentValues(); - values.put(KEY_ID, drug.getId()); - values.put(KEY_CIS, drug.getCis()); - values.put(KEY_CIP13, drug.getCip13()); - values.put(KEY_NAME, drug.getName()); - values.put(KEY_ADMIN, drug.getAdministration_mode()); - values.put(KEY_PRES, drug.getPresentation()); - values.put(KEY_STOCK, drug.getStock()); - values.put(KEY_TAKE, drug.getTake()); - values.put(KEY_THRESHOLD_WARN, drug.getWarnThreshold()); + values.put(KEY_ID, drug.getId()); + values.put(KEY_CIS, drug.getCis()); + values.put(KEY_CIP13, drug.getCip13()); + values.put(KEY_NAME, drug.getName()); + values.put(KEY_ADMIN, drug.getAdministration_mode()); + values.put(KEY_PRES, drug.getPresentation()); + values.put(KEY_STOCK, drug.getStock()); + values.put(KEY_TAKE, drug.getTake()); + values.put(KEY_THRESHOLD_WARN, drug.getWarnThreshold()); values.put(KEY_THRESHOLD_ALERT, drug.getAlertThreshold()); - values.put(KEY_LAST_UPDATE, drug.getDateLastUpdate()); + values.put(KEY_LAST_UPDATE, drug.getDateLastUpdate()); - String[] selectionArgs = { String.valueOf(drug.getId()) }; + String[] selectionArgs = {String.valueOf(drug.getId())}; db.update(TABLE_DRUG, // table values, // column/value @@ -345,6 +332,7 @@ class DBHelper extends SQLiteOpenHelper { /** * Delete a drug object in database + * * @param drug object to be delete in the DB */ public void deleteDrug(Drug drug) { @@ -353,18 +341,19 @@ class DBHelper extends SQLiteOpenHelper { // Delete record db.delete(TABLE_DRUG, // table - KEY_ID+ " = ?", // selections - new String[] { String.valueOf(drug.getId()) } ); // selections args + KEY_ID + " = ?", // selections + new String[]{String.valueOf(drug.getId())}); // selections args // Close DB db.close(); // log - Log.d(TAG, "delete drug "+ drug); + Log.d(TAG, "delete drug " + drug); } /** * Get count of all drug present in database + * * @return number of drug in DB */ int getCount() { @@ -389,15 +378,13 @@ class DBHelper extends SQLiteOpenHelper { boolean isDrugExist(String cip13) { boolean value = false; try { - Cursor c = this.getReadableDatabase().rawQuery("SELECT * FROM "+ TABLE_DRUG + " where cip13 = "+cip13, null); + Cursor c = this.getReadableDatabase().rawQuery("SELECT * FROM " + TABLE_DRUG + " where cip13 = " + cip13, null); - if(c.getCount()>0) - { + if (c.getCount() > 0) { value = true; } c.close(); - } catch(Exception e) - { + } catch (Exception e) { e.printStackTrace(); } return value; diff --git a/app/src/main/java/net/foucry/pilldroid/Drug.java b/app/src/main/java/net/foucry/pilldroid/Drug.java index 5c5b011..2491c55 100644 --- a/app/src/main/java/net/foucry/pilldroid/Drug.java +++ b/app/src/main/java/net/foucry/pilldroid/Drug.java @@ -1,5 +1,8 @@ package net.foucry.pilldroid; +import static net.foucry.pilldroid.UtilDate.dateAtNoon; +import static net.foucry.pilldroid.UtilDate.nbOfDaysBetweenDateAndToday; + import android.util.Log; import java.io.Serializable; @@ -7,9 +10,6 @@ import java.util.Calendar; import java.util.Date; import java.util.Objects; -import static net.foucry.pilldroid.UtilDate.dateAtNoon; -import static net.foucry.pilldroid.UtilDate.nbOfDaysBetweenDateAndToday; - /** * Created by jacques on 26/11/15. */ @@ -56,86 +56,68 @@ public class Drug implements Serializable { return id; } - String getName() { - return name; - } - - String getCip13() { - return cip13; - } - - String getCis() { - return cis; - } - - String getAdministration_mode() { - return administration_mode; - } - - String getPresentation() { - return presentation; - } - - double getStock() { - return stock; - } - - double getTake() { - return take; - } - - int getAlertThreshold() { - return alertThreshold; - } - - int getWarnThreshold() { - return warnThreshold; - } - - long getDateLastUpdate() { - return dateLastUpdate; - } - - Date getDateEndOfStock() { - return dateEndOfStock; - } - public void setId(int id) { this.id = id; } + String getName() { + return name; + } + void setName(String name) { this.name = name; } + String getCip13() { + return cip13; + } + void setCip13(String cip13) { this.cip13 = cip13; } + String getCis() { + return cis; + } + void setCis(String cis) { this.cis = cis; } + String getAdministration_mode() { + return administration_mode; + } + void setAdministration_mode(String administration_mode) { this.administration_mode = administration_mode; } + String getPresentation() { + return presentation; + } + void setPresentation(String presentation) { this.presentation = presentation; } + double getStock() { + return stock; + } + void setStock(double stock) { this.stock = stock; } + double getTake() { + return take; + } + void setTake(double take) { this.take = take; } - void setWarnThreshold(int warn) { - if (warn == 0) - warn = 14; - this.warnThreshold = warn; + int getAlertThreshold() { + return alertThreshold; } void setAlertThreshold(int alert) { @@ -144,10 +126,28 @@ public class Drug implements Serializable { this.alertThreshold = alert; } + int getWarnThreshold() { + return warnThreshold; + } + + void setWarnThreshold(int warn) { + if (warn == 0) + warn = 14; + this.warnThreshold = warn; + } + + long getDateLastUpdate() { + return dateLastUpdate; + } + void setDateLastUpdate(long l) { this.dateLastUpdate = l; } + Date getDateEndOfStock() { + return dateEndOfStock; + } + void setDateEndOfStock() { int numberDayOfTake; if (this.take > 0) { @@ -176,6 +176,7 @@ public class Drug implements Serializable { setDateLastUpdate(new Date().getTime()); } } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/app/src/main/java/net/foucry/pilldroid/DrugDetailActivity.java b/app/src/main/java/net/foucry/pilldroid/DrugDetailActivity.java index 5dbd2ad..0760882 100644 --- a/app/src/main/java/net/foucry/pilldroid/DrugDetailActivity.java +++ b/app/src/main/java/net/foucry/pilldroid/DrugDetailActivity.java @@ -1,20 +1,17 @@ package net.foucry.pilldroid; -import static net.foucry.pilldroid.R.id.detail_toolbar; - import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.MenuItem; import android.view.View; import android.widget.EditText; -import android.widget.ImageButton; import android.widget.TextView; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; - +import com.google.android.material.appbar.MaterialToolbar; +import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton; import net.foucry.pilldroid.dao.PrescriptionsDAO; import net.foucry.pilldroid.databases.PrescriptionDatabase; import net.foucry.pilldroid.models.Prescription; @@ -43,23 +40,20 @@ public class DrugDetailActivity extends AppCompatActivity { Log.d(TAG, "aPrescription == " + aPrescription); setContentView(R.layout.drug_detail_activity); - Toolbar toolbar = findViewById(detail_toolbar); + MaterialToolbar toolbar = findViewById(R.id.toolbar); if (toolbar != null) { setSupportActionBar(toolbar); } - ImageButton fab = findViewById(R.id.fab); - fab.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Log.d(TAG, "Click on save icon"); + ExtendedFloatingActionButton fab = findViewById(R.id.fab); + fab.setOnClickListener(v -> { + Log.d(TAG, "Click on save icon"); - getDrugChanges(); - setResult(1); - finish(); - overridePendingTransition(R.anim.slide_from_left, R.anim.slide_to_right); - } + getDrugChanges(); + setResult(1); + finish(); + overridePendingTransition(R.anim.slide_from_left, R.anim.slide_to_right); }); // Show the Up button in the action bar. @@ -129,13 +123,14 @@ public class DrugDetailActivity extends AppCompatActivity { String takeValue = takeTextView.getText().toString(); alertView = findViewById(R.id.alert_cell); + alertView.setContentDescription("R.string.Drug_warningThreshold_label"); TextView alertTextView = alertView.findViewById(R.id.value); String alertValue = alertTextView.getText().toString(); warningView = findViewById(R.id.warning_cell); + warningView.setContentDescription("R.string.drug_alertThreshold_label"); TextView warningTextView = warningView.findViewById(R.id.value); String warningValue = warningTextView.getText().toString(); - newPrescription.setStock(Float.parseFloat(stockValue)); newPrescription.setTake(Float.parseFloat(takeValue)); newPrescription.setWarning(Integer.parseInt(warningValue)); diff --git a/app/src/main/java/net/foucry/pilldroid/DrugDetailContract.java b/app/src/main/java/net/foucry/pilldroid/DrugDetailContract.java index 1dcef08..48bbc16 100644 --- a/app/src/main/java/net/foucry/pilldroid/DrugDetailContract.java +++ b/app/src/main/java/net/foucry/pilldroid/DrugDetailContract.java @@ -13,7 +13,7 @@ public class DrugDetailContract extends ActivityResultContract * Create an intent that can be used for {@link Activity#startActivityForResult} * * @param context Context - * @param input Drug + * @param input Drug */ @NonNull @Override @@ -26,8 +26,9 @@ public class DrugDetailContract extends ActivityResultContract /** * Convert result obtained from to O + * * @param resultCode Integer - * @param intent Intent + * @param intent Intent * @return Integer */ @Override diff --git a/app/src/main/java/net/foucry/pilldroid/DrugDetailFragment.java b/app/src/main/java/net/foucry/pilldroid/DrugDetailFragment.java index 763746a..566d8ec 100644 --- a/app/src/main/java/net/foucry/pilldroid/DrugDetailFragment.java +++ b/app/src/main/java/net/foucry/pilldroid/DrugDetailFragment.java @@ -5,12 +5,11 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.TextView; import androidx.fragment.app.Fragment; - -import com.google.android.material.appbar.CollapsingToolbarLayout; - +import com.google.android.material.appbar.MaterialToolbar; +import com.google.android.material.textfield.TextInputEditText; +import com.google.android.material.textview.MaterialTextView; import net.foucry.pilldroid.models.Prescription; /** @@ -52,7 +51,7 @@ public class DrugDetailFragment extends Fragment { Activity activity = this.getActivity(); assert activity != null; - CollapsingToolbarLayout appBarLayout = activity.findViewById(R.id.toolbar_layout); + MaterialToolbar appBarLayout = activity.findViewById(R.id.toolbar); if (appBarLayout != null) { appBarLayout.setTitle(prescription.getName()); } @@ -74,34 +73,34 @@ public class DrugDetailFragment extends Fragment { if (prescription != null) { // Find each component of rootView nameView = detailView.findViewById(R.id.name_cell); - TextView nameLabel = nameView.findViewById(R.id.label); - TextView nameValue = nameView.findViewById(R.id.value); + MaterialTextView nameLabel = nameView.findViewById(R.id.label); + MaterialTextView nameValue = nameView.findViewById(R.id.value); nameLabel.setText(R.string.drug_name_label); nameValue.setText(prescription.getName()); presentationView = detailView.findViewById(R.id.presentation_cell); - TextView presentationLabel = presentationView.findViewById(R.id.label); - TextView presentationValue = presentationView.findViewById(R.id.value); + MaterialTextView presentationLabel = presentationView.findViewById(R.id.label); + MaterialTextView presentationValue = presentationView.findViewById(R.id.value); presentationLabel.setText(R.string.drug_presentation_label); presentationValue.setText(prescription.getPresentation()); adminModeView = detailView.findViewById(R.id.administration_cell); - TextView adminModeLabel = adminModeView.findViewById(R.id.label); - TextView adminModeValue = adminModeView.findViewById(R.id.value); + MaterialTextView adminModeLabel = adminModeView.findViewById(R.id.label); + MaterialTextView adminModeValue = adminModeView.findViewById(R.id.value); adminModeLabel.setText(R.string.drug_administrationMode_label); adminModeValue.setText(prescription.getAdministration_mode()); stockView = detailView.findViewById(R.id.stock_cell); - TextView stockLibelle = (stockView.findViewById(R.id.label)); - TextView stockValue = stockView.findViewById(R.id.value); + MaterialTextView stockLibelle = (stockView.findViewById(R.id.label)); + TextInputEditText stockValue = stockView.findViewById(R.id.value); stockLibelle.setText(R.string.drug_current_stock_label); stockValue.setText(Utils.fmt(prescription.getStock())); stockValue.setHint(R.string.drug_current_stock_label); stockValue.setSelectAllOnFocus(true); takeView = detailView.findViewById(R.id.take_cell); - TextView takeLabel = takeView.findViewById(R.id.label); - TextView takeValue = (takeView.findViewById(R.id.value)); + MaterialTextView takeLabel = takeView.findViewById(R.id.label); + TextInputEditText takeValue = (takeView.findViewById(R.id.value)); takeLabel.setText(R.string.drug_take_label); //takeValue.setText(Double.toString(prescription.getTake())); takeValue.setText(Utils.fmt(prescription.getTake())); @@ -109,8 +108,8 @@ public class DrugDetailFragment extends Fragment { takeValue.setSelectAllOnFocus(true); warningView = detailView.findViewById(R.id.warning_cell); - TextView warningLibelle = warningView.findViewById(R.id.label); - TextView warningValue = warningView.findViewById(R.id.value); + MaterialTextView warningLibelle = warningView.findViewById(R.id.label); + TextInputEditText warningValue = warningView.findViewById(R.id.value); warningLibelle.setText(R.string.drug_warningThreshold_label); //warningValue.setText(Integer.toString(prescription.getWarnThreshold())); warningValue.setText(Utils.fmt(prescription.getWarning())); @@ -118,8 +117,8 @@ public class DrugDetailFragment extends Fragment { warningValue.setSelectAllOnFocus(true); alertView = detailView.findViewById(R.id.alert_cell); - TextView alertLibelle = alertView.findViewById(R.id.label); - TextView alertValue = alertView.findViewById(R.id.value); + MaterialTextView alertLibelle = alertView.findViewById(R.id.label); + TextInputEditText alertValue = alertView.findViewById(R.id.value); alertLibelle.setText(R.string.drug_alertThreshold_label); //alertValue.setText(Integer.toString(prescription.getAlertThreshold())); alertValue.setText(Utils.fmt(prescription.getAlert())); diff --git a/app/src/main/java/net/foucry/pilldroid/DrugListActivity.java b/app/src/main/java/net/foucry/pilldroid/DrugListActivity.java index 049fc81..29ec254 100644 --- a/app/src/main/java/net/foucry/pilldroid/DrugListActivity.java +++ b/app/src/main/java/net/foucry/pilldroid/DrugListActivity.java @@ -4,13 +4,16 @@ import static net.foucry.pilldroid.UtilDate.date2String; import static net.foucry.pilldroid.Utils.intRandomExclusive; import android.annotation.SuppressLint; +import android.app.Dialog; import android.app.NotificationManager; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.graphics.Canvas; +import android.graphics.Color; import android.graphics.Paint; +import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; @@ -23,22 +26,26 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.view.Window; import android.widget.EditText; -import android.widget.ImageView; -import android.widget.TextView; import android.widget.Toast; import androidx.activity.result.ActivityResultLauncher; import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.RecyclerView; import androidx.room.Room; +import com.google.android.material.appbar.MaterialToolbar; +import com.google.android.material.button.MaterialButton; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.android.material.imageview.ShapeableImageView; import com.google.android.material.snackbar.Snackbar; +import com.google.android.material.textview.MaterialTextView; +import com.google.zxing.client.android.BuildConfig; import com.google.zxing.client.android.Intents; import com.journeyapps.barcodescanner.ScanOptions; @@ -53,8 +60,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Locale; - -import com.google.zxing.client.android.BuildConfig; +import java.util.Objects; /** * An activity representing a list of Drugs is activity @@ -65,19 +71,15 @@ import com.google.zxing.client.android.BuildConfig; * item details side-by-side using two vertical panes. */ public class DrugListActivity extends AppCompatActivity { - // Used for dev and debug - final Boolean DEMO = false; - + private static final String TAG = DrugListActivity.class.getName(); public final int CUSTOMIZED_REQUEST_CODE = 0x0000ffff; public final String BARCODE_FORMAT_NAME = "Barcode Format name"; public final String BARCODE_CONTENT = "Barcode Content"; - - private ActivityResultLauncher mBarcodeScannerLauncher; - private static final String TAG = DrugListActivity.class.getName(); - + // Used for dev and debug + final Boolean DEMO = false; public PrescriptionDatabase prescriptions; public MedicineDatabase medicines; - + private ActivityResultLauncher mBarcodeScannerLauncher; private List prescriptionList; // used for prescriptions private RecyclerViewAdapter mAdapter; @@ -86,7 +88,7 @@ public class DrugListActivity extends AppCompatActivity { public void onStart() { super.onStart(); - if(BuildConfig.DEBUG) { + if (BuildConfig.DEBUG) { String manufacturer = Build.MANUFACTURER; String model = Build.MODEL; int version = Build.VERSION.SDK_INT; @@ -108,13 +110,13 @@ public class DrugListActivity extends AppCompatActivity { // Manually migrate old database to room PrescriptionsDAO prescriptionsDAO = prescriptions.getPrescriptionsDAO(); DBHelper dbHelper = new DBHelper(this); - if (dbHelper.getCount() !=0) { - List drugs=dbHelper.getAllDrugs(); - for (int count=0; count < dbHelper.getCount(); count++) { + if (dbHelper.getCount() != 0) { + List drugs = dbHelper.getAllDrugs(); + for (int count = 0; count < dbHelper.getCount(); count++) { Drug drug = drugs.get(count); Prescription prescription = new Prescription(); - if(prescriptionsDAO.getMedicByCIP13(drug.getCip13()) == null) { + if (prescriptionsDAO.getMedicByCIP13(drug.getCip13()) == null) { prescription.setName(drug.getName()); prescription.setCip13(drug.getCip13()); prescription.setCis(drug.getCis()); @@ -127,8 +129,7 @@ public class DrugListActivity extends AppCompatActivity { prescription.setLast_update(drug.getDateLastUpdate()); prescriptionsDAO.insert(prescription); - } - else { + } else { Log.i(TAG, "Already in the database"); } } @@ -142,18 +143,10 @@ public class DrugListActivity extends AppCompatActivity { } // start tutorial (only in non debug mode) - // if(!net.foucry.pilldroid.BuildConfig.DEBUG) { - Log.i(TAG, "Launch tutorial"); - startActivity(new Intent(this, WelcomeActivity.class)); - // } - - PrefManager prefManager = new PrefManager(this); - if (!prefManager.isUnderstood()) { - askForComprehensive(); - prefManager.setUnderstood(true); - } - - + // if(!net.foucry.pilldroid.BuildConfig.DEBUG) { + Log.i(TAG, "Launch tutorial"); + startActivity(new Intent(this, WelcomeActivity.class)); + // } } @Override @@ -165,11 +158,12 @@ public class DrugListActivity extends AppCompatActivity { super.onPause(); Log.d(TAG, "onPause"); - if (!AlarmReceiver.isAlarmScheduled(this)){ + if (!AlarmReceiver.isAlarmScheduled(this)) { AlarmReceiver.scheduleAlarm(this); } } + @SuppressLint("NotifyDataSetChanged") @Override public void onCreate(Bundle savedInstanceState) { @@ -184,41 +178,43 @@ public class DrugListActivity extends AppCompatActivity { // Set view content setContentView(R.layout.drug_list_activity); - Toolbar toolbar = findViewById(R.id.toolbar); + MaterialToolbar toolbar = findViewById(R.id.toolbar); if (toolbar != null) { setSupportActionBar(toolbar); toolbar.setTitle(getTitle()); } + FloatingActionButton mFloatingActionButton = findViewById(R.id.fab); + mFloatingActionButton.setOnClickListener(v-> onButtonClick()); if (DEMO) { - PrescriptionsDAO prescriptionsDAO = prescriptions.getPrescriptionsDAO(); + PrescriptionsDAO prescriptionsDAO = prescriptions.getPrescriptionsDAO(); - if (prescriptionsDAO.getMedicCount() == 0) { - final int min_stock = 5; - final int max_stock = 50; - final int min_take = 0; - final int max_take = 3; + if (prescriptionsDAO.getMedicCount() == 0) { + final int min_stock = 5; + final int max_stock = 50; + final int min_take = 0; + final int max_take = 3; - for (int i = 1; i < 9; i++) { - Prescription prescription = new Prescription(); - prescription.setName("Medicament test " + i); - prescription.setCip13("340093000001" + i); - prescription.setCis("6000001" + i); - prescription.setAdministration_mode("oral"); - prescription.setPresentation("plaquette(s) thermoformée(s) PVC PVDC aluminium de 10 comprimé(s)"); - prescription.setStock((float) intRandomExclusive(min_stock, max_stock)); - prescription.setTake((float) intRandomExclusive(min_take, max_take)); - prescription.setWarning(14); - prescription.setAlert(7); - prescription.setLast_update(UtilDate.dateAtNoon(new Date()).getTime()); + for (int i = 1; i < 9; i++) { + Prescription prescription = new Prescription(); + prescription.setName("Medicament test " + i); + prescription.setCip13("340093000001" + i); + prescription.setCis("6000001" + i); + prescription.setAdministration_mode("oral"); + prescription.setPresentation("plaquette(s) thermoformée(s) PVC PVDC aluminium de 10 comprimé(s)"); + prescription.setStock((float) intRandomExclusive(min_stock, max_stock)); + prescription.setTake((float) intRandomExclusive(min_take, max_take)); + prescription.setWarning(14); + prescription.setAlert(7); + prescription.setLast_update(UtilDate.dateAtNoon(new Date()).getTime()); - prescriptionsDAO.insert(prescription); - } - List prescriptions = prescriptionsDAO.getAllMedics(); - System.out.println(prescriptions); - Log.d(TAG, "prescriptions ==" + prescriptions); - } + prescriptionsDAO.insert(prescription); + } + List prescriptions = prescriptionsDAO.getAllMedics(); + System.out.println(prescriptions); + Log.d(TAG, "prescriptions ==" + prescriptions); + } } mBarcodeScannerLauncher = registerForActivityResult(new PilldroidScanContract(), @@ -230,6 +226,7 @@ public class DrugListActivity extends AppCompatActivity { Log.d(TAG, "Missing camera permission"); Toast.makeText(this, R.string.missing_camera_permission, Toast.LENGTH_LONG).show(); } else { + assert bundle != null; Log.d(TAG, "bundle == " + bundle.getInt("returnCode")); int returnCode = bundle.getInt("returnCode"); int resultCode = bundle.getInt("resultCode"); @@ -253,13 +250,13 @@ public class DrugListActivity extends AppCompatActivity { } String cip13; - switch (bundle.getString(BARCODE_FORMAT_NAME)) { + switch (Objects.requireNonNull(bundle.getString(BARCODE_FORMAT_NAME))) { case "CODE_128": case "EAN_13": //CODE_128 || EAN 13 cip13 = bundle.getString(BARCODE_CONTENT); break; case "DATA_MATRIX": - cip13 = bundle.getString(BARCODE_CONTENT).substring(4, 17); + cip13 = Objects.requireNonNull(bundle.getString(BARCODE_CONTENT)).substring(4, 17); break; default: scanNotOK(); @@ -323,7 +320,7 @@ public class DrugListActivity extends AppCompatActivity { } // Launch scan - public void onButtonClick(View v) { + public void onButtonClick() { Log.d(TAG, "add medication"); ScanOptions options = new ScanOptions(); options.setDesiredBarcodeFormats(ScanOptions.DATA_MATRIX, ScanOptions.CODE_128); @@ -332,11 +329,10 @@ public class DrugListActivity extends AppCompatActivity { options.setBarcodeImageEnabled(true); options.setTimeout(60); options.setCaptureActivity(CustomScannerActivity.class); - options.setBeepEnabled(true); options.addExtra(Intents.Scan.SCAN_TYPE, Intents.Scan.MIXED_SCAN); options.addExtra(Intents.Scan.SCAN_TYPE, Intents.Scan.INVERTED_SCAN); - Log.d(TAG, "scanOptions == " + options); + Log.d(TAG, "scanOptions == " + options); mBarcodeScannerLauncher.launch(options); } @@ -344,42 +340,62 @@ public class DrugListActivity extends AppCompatActivity { * show keyboardInput dialog */ protected void showInputDialog() { - // get prompts.xml view - LayoutInflater layoutInflater = LayoutInflater.from(DrugListActivity.this); - View promptView = layoutInflater.inflate(R.layout.input_dialog, null); - AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(DrugListActivity.this); - alertDialogBuilder.setView(promptView); + final Dialog dialog = new Dialog(this); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + Objects.requireNonNull(dialog.getWindow()).setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - final EditText editText = promptView.findViewById(R.id.edittext); - // setup a dialog window + dialog.setCancelable(true); + dialog.setCanceledOnTouchOutside(true); + dialog.setContentView(R.layout.input_dialog); - alertDialogBuilder.setCancelable(false) - .setPositiveButton("OK", (dialog, id) -> { - //String cip13 = editText.getText().toString(); - String cip13 = "34009" + editText.getText().toString(); - MedicinesDAO medicineDAO = medicines.getMedicinesDAO(); - Medicine aMedicine = medicineDAO.getMedicineByCIP13(cip13); - askToAddInDB(aMedicine); - }) - .setNegativeButton("Cancel", - (dialog, id) -> dialog.cancel()); + MaterialButton ok = dialog.findViewById(R.id.agreed); + MaterialButton cancel = dialog.findViewById(R.id.notagreed); + ok.setEnabled(false); + ok.setBackground(Objects.requireNonNull(ContextCompat.getDrawable(this, R.drawable.rounded_btn_disabled))); + MaterialTextView title = dialog.findViewById(R.id.title); + final EditText editText = dialog.findViewById(R.id.editcip13); + String cip13 = String.valueOf(editText.getText()); - // create an alert dialog - AlertDialog alert = alertDialogBuilder.create(); + // TODO change the color of ok button when the number of character is correct. + ok.setText(R.string.button_ok); + cancel.setText(R.string.button_cancel); editText.addTextChangedListener(new TextWatcher() { @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { } + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { } + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } @Override public void afterTextChanged(Editable s) { - alert.getButton(alert.BUTTON_POSITIVE).setEnabled(s.length() == 8); + //alert.getButton(alert.BUTTON_POSITIVE).setEnabled(s.length() == 8); + if (s.length() == 8) { + ok.setEnabled(true); + ok.setBackground(Objects.requireNonNull(ContextCompat.getDrawable(editText.getContext(), R.drawable.rounded_btn))); + } + else { + ok.setEnabled(false); + ok.setBackground(Objects.requireNonNull(ContextCompat.getDrawable(editText.getContext(), R.drawable.rounded_btn_disabled))); + } } }); - alert.show(); + ok.setOnClickListener(v -> { + dialog.cancel(); + Log.i("EditText Value",editText.getEditableText().toString()); + MedicinesDAO medicinesDAO = medicines.getMedicinesDAO(); + Medicine aMedicine = medicinesDAO.getMedicineByCIP13(cip13); + askToAddInDB(aMedicine); + }); + cancel.setOnClickListener(v -> { + dialog.cancel(); + Log.i(TAG, "dismiss dialog"); + }); + + dialog.show(); } /** @@ -389,24 +405,40 @@ public class DrugListActivity extends AppCompatActivity { * @param aMedicine Prescription- medication to be added */ private void askToAddInDB(Medicine aMedicine) { - AlertDialog.Builder dlg = new AlertDialog.Builder(this); - dlg.setTitle(getString(R.string.app_name)); + final Dialog dlg = new Dialog(this); + dlg.requestWindowFeature(Window.FEATURE_NO_TITLE); + Objects.requireNonNull(dlg.getWindow()).setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); + dlg.setContentView(R.layout.custom_dialog_layout_one_button); + dlg.setCancelable(true); + MaterialTextView msg = dlg.findViewById(R.id.msg); + String msgString; + MaterialTextView cpl = dlg.findViewById(R.id.cpl); + ShapeableImageView icon = dlg.findViewById(R.id.image); + MaterialButton btn = dlg.findViewById(R.id.txtClose); + dlg.show(); if (aMedicine != null) { - String msg = aMedicine.getName() + " " + getString(R.string.msgFound); - - dlg.setMessage(msg); - dlg.setNegativeButton(getString(R.string.button_cancel), (dialog, which) -> { - // Nothing to do in case of cancel - }); - dlg.setPositiveButton(getString(R.string.button_ok), (dialog, which) -> { - // Add Drug to DB then try to show it + msgString = aMedicine.getName() + " " + getString(R.string.msgFound); + msg.setText(msgString); + cpl.setText(getString(R.string.addInList)); + icon.setImageResource(R.drawable.tickmark); + btn.setText(getString(R.string.Yes)); + btn.setOnClickListener(v -> { + // TODO Auto-generated method stub + dlg.dismiss(); + finish(); addDrugToList(Utils.medicine2prescription(aMedicine)); }); } else { - dlg.setMessage(getString(R.string.msgNotFound)); - dlg.setPositiveButton("OK", (dialog, which) -> { - // nothing to do to just dismiss dialog + msgString = getString(R.string.msgNotFound); + msg.setText(msgString); + cpl.setText(""); + icon.setImageResource(R.drawable.tickcross); + btn.setText(getString(R.string.button_close)); + btn.setOnClickListener(v -> { + // TODO Auto-generated method stub + dlg.dismiss(); + finish(); }); } dlg.show(); @@ -416,7 +448,7 @@ public class DrugListActivity extends AppCompatActivity { * Tell user that the barre code cannot be interpreted */ private void scanNotOK() { - AlertDialog.Builder dlg = new AlertDialog.Builder(this); + MaterialAlertDialogBuilder dlg = new MaterialAlertDialogBuilder(this); dlg.setTitle(getString(R.string.app_name)); dlg.setMessage(R.string.notInterpreted); @@ -426,20 +458,6 @@ public class DrugListActivity extends AppCompatActivity { dlg.show(); } - /** - * askForCompréhensive - */ - private void askForComprehensive() { - AlertDialog.Builder dlg = new AlertDialog.Builder(this); - dlg.setTitle(getString(R.string.app_name)); - - dlg.setMessage(R.string.understood); - dlg.setPositiveButton(R.string.Yes, (dialog, which) -> { - // Nothing to do just dismiss dialog - }); - dlg.show(); - } - /** * Add New drug to the user database @@ -460,6 +478,7 @@ public class DrugListActivity extends AppCompatActivity { startActivityForResult(intent, CUSTOMIZED_REQUEST_CODE); overridePendingTransition(R.anim.slide_from_right, R.anim.slide_to_left); } + /** * setupRecyclerView (list of drugs) * @@ -470,7 +489,7 @@ public class DrugListActivity extends AppCompatActivity { mAdapter = new RecyclerViewAdapter(prescriptionList); recyclerView.setAdapter(mAdapter); - new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, (ItemTouchHelper.RIGHT|ItemTouchHelper.LEFT)) { + new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, (ItemTouchHelper.RIGHT | ItemTouchHelper.LEFT)) { @Override public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) { return false; @@ -492,80 +511,88 @@ public class DrugListActivity extends AppCompatActivity { } else { // Call DetailView Intent intent = new Intent(getApplicationContext(), DrugDetailActivity.class); - intent.putExtra("prescription", prescription); + intent.putExtra("prescription", prescription); startActivityForResult(intent, CUSTOMIZED_REQUEST_CODE); } Snackbar.make(recyclerView, prescription.getName(), - Snackbar.LENGTH_LONG).setAction(R.string.Undo, new View.OnClickListener() { - @Override - public void onClick(View v) { - prescriptionList.add(position, prescription); - mAdapter.notifyItemInserted(position); - } - }).show(); - } + Snackbar.LENGTH_LONG).setAction(R.string.Undo, v -> { + prescriptionList.add(position, prescription); + mAdapter.notifyItemInserted(position); + }).setActionTextColor(getResources().getColor(R.color.bg_screen1)) + .show(); + } - @Override - public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { - if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) { - // Get RecyclerView item from the ViewHolder - View itemView = viewHolder.itemView; + @Override + public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { + if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) { + // Get RecyclerView item from the ViewHolder + View itemView = viewHolder.itemView; - Paint p = new Paint(); - Drawable icon; - icon = ContextCompat.getDrawable(getApplicationContext(), R.drawable.ic_trash_can_outline); + Paint p = new Paint(); + Drawable icon; + icon = ContextCompat.getDrawable(getApplicationContext(), R.drawable.ic_trash_can_outline); - int xMarkMargin = (int) getApplicationContext().getResources().getDimension(R.dimen.fab_margin); + int xMarkMargin = (int) getApplicationContext().getResources().getDimension(R.dimen.fab_margin); + assert icon != null; + int intrinsicWidth = icon.getIntrinsicWidth(); + int intrinsicHeight = icon.getIntrinsicHeight(); + int itemHeight = itemView.getBottom() - itemView.getTop(); + + if (dX > 0) { + p.setColor(getColor(R.color.bg_screen3)); + icon = ContextCompat.getDrawable(getApplicationContext(), R.drawable.ic_edit_black_48dp); + + // Draw Rect with varying right side, equal to displacement dX + c.drawRect((float) itemView.getLeft(), (float) itemView.getTop(), dX, + (float) itemView.getBottom(), p); + + int xMarkLeft = itemView.getLeft() + xMarkMargin; + int xMarkRight = itemView.getLeft() + xMarkMargin + intrinsicWidth; + int xMarkTop = itemView.getTop() + (itemHeight - intrinsicHeight) / 2; + int xMarkBottom = xMarkTop + intrinsicHeight;// +xMarkTop; assert icon != null; - int intrinsicWidth = icon.getIntrinsicWidth(); - int intrinsicHeight = icon.getIntrinsicHeight(); - int itemHeight = itemView.getBottom() - itemView.getTop(); + icon.setBounds(xMarkLeft, xMarkTop, xMarkRight, xMarkBottom); - if (dX > 0) { - p.setColor(getColor(R.color.bg_screen3)); - icon = ContextCompat.getDrawable(getApplicationContext(), R.drawable.ic_edit_black_48dp); - - // Draw Rect with varying right side, equal to displacement dX - c.drawRect((float) itemView.getLeft(), (float) itemView.getTop(), dX, - (float) itemView.getBottom(), p); - - int xMarkLeft = itemView.getLeft() + xMarkMargin; - int xMarkRight = itemView.getLeft() + xMarkMargin + intrinsicWidth; - int xMarkTop = itemView.getTop() + (itemHeight - intrinsicHeight) / 2; - int xMarkBottom = xMarkTop + intrinsicHeight;// +xMarkTop; - assert icon != null; - icon.setBounds(xMarkLeft, xMarkTop, xMarkRight, xMarkBottom); - - } else { - p.setColor(getColor(R.color.bg_screen4)); - // Draw Rect with varying left side, equal to the item's right side plus negative displacement dX - c.drawRect((float) itemView.getRight() + dX, (float) itemView.getTop(), - (float) itemView.getRight(), (float) itemView.getBottom(), p); + } else { + p.setColor(getColor(R.color.bg_screen4)); + // Draw Rect with varying left side, equal to the item's right side plus negative displacement dX + c.drawRect((float) itemView.getRight() + dX, (float) itemView.getTop(), + (float) itemView.getRight(), (float) itemView.getBottom(), p); - int xMarkLeft = itemView.getRight() - xMarkMargin - intrinsicWidth; - int xMarkRight = itemView.getRight() - xMarkMargin; - int xMarkTop = itemView.getTop() + (itemHeight - intrinsicHeight) / 2; - int xMarkBottom = xMarkTop + intrinsicHeight; - icon.setBounds(xMarkLeft, xMarkTop, xMarkRight, xMarkBottom); + int xMarkLeft = itemView.getRight() - xMarkMargin - intrinsicWidth; + int xMarkRight = itemView.getRight() - xMarkMargin; + int xMarkTop = itemView.getTop() + (itemHeight - intrinsicHeight) / 2; + int xMarkBottom = xMarkTop + intrinsicHeight; + icon.setBounds(xMarkLeft, xMarkTop, xMarkRight, xMarkBottom); - } - icon.draw(c); - - super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); } + icon.draw(c); + + super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); } + } }).attachToRecyclerView(recyclerView); - } + } + + private String getAppName() { + PackageManager packageManager = getApplicationContext().getPackageManager(); + ApplicationInfo applicationInfo = null; + try { + applicationInfo = packageManager.getApplicationInfo(this.getPackageName(), 0); + } catch (final PackageManager.NameNotFoundException ignored) { + } + return (String) ((applicationInfo != null) ? packageManager.getApplicationLabel(applicationInfo) : "???"); + } /** * SimpleItemRecyclerViewAdapter */ public class RecyclerViewAdapter extends - RecyclerView.Adapter { + RecyclerView.Adapter { private final List mValues; @@ -620,17 +647,14 @@ public class DrugListActivity extends AppCompatActivity { holder.mView.setBackgroundResource(R.drawable.gradient_bg); holder.mIconView.setImageResource(R.drawable.ic_suspended_pill); - holder.mView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Prescription aPrescription = mValues.get(position); - Context context = v.getContext(); - Intent intent = new Intent(context, DrugDetailActivity.class); - intent.putExtra("prescription", aPrescription); - startActivityForResult(intent, CUSTOMIZED_REQUEST_CODE); - overridePendingTransition(R.anim.slide_from_right, R.anim.slide_to_left); + holder.mView.setOnClickListener(v -> { + Prescription aPrescription = mValues.get(position); + Context context = v.getContext(); + Intent intent = new Intent(context, DrugDetailActivity.class); + intent.putExtra("prescription", aPrescription); + startActivityForResult(intent, CUSTOMIZED_REQUEST_CODE); + overridePendingTransition(R.anim.slide_from_right, R.anim.slide_to_left); - } }); } else { int remainingStock = (int) Math.floor(mValues.get(position).getStock() / mValues.get(position).getTake()); @@ -646,16 +670,13 @@ public class DrugListActivity extends AppCompatActivity { holder.mIconView.setImageResource(R.drawable.ok_stock_vect); } - holder.mView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Prescription prescription = mValues.get(position); - Context context = v.getContext(); - Intent intent = new Intent(context, DrugDetailActivity.class); - intent.putExtra("prescription", prescription); - startActivityForResult(intent, CUSTOMIZED_REQUEST_CODE); - overridePendingTransition(R.anim.slide_from_right, R.anim.slide_to_left); - } + holder.mView.setOnClickListener(v -> { + Prescription prescription = mValues.get(position); + Context context = v.getContext(); + Intent intent = new Intent(context, DrugDetailActivity.class); + intent.putExtra("prescription", prescription); + startActivityForResult(intent, CUSTOMIZED_REQUEST_CODE); + overridePendingTransition(R.anim.slide_from_right, R.anim.slide_to_left); }); } } @@ -667,9 +688,9 @@ public class DrugListActivity extends AppCompatActivity { class ViewHolder extends RecyclerView.ViewHolder { final View mView; - final TextView mContentView; - final TextView mEndOfStock; - final ImageView mIconView; + final MaterialTextView mContentView; + final MaterialTextView mEndOfStock; + final ShapeableImageView mIconView; public Prescription mItem; ViewHolder(View view) { @@ -687,14 +708,4 @@ public class DrugListActivity extends AppCompatActivity { } } } - - private String getAppName() { - PackageManager packageManager = getApplicationContext().getPackageManager(); - ApplicationInfo applicationInfo = null; - try { - applicationInfo = packageManager.getApplicationInfo(this.getPackageName(), 0); - } catch (final PackageManager.NameNotFoundException ignored) { - } - return (String) ((applicationInfo != null) ? packageManager.getApplicationLabel(applicationInfo) : "???"); - } } diff --git a/app/src/main/java/net/foucry/pilldroid/PilldroidScanContract.java b/app/src/main/java/net/foucry/pilldroid/PilldroidScanContract.java index 8c8478a..4be8727 100644 --- a/app/src/main/java/net/foucry/pilldroid/PilldroidScanContract.java +++ b/app/src/main/java/net/foucry/pilldroid/PilldroidScanContract.java @@ -13,23 +13,24 @@ import com.journeyapps.barcodescanner.ScanIntentResult; import com.journeyapps.barcodescanner.ScanOptions; -public class PilldroidScanContract extends ActivityResultContract{ - private static final String TAG = PilldroidScanContract.class.getName(); - @NonNull - @Override - public Intent createIntent(@NonNull Context context, ScanOptions input) { - Log.d(TAG, "create Intent"); +public class PilldroidScanContract extends ActivityResultContract { + private static final String TAG = PilldroidScanContract.class.getName(); - Intent intent = new Intent(context, CustomScannerActivity.class); + @NonNull + @Override + public Intent createIntent(@NonNull Context context, ScanOptions input) { + Log.d(TAG, "create Intent"); - intent.setAction(Intents.Scan.ACTION); + Intent intent = new Intent(context, CustomScannerActivity.class); - Log.d(TAG, "intent ==" + intent); - return(intent); - } + intent.setAction(Intents.Scan.ACTION); - @Override - public ScanIntentResult parseResult(int resultCode, @Nullable Intent intent) { - return ScanIntentResult.parseActivityResult(resultCode, intent); - } + Log.d(TAG, "intent ==" + intent); + return (intent); + } + + @Override + public ScanIntentResult parseResult(int resultCode, @Nullable Intent intent) { + return ScanIntentResult.parseActivityResult(resultCode, intent); + } } diff --git a/app/src/main/java/net/foucry/pilldroid/PrefManager.java b/app/src/main/java/net/foucry/pilldroid/PrefManager.java index 8d0989d..6e2429c 100644 --- a/app/src/main/java/net/foucry/pilldroid/PrefManager.java +++ b/app/src/main/java/net/foucry/pilldroid/PrefManager.java @@ -4,49 +4,51 @@ package net.foucry.pilldroid; import android.content.Context; import android.content.SharedPreferences; - /** - * Created by Lincoln on 05/05/16. - */ - public class PrefManager { - final SharedPreferences pref; - SharedPreferences.Editor editor; +/** + * Created by Lincoln on 05/05/16. + */ +public class PrefManager { + // Shared preferences file name + private static final String PREF_NAME = "Pildroid-Prefs"; + private static final String IS_FIRST_TIME_LAUNCH = "IsFirstTimeLaunch"; + private static final String DATABASE_VERSION = "DatabaseVersion"; + private static final String IS_UNDERSTOOD = "IsUnderStood"; + final SharedPreferences pref; + // shared pref mode + final int PRIVATE_MODE = 0; + SharedPreferences.Editor editor; - // shared pref mode - final int PRIVATE_MODE = 0; - - // Shared preferences file name - private static final String PREF_NAME = "Pildroid-Prefs"; - private static final String IS_FIRST_TIME_LAUNCH = "IsFirstTimeLaunch"; - private static final String DATABASE_VERSION = "DatabaseVersion"; - private static final String IS_UNDERSTOOD = "IsUnderStood"; - - public PrefManager(Context context) { - pref = context.getSharedPreferences(PREF_NAME, PRIVATE_MODE); - } - - public void setFirstTimeLaunch(boolean isFirstTime) { - editor = pref.edit(); - editor.putBoolean(IS_FIRST_TIME_LAUNCH, isFirstTime); - editor.apply(); - } - - public void setDatabaseVersion(int version) { - editor = pref.edit(); - editor.putInt(DATABASE_VERSION, version); - editor.apply(); - } - - public void setUnderstood(boolean isUnderstood) { - editor = pref.edit(); - editor.putBoolean(IS_UNDERSTOOD, isUnderstood); - editor.apply(); - } - - public boolean isFirstTimeLaunch() { - return pref.getBoolean(IS_FIRST_TIME_LAUNCH, true); - } - public int getDatabaseVersion() { - return pref.getInt(DATABASE_VERSION, 0); - } - public boolean isUnderstood() {return pref.getBoolean(IS_UNDERSTOOD, false); } + public PrefManager(Context context) { + pref = context.getSharedPreferences(PREF_NAME, PRIVATE_MODE); } + + public boolean isFirstTimeLaunch() { + return pref.getBoolean(IS_FIRST_TIME_LAUNCH, true); + } + + public void setFirstTimeLaunch(boolean isFirstTime) { + editor = pref.edit(); + editor.putBoolean(IS_FIRST_TIME_LAUNCH, isFirstTime); + editor.apply(); + } + + public int getDatabaseVersion() { + return pref.getInt(DATABASE_VERSION, 0); + } + + public void setDatabaseVersion(int version) { + editor = pref.edit(); + editor.putInt(DATABASE_VERSION, version); + editor.apply(); + } + + public boolean isUnderstood() { + return pref.getBoolean(IS_UNDERSTOOD, false); + } + + public void setUnderstood(boolean isUnderstood) { + editor = pref.edit(); + editor.putBoolean(IS_UNDERSTOOD, isUnderstood); + editor.apply(); + } +} diff --git a/app/src/main/java/net/foucry/pilldroid/UtilDate.java b/app/src/main/java/net/foucry/pilldroid/UtilDate.java index 9a67307..37595dc 100644 --- a/app/src/main/java/net/foucry/pilldroid/UtilDate.java +++ b/app/src/main/java/net/foucry/pilldroid/UtilDate.java @@ -86,11 +86,12 @@ public class UtilDate { Date oldDate = dateAtNoon(date); // Be sure that the old date is at Noon Date todayDate = dateAtNoon(new Date()); // Be sure that we use today at Noon - return (int) (todayDate.getTime() - oldDate.getTime())/(86400*1000); + return (int) (todayDate.getTime() - oldDate.getTime()) / (86400 * 1000); } /** * Convert dateInMilliseconds into string formatted date + * * @param dateInMilliseconds long * @return formatted Date String */ diff --git a/app/src/main/java/net/foucry/pilldroid/Utils.java b/app/src/main/java/net/foucry/pilldroid/Utils.java index b5b65ff..623b2df 100644 --- a/app/src/main/java/net/foucry/pilldroid/Utils.java +++ b/app/src/main/java/net/foucry/pilldroid/Utils.java @@ -3,7 +3,6 @@ package net.foucry.pilldroid; import net.foucry.pilldroid.models.Medicine; import net.foucry.pilldroid.models.Prescription; -import java.util.Comparator; import java.util.Date; import java.util.List; import java.util.Locale; @@ -14,21 +13,21 @@ public class Utils { /** * Return a random number between two values - use to generate a false demo DB + * * @param min minimal value accepted * @param max maximum value accepted * @return int random number */ static int intRandomExclusive(int min, int max) { Random r = new Random(); - return r.nextInt(max - min) +max; + return r.nextInt(max - min) + max; } - public static String fmt(double d) - { - if(d == (long) d) - return String.format(Locale.getDefault(),"%d",(long)d); + public static String fmt(double d) { + if (d == (long) d) + return String.format(Locale.getDefault(), "%d", (long) d); else - return String.format("%s",d); + return String.format("%s", d); } public static Prescription medicine2prescription(Medicine aMedicine) { @@ -49,14 +48,11 @@ public class Utils { } public static void sortPrescriptionList(List prescriptionList) { - prescriptionList.sort(new Comparator<>() { - @Override - public int compare(Prescription lhs, Prescription rhs) { - if (lhs.getDateEndOfStock().compareTo(rhs.getDateEndOfStock()) != 0) - return lhs.getDateEndOfStock().compareTo(rhs.getDateEndOfStock()); - else - return (int) (lhs.getStock() - rhs.getStock()); - } + prescriptionList.sort((lhs, rhs) -> { + if (lhs.getDateEndOfStock().compareTo(rhs.getDateEndOfStock()) != 0) + return lhs.getDateEndOfStock().compareTo(rhs.getDateEndOfStock()); + else + return (int) (lhs.getStock() - rhs.getStock()); }); } diff --git a/app/src/main/java/net/foucry/pilldroid/WelcomeActivity.java b/app/src/main/java/net/foucry/pilldroid/WelcomeActivity.java index 43791a2..e6ee362 100644 --- a/app/src/main/java/net/foucry/pilldroid/WelcomeActivity.java +++ b/app/src/main/java/net/foucry/pilldroid/WelcomeActivity.java @@ -1,7 +1,9 @@ package net.foucry.pilldroid; +import android.app.Dialog; import android.content.Intent; import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.os.Build; import android.os.Bundle; import android.view.LayoutInflater; @@ -11,126 +13,23 @@ import android.view.Window; import android.view.WindowInsets; import android.view.WindowInsetsController; import android.view.WindowManager; -import android.widget.Button; import android.widget.LinearLayout; -import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; +import com.google.android.material.button.MaterialButton; +import com.google.android.material.imageview.ShapeableImageView; +import com.google.android.material.textview.MaterialTextView; public class WelcomeActivity extends AppCompatActivity { private ViewPager viewPager; private LinearLayout dotsLayout; private int[] layouts; - private Button btnSkip, btnNext; - private PrefManager prefManager; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - boolean DEBUG = false; - - // Checking for first time launch - before calling setContentView() - prefManager = new PrefManager(this); - if (DEBUG) { - prefManager.setFirstTimeLaunch(true); - } - if (!prefManager.isFirstTimeLaunch()) { - finish(); - } - - prefManager.setFirstTimeLaunch(false); - setContentView(R.layout.welcome_activity); - - setFullScreen(); - - viewPager = findViewById(R.id.view_pager); - dotsLayout = findViewById(R.id.layoutDots); - btnSkip = findViewById(R.id.btn_skip); - btnNext = findViewById(R.id.btn_next); - - - // layouts of all welcome sliders - // add few more layouts if you want - layouts = new int[]{ - R.layout.welcome1, - R.layout.welcome2, - R.layout.welcome3, - R.layout.welcome4, - R.layout.welcome5, - R.layout.welcome6, - R.layout.welcome7, - R.layout.welcome8, - R.layout.welcome9, - R.layout.welcome10, - R.layout.welcome11, - R.layout.welcome12}; - - // adding bottom dots - addBottomDots(0); - - // making notification bar transparent - changeStatusBarColor(); - - MyViewPagerAdapter myViewPagerAdapter = new MyViewPagerAdapter(); - viewPager.setAdapter(myViewPagerAdapter); - viewPager.addOnPageChangeListener(viewPagerPageChangeListener); - - btnSkip.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - launchHomeScreen(); - } - }); - - btnNext.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - // checking for last page - // if last page home screen will be launched - int current = getItem(); - if (current < layouts.length) { - // move to next screen - viewPager.setCurrentItem(current); - overridePendingTransition(R.anim.slide_from_left, R.anim.slide_to_right); - } else { - launchHomeScreen(); - } - } - }); - } - - private void addBottomDots(int currentPage) { - TextView[] dots = new TextView[layouts.length]; - - dotsLayout.removeAllViews(); - for (int i = 0; i < dots.length; i++) { - dots[i] = new TextView(this); - dots[i].setText("∙"); - dots[i].setTextSize(65); - dots[i].setTextColor(ContextCompat.getColor(this, R.color.dot_dark)); - dotsLayout.addView(dots[i]); - } - - if (dots.length > 0) - dots[currentPage].setTextColor(ContextCompat.getColor(this, R.color.dot_light)); - } - - private int getItem() { - return viewPager.getCurrentItem() + 1; - } - - void launchHomeScreen() { - prefManager.setFirstTimeLaunch(false); - startActivity(new Intent(WelcomeActivity.this, DrugListActivity.class)); - finish(); - } - + private MaterialButton btnSkip, btnNext; // viewpager change listener final ViewPager.OnPageChangeListener viewPagerPageChangeListener = new ViewPager.OnPageChangeListener() { @@ -160,6 +59,131 @@ public class WelcomeActivity extends AppCompatActivity { } }; + private PrefManager prefManager; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + boolean DEBUG = false; + + // Checking for first time launch - before calling setContentView() + prefManager = new PrefManager(this); + if (DEBUG) { + prefManager.setFirstTimeLaunch(true); + } + if (!prefManager.isFirstTimeLaunch()) { + finish(); + } + + prefManager.setFirstTimeLaunch(false); + + if (!prefManager.isUnderstood()) { + askForComprehensive(); + prefManager.setUnderstood(true); + } + + setContentView(R.layout.welcome_activity); + + setFullScreen(); + + viewPager = findViewById(R.id.view_pager); + dotsLayout = findViewById(R.id.layoutDots); + btnSkip = findViewById(R.id.btn_skip); + btnNext = findViewById(R.id.btn_next); + + + // layouts of all welcome sliders + // add few more layouts if you want + layouts = new int[]{ + R.layout.welcome1, + R.layout.welcome2, + R.layout.welcome3, + R.layout.welcome4, + R.layout.welcome5, + R.layout.welcome6, + R.layout.welcome7, + R.layout.welcome8, + R.layout.welcome9, + R.layout.welcome10, + R.layout.welcome11, + R.layout.welcome12}; + + // adding bottom dots + addBottomDots(0); + + // making notification bar transparent + changeStatusBarColor(); + + MyViewPagerAdapter myViewPagerAdapter = new MyViewPagerAdapter(); + viewPager.setAdapter(myViewPagerAdapter); + viewPager.addOnPageChangeListener(viewPagerPageChangeListener); + + btnSkip.setOnClickListener(v -> launchHomeScreen()); + + btnNext.setOnClickListener(v -> { + // checking for last page + // if last page home screen will be launched + int current = getItem(); + if (current < layouts.length) { + // move to next screen + viewPager.setCurrentItem(current); + overridePendingTransition(R.anim.slide_from_left, R.anim.slide_to_right); + } else { + launchHomeScreen(); + } + }); + } + + private void askForComprehensive() { + final Dialog dlg = new Dialog(this); + dlg.requestWindowFeature(Window.FEATURE_NO_TITLE); + dlg.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); + dlg.setContentView(R.layout.custom_dialog_layout_one_button); + dlg.setCancelable(false); + MaterialTextView msg = dlg.findViewById(R.id.msg); + String msgString; + MaterialTextView cpl = dlg.findViewById(R.id.cpl); + ShapeableImageView icon = dlg.findViewById(R.id.image); + MaterialButton btn = dlg.findViewById(R.id.txtClose); + dlg.show(); + + msgString = getString(R.string.understood); + msg.setText(msgString); + cpl.setVisibility(View.GONE); + //icon.setImageResource(R.drawable.pilldroid_icon); + btn.setText(R.string.Yes_understood); + btn.setOnClickListener(v -> { + // TODO Auto-generated method stub + dlg.dismiss(); + }); + } + + private void addBottomDots(int currentPage) { + MaterialTextView[] dots = new MaterialTextView[layouts.length]; + + dotsLayout.removeAllViews(); + for (int i = 0; i < dots.length; i++) { + dots[i] = new MaterialTextView(this); + dots[i].setText("∙"); + dots[i].setTextSize(65); + dots[i].setTextColor(ContextCompat.getColor(this, R.color.dot_dark)); + dotsLayout.addView(dots[i]); + } + + if (dots.length > 0) + dots[currentPage].setTextColor(ContextCompat.getColor(this, R.color.dot_light)); + } + + private int getItem() { + return viewPager.getCurrentItem() + 1; + } + + void launchHomeScreen() { + prefManager.setFirstTimeLaunch(false); + startActivity(new Intent(WelcomeActivity.this, DrugListActivity.class)); + finish(); + } /** * Making notification bar transparent @@ -170,17 +194,16 @@ public class WelcomeActivity extends AppCompatActivity { window.setStatusBarColor(Color.TRANSPARENT); } - private void setFullScreen(){ + @SuppressWarnings("deprecation") + private void setFullScreen() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { getWindow().setDecorFitsSystemWindows(false); WindowInsetsController controller = getWindow().getInsetsController(); - if(controller != null) { + if (controller != null) { controller.hide(WindowInsets.Type.statusBars() | WindowInsets.Type.navigationBars()); controller.setSystemBarsBehavior(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE); } - } - else { - //noinspection + } else { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION @@ -222,7 +245,7 @@ public class WelcomeActivity extends AppCompatActivity { @Override - public void destroyItem(ViewGroup container, int position, @NonNull Object object) { + public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { View view = (View) object; container.removeView(view); } diff --git a/app/src/main/java/net/foucry/pilldroid/dao/PrescriptionsDAO.java b/app/src/main/java/net/foucry/pilldroid/dao/PrescriptionsDAO.java index 969ac4a..4eb920a 100644 --- a/app/src/main/java/net/foucry/pilldroid/dao/PrescriptionsDAO.java +++ b/app/src/main/java/net/foucry/pilldroid/dao/PrescriptionsDAO.java @@ -12,23 +12,23 @@ import java.util.List; @Dao public interface PrescriptionsDAO { - @Insert - void insert(Prescription... prescriptions); + @Insert + void insert(Prescription... prescriptions); - @Update - void update(Prescription... prescriptions); + @Update + void update(Prescription... prescriptions); - @Delete - void delete(Prescription prescription); + @Delete + void delete(Prescription prescription); - @Query("SELECT * FROM prescriptions") - List getAllMedics(); + @Query("SELECT * FROM prescriptions") + List getAllMedics(); - @Query("SELECT * FROM prescriptions WHERE cip13 = :cip13") - Prescription getMedicByCIP13(String cip13); + @Query("SELECT * FROM prescriptions WHERE cip13 = :cip13") + Prescription getMedicByCIP13(String cip13); - @Query("SELECT count(*) FROM prescriptions") - int getMedicCount(); + @Query("SELECT count(*) FROM prescriptions") + int getMedicCount(); } diff --git a/app/src/main/java/net/foucry/pilldroid/databases/MedicineDatabase.java b/app/src/main/java/net/foucry/pilldroid/databases/MedicineDatabase.java index 0f50517..763ce18 100644 --- a/app/src/main/java/net/foucry/pilldroid/databases/MedicineDatabase.java +++ b/app/src/main/java/net/foucry/pilldroid/databases/MedicineDatabase.java @@ -16,7 +16,7 @@ import net.foucry.pilldroid.models.Medicine; public abstract class MedicineDatabase extends RoomDatabase { private static MedicineDatabase INSTANCE; - public abstract MedicinesDAO getMedicinesDAO(); + public static MedicineDatabase getInstanceDatabase(Context context) { if (INSTANCE == null) { INSTANCE = @@ -32,4 +32,6 @@ public abstract class MedicineDatabase extends RoomDatabase { public static void destroyInstance() { INSTANCE = null; } + + public abstract MedicinesDAO getMedicinesDAO(); } \ No newline at end of file diff --git a/app/src/main/java/net/foucry/pilldroid/databases/PrescriptionDatabase.java b/app/src/main/java/net/foucry/pilldroid/databases/PrescriptionDatabase.java index 406f05e..10e826e 100644 --- a/app/src/main/java/net/foucry/pilldroid/databases/PrescriptionDatabase.java +++ b/app/src/main/java/net/foucry/pilldroid/databases/PrescriptionDatabase.java @@ -13,38 +13,40 @@ import net.foucry.pilldroid.dao.PrescriptionsDAO; import net.foucry.pilldroid.models.Prescription; @Database( - version = 2, - entities = {Prescription.class}, - autoMigrations = { - @AutoMigration( - from = 1, - to = 2, - spec = PrescriptionDatabase.generic_typeMigration.class - ) - } + version = 2, + entities = {Prescription.class}, + autoMigrations = { + @AutoMigration( + from = 1, + to = 2, + spec = PrescriptionDatabase.generic_typeMigration.class + ) + } ) public abstract class PrescriptionDatabase extends RoomDatabase { private static PrescriptionDatabase INSTANCE; - public abstract PrescriptionsDAO getPrescriptionsDAO(); - - @RenameColumn(tableName = "prescriptions", fromColumnName = "genetic_type", toColumnName = "generic_type") - static class generic_typeMigration implements AutoMigrationSpec { } - public static PrescriptionDatabase getInstanceDatabase(Context context) { if (INSTANCE == null) { INSTANCE = - Room - .databaseBuilder(context.getApplicationContext(), - PrescriptionDatabase.class, "prescriptions") - .allowMainThreadQueries() - .build(); + Room + .databaseBuilder(context.getApplicationContext(), + PrescriptionDatabase.class, "prescriptions") + .allowMainThreadQueries() + .build(); } return INSTANCE; } + public static void destroyInstance() { INSTANCE = null; } + + public abstract PrescriptionsDAO getPrescriptionsDAO(); + + @RenameColumn(tableName = "prescriptions", fromColumnName = "genetic_type", toColumnName = "generic_type") + static class generic_typeMigration implements AutoMigrationSpec { + } } diff --git a/app/src/main/java/net/foucry/pilldroid/models/Medicine.java b/app/src/main/java/net/foucry/pilldroid/models/Medicine.java index 1fd10be..ec69cd1 100644 --- a/app/src/main/java/net/foucry/pilldroid/models/Medicine.java +++ b/app/src/main/java/net/foucry/pilldroid/models/Medicine.java @@ -7,14 +7,15 @@ import androidx.room.PrimaryKey; @Entity(tableName = "drugs") public class Medicine { @PrimaryKey - @NonNull private Integer _id; - private String cis; - private String cip13; - private String cip7; - private String administration_mode; - private String name; - private String presentation; - private String label_group; + @NonNull + private Integer _id; + private String cis; + private String cip13; + private String cip7; + private String administration_mode; + private String name; + private String presentation; + private String label_group; private Integer generic_type; public Medicine(@NonNull String cis) { diff --git a/app/src/main/java/net/foucry/pilldroid/models/Prescription.java b/app/src/main/java/net/foucry/pilldroid/models/Prescription.java index 7ce3ea9..45e41dc 100644 --- a/app/src/main/java/net/foucry/pilldroid/models/Prescription.java +++ b/app/src/main/java/net/foucry/pilldroid/models/Prescription.java @@ -1,8 +1,5 @@ package net.foucry.pilldroid.models; -import android.util.Log; -import android.widget.Toast; - import androidx.annotation.NonNull; import androidx.room.Entity; import androidx.room.PrimaryKey; @@ -15,7 +12,7 @@ import java.util.Date; @Entity(tableName = "prescriptions") public class Prescription implements Serializable { - private static final String TAG = Prescription.class.getName();; + private static final String TAG = Prescription.class.getName(); @PrimaryKey @NonNull private String cis; @@ -31,87 +28,87 @@ public class Prescription implements Serializable { private String label_group; private Integer generic_type; - public void setCis(@NonNull String cis) { - this.cis = cis; - } - - public void setCip13(String cip13) { - this.cip13 = cip13; - } - - public void setName(String name) { - this.name = name; - } - - public void setAdministration_mode(String administration_mode) { - this.administration_mode = administration_mode; - } - - public void setPresentation(String presentation) { - this.presentation = presentation; - } - - public void setStock(Float stock) { - this.stock = stock; - } - - public void setTake(Float take) { - this.take = take; - } - - public void setWarning(Integer warning) { - this.warning = warning; - } - - public void setAlert(Integer alert) { - this.alert = alert; - } - - public void setLast_update(Long last_update) { - this.last_update = last_update; - } - @NonNull public String getCis() { return this.cis; } + public void setCis(@NonNull String cis) { + this.cis = cis; + } + public Integer getWarning() { return warning; } + public void setWarning(Integer warning) { + this.warning = warning; + } + public String getCip13() { return cip13; } + public void setCip13(String cip13) { + this.cip13 = cip13; + } + public String getName() { return name; } + public void setName(String name) { + this.name = name; + } + public String getAdministration_mode() { return administration_mode; } + public void setAdministration_mode(String administration_mode) { + this.administration_mode = administration_mode; + } + public String getPresentation() { return presentation; } + public void setPresentation(String presentation) { + this.presentation = presentation; + } + public Float getStock() { return stock; } + public void setStock(Float stock) { + this.stock = stock; + } + public Float getTake() { return take; } + public void setTake(Float take) { + this.take = take; + } + public Integer getAlert() { return alert; } + public void setAlert(Integer alert) { + this.alert = alert; + } + public Long getLast_update() { return last_update; } + public void setLast_update(Long last_update) { + this.last_update = last_update; + } + public int getAlertThreshold() { return this.alert; } @@ -167,8 +164,12 @@ public class Prescription implements Serializable { }*/ if (numberOfDays > 0) { + float currentStock = 0; + float newStock = 0; double takeDuringPeriod = this.take * numberOfDays; - setStock((float) (getStock() - takeDuringPeriod)); + currentStock = getStock(); + newStock = (float) (currentStock - takeDuringPeriod); + setStock(newStock); setLast_update(new Date().getTime()); } } diff --git a/app/src/main/res/anim/slide_from_left.xml b/app/src/main/res/anim/slide_from_left.xml index e28db8a..084e18e 100644 --- a/app/src/main/res/anim/slide_from_left.xml +++ b/app/src/main/res/anim/slide_from_left.xml @@ -1,6 +1,8 @@ - + android:toXDelta="0" /> \ No newline at end of file diff --git a/app/src/main/res/anim/slide_from_right.xml b/app/src/main/res/anim/slide_from_right.xml index b4224a5..ca260c8 100644 --- a/app/src/main/res/anim/slide_from_right.xml +++ b/app/src/main/res/anim/slide_from_right.xml @@ -1,6 +1,8 @@ - + android:toXDelta="0" /> \ No newline at end of file diff --git a/app/src/main/res/anim/slide_to_left.xml b/app/src/main/res/anim/slide_to_left.xml index 4e9dc22..00190ff 100644 --- a/app/src/main/res/anim/slide_to_left.xml +++ b/app/src/main/res/anim/slide_to_left.xml @@ -1,6 +1,6 @@ - + android:toXDelta="-100%p"/> \ No newline at end of file diff --git a/app/src/main/res/anim/slide_to_right.xml b/app/src/main/res/anim/slide_to_right.xml index 1d73b17..705daa9 100644 --- a/app/src/main/res/anim/slide_to_right.xml +++ b/app/src/main/res/anim/slide_to_right.xml @@ -1,6 +1,8 @@ - + android:toXDelta="100%p" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/arrow_back.xml b/app/src/main/res/drawable/arrow_back.xml new file mode 100644 index 0000000..0e2e863 --- /dev/null +++ b/app/src/main/res/drawable/arrow_back.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/background_dialog.xml b/app/src/main/res/drawable/background_dialog.xml new file mode 100644 index 0000000..f3b2d55 --- /dev/null +++ b/app/src/main/res/drawable/background_dialog.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add.xml b/app/src/main/res/drawable/ic_add.xml new file mode 100644 index 0000000..2fcde96 --- /dev/null +++ b/app/src/main/res/drawable/ic_add.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_save_black_24dp.xml b/app/src/main/res/drawable/ic_save_black_24dp.xml index 085eb41..7a19b6b 100644 --- a/app/src/main/res/drawable/ic_save_black_24dp.xml +++ b/app/src/main/res/drawable/ic_save_black_24dp.xml @@ -1,4 +1,4 @@ - + diff --git a/app/src/main/res/drawable/rounded_btn.xml b/app/src/main/res/drawable/rounded_btn.xml new file mode 100644 index 0000000..09dce02 --- /dev/null +++ b/app/src/main/res/drawable/rounded_btn.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/rounded_btn_disabled.xml b/app/src/main/res/drawable/rounded_btn_disabled.xml new file mode 100644 index 0000000..89933d4 --- /dev/null +++ b/app/src/main/res/drawable/rounded_btn_disabled.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shadow_bg.xml b/app/src/main/res/drawable/shadow_bg.xml new file mode 100644 index 0000000..1482ed0 --- /dev/null +++ b/app/src/main/res/drawable/shadow_bg.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/tickcross.xml b/app/src/main/res/drawable/tickcross.xml new file mode 100644 index 0000000..3a5e7e7 --- /dev/null +++ b/app/src/main/res/drawable/tickcross.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/tickmark.xml b/app/src/main/res/drawable/tickmark.xml new file mode 100644 index 0000000..467e3b7 --- /dev/null +++ b/app/src/main/res/drawable/tickmark.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/font/opensans_regular.xml b/app/src/main/res/font/opensans_regular.xml new file mode 100644 index 0000000..f9284b2 --- /dev/null +++ b/app/src/main/res/font/opensans_regular.xml @@ -0,0 +1,7 @@ + + + diff --git a/app/src/main/res/font/opensans_semibold.ttf b/app/src/main/res/font/opensans_semibold.ttf new file mode 100644 index 0000000..de2baa4 Binary files /dev/null and b/app/src/main/res/font/opensans_semibold.ttf differ diff --git a/app/src/main/res/layout-w900dp/drug_list.xml b/app/src/main/res/layout-w900dp/drug_list.xml index 6f8d0f6..ea61160 100644 --- a/app/src/main/res/layout-w900dp/drug_list.xml +++ b/app/src/main/res/layout-w900dp/drug_list.xml @@ -3,8 +3,8 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_marginLeft="16dp" - android:layout_marginRight="16dp" + android:layout_marginStart="16dp" + android:layout_marginEnd="16dp" android:baselineAligned="false" android:divider="?android:attr/dividerHorizontal" android:orientation="horizontal" @@ -23,8 +23,8 @@ android:name="net.foucry.pilldroid.MedicamentListFragment" android:layout_width="@dimen/item_width" android:layout_height="match_parent" - android:layout_marginLeft="16dp" - android:layout_marginRight="16dp" + android:layout_marginStart="16dp" + android:layout_marginEnd="16dp" app:layoutManager="LinearLayoutManager" tools:context="net.foucry.pilldroid.DrugListActivity" tools:listitem="@layout/drug_list_content" /> diff --git a/app/src/main/res/layout/about.xml b/app/src/main/res/layout/about.xml index e45cf76..4087f6b 100644 --- a/app/src/main/res/layout/about.xml +++ b/app/src/main/res/layout/about.xml @@ -1,10 +1,22 @@ - + + + + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> - + app:zxing_framing_rect_height="150dp" + app:zxing_framing_rect_width="300dp"/> + app:zxing_viewfinder_mask="@color/grey" /> - + app:background="@android:color/darker_gray" + app:srcCompat="@drawable/ic_cancel_black_24dp" /> \ No newline at end of file diff --git a/app/src/main/res/layout/custom_btn.xml b/app/src/main/res/layout/custom_btn.xml new file mode 100644 index 0000000..0c1ef17 --- /dev/null +++ b/app/src/main/res/layout/custom_btn.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/custom_dialog_layout_one_button.xml b/app/src/main/res/layout/custom_dialog_layout_one_button.xml new file mode 100644 index 0000000..df8e602 --- /dev/null +++ b/app/src/main/res/layout/custom_dialog_layout_one_button.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/custom_dialog_layout_two_button.xml b/app/src/main/res/layout/custom_dialog_layout_two_button.xml new file mode 100644 index 0000000..f735162 --- /dev/null +++ b/app/src/main/res/layout/custom_dialog_layout_two_button.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/custom_scanner_activty.xml b/app/src/main/res/layout/custom_scanner_activty.xml index 298d8c5..2d91999 100644 --- a/app/src/main/res/layout/custom_scanner_activty.xml +++ b/app/src/main/res/layout/custom_scanner_activty.xml @@ -1,7 +1,7 @@ @@ -21,10 +21,9 @@ android:layout_marginTop="@dimen/fab_margin" android:layout_marginEnd="@dimen/fab_margin" android:layout_marginBottom="@dimen/fab_margin" - android:backgroundTint="@android:color/transparent" + app:backgroundTint="@android:color/transparent" android:contentDescription="@string/flashlightButton" - android:onClick="switchFlashlight" - android:src="@drawable/ic_baseline_highlight_24" /> + app:srcCompat="@drawable/ic_baseline_highlight_24" /> \ No newline at end of file diff --git a/app/src/main/res/layout/drug_detail.xml b/app/src/main/res/layout/drug_detail.xml index 1592f83..31e9bdc 100644 --- a/app/src/main/res/layout/drug_detail.xml +++ b/app/src/main/res/layout/drug_detail.xml @@ -8,47 +8,47 @@ + android:layout_height="match_parent" /> - + android:layout_height="match_parent" /> + - + android:layout_height="match_parent" /> + - + android:layout_height="wrap_content" /> + + android:layout_height="wrap_content" /> - + android:layout_height="wrap_content" /> + diff --git a/app/src/main/res/layout/drug_detail_activity.xml b/app/src/main/res/layout/drug_detail_activity.xml index ecf8bda..adf7f04 100644 --- a/app/src/main/res/layout/drug_detail_activity.xml +++ b/app/src/main/res/layout/drug_detail_activity.xml @@ -12,27 +12,25 @@ + android:layout_height="wrap_content"> + app:contentScrim="#0000" + app:layout_scrollFlags="scroll|exitUntilCollapsed" /> - - + app:popupTheme="@style/ThemeOverlay.AppCompat.Light" + app:titleTextColor="@color/white"/> + - + android:text="@string/save_button" + android:textColor="@color/white" + app:icon="@drawable/ic_save_black_24dp" + app:backgroundTint="@color/colorPrimary" + app:iconTint="@color/white"/> diff --git a/app/src/main/res/layout/drug_list.xml b/app/src/main/res/layout/drug_list.xml index d798d15..a831757 100644 --- a/app/src/main/res/layout/drug_list.xml +++ b/app/src/main/res/layout/drug_list.xml @@ -6,7 +6,7 @@ android:name="net.foucry.pilldroid.MedicamentListFragment" android:layout_width="match_parent" android:layout_height="match_parent" - app:layoutManager="LinearLayoutManager" android:background="@drawable/list_selector" + app:layoutManager="LinearLayoutManager" tools:context="net.foucry.pilldroid.DrugListActivity" tools:listitem="@layout/drug_list_content" /> diff --git a/app/src/main/res/layout/drug_list_activity.xml b/app/src/main/res/layout/drug_list_activity.xml index 0664590..44d60e1 100644 --- a/app/src/main/res/layout/drug_list_activity.xml +++ b/app/src/main/res/layout/drug_list_activity.xml @@ -13,11 +13,14 @@ android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> - + android:layout_height="?attr/actionBarSize" + android:background="@color/colorPrimary" + app:layout_collapseMode="pin" + app:popupTheme="@style/ThemeOverlay.AppCompat.Light" + app:titleTextColor="@color/white"/> @@ -25,31 +28,24 @@ android:id="@+id/frameLayout" android:layout_width="match_parent" android:layout_height="match_parent" - app:layout_behavior="@string/appbar_scrolling_view_behavior"> + android:layout_marginTop="?attr/actionBarSize"> + android:layout_width="match_parent" + android:layout_height="match_parent" /> + app:srcCompat="@drawable/ic_add" + app:backgroundTint="@color/colorPrimary" + app:tint="@color/white"/> diff --git a/app/src/main/res/layout/drug_list_content.xml b/app/src/main/res/layout/drug_list_content.xml index 93a2b46..8be99b8 100644 --- a/app/src/main/res/layout/drug_list_content.xml +++ b/app/src/main/res/layout/drug_list_content.xml @@ -1,38 +1,40 @@ - + - + android:layout_marginStart="5dp" + android:contentDescription="@string/stockIcon" + app:srcCompat="@drawable/ok_stock_vect" /> - + android:typeface="sans" /> - - + app:srcCompat="@drawable/ic_navigate_next_black_24dp" /> \ No newline at end of file diff --git a/app/src/main/res/layout/info_cell.xml b/app/src/main/res/layout/info_cell.xml index 0ed2e26..069f6ad 100644 --- a/app/src/main/res/layout/info_cell.xml +++ b/app/src/main/res/layout/info_cell.xml @@ -1,23 +1,23 @@ + android:background="@color/white" + android:orientation="vertical"> - - + \ No newline at end of file diff --git a/app/src/main/res/layout/input_dialog.xml b/app/src/main/res/layout/input_dialog.xml index 31cf8b7..4a1e5ec 100644 --- a/app/src/main/res/layout/input_dialog.xml +++ b/app/src/main/res/layout/input_dialog.xml @@ -1,46 +1,114 @@ - - + - + - - \ No newline at end of file + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/value_input.xml b/app/src/main/res/layout/value_input.xml index 7c850fe..7ef0f28 100644 --- a/app/src/main/res/layout/value_input.xml +++ b/app/src/main/res/layout/value_input.xml @@ -1,44 +1,49 @@ - + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:background="@color/white" + android:orientation="horizontal" + android:padding="10dp" + android:weightSum="1"> + + - + + \ No newline at end of file diff --git a/app/src/main/res/layout/value_input_threshold.xml b/app/src/main/res/layout/value_input_threshold.xml new file mode 100644 index 0000000..2941cd7 --- /dev/null +++ b/app/src/main/res/layout/value_input_threshold.xml @@ -0,0 +1,49 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/welcome1.xml b/app/src/main/res/layout/welcome1.xml index d50a532..e8eba62 100644 --- a/app/src/main/res/layout/welcome1.xml +++ b/app/src/main/res/layout/welcome1.xml @@ -1,21 +1,21 @@ + - - - - + app:srcCompat="@drawable/pilldroid_icon" /> - - - + - + app:srcCompat="@drawable/ic_suspended_pill" /> - - - + - + app:srcCompat="@drawable/ic_save_black_24dp" /> - - - + app:srcCompat="@drawable/pilldroid_icon" /> - - + android:textSize="@dimen/slide_desc" + android:autoLink="web"/> diff --git a/app/src/main/res/layout/welcome2.xml b/app/src/main/res/layout/welcome2.xml index 5bbb86c..9a07be7 100644 --- a/app/src/main/res/layout/welcome2.xml +++ b/app/src/main/res/layout/welcome2.xml @@ -1,19 +1,20 @@ - + - - - + - - + - + app:srcCompat="@drawable/ic_barcode" /> - - - + - + app:srcCompat="@drawable/ic_qr_code" /> - - + - - - - + app:srcCompat="@drawable/ok_stock_vect" /> - + - - - + app:srcCompat="@drawable/warning_stock_vect" /> - - + - + app:srcCompat="@drawable/lower_stock_vect" /> - - + - + app:srcCompat="@drawable/info" /> - - + - + app:srcCompat="@drawable/tunable" /> - - + android:orientation="horizontal"/> -