Compare commits

..

8 commits

Author SHA1 Message Date
jacques
32119baf52 Add PICK_DIRECTORY value 2024-09-14 15:23:56 +02:00
jacques
e42a2965f9 Try backup room framework (WIP) 2024-09-14 15:08:05 +02:00
jacques
1bda3a6a8f Upgrade to gradle 8.0.2 2024-09-14 15:08:05 +02:00
Jacques
76409f1977
[WIP] Add folder picker code 2024-09-14 10:14:29 +02:00
Jacques
c51904f5c4
Add some permissions for storage usage 2024-09-14 10:13:42 +02:00
Jacques
adb4e236b4
Add dependencies 2024-09-14 10:13:06 +02:00
Jacques
8a97311476
Add .zshistory 2024-09-14 10:11:40 +02:00
Jacques
1293c425e8
Change README.html 2024-09-14 10:10:58 +02:00
7 changed files with 117 additions and 53 deletions

2
.gitignore vendored
View file

@ -48,3 +48,5 @@ gen/
/android-signing-keystore.jks
/secrets.properties
*.hprof
.zhistory

80
README.html Normal file
View file

@ -0,0 +1,80 @@
<h1 id="pilldroid">Pilldroid</h1>
<blockquote>
<p>[!note] I apologize. For know, even string exist in English,
<em>Pilldroid</em> is a French only application. That because the global
drugs database contain only French drugs nommage. If you can find a way
to provide another country global database,feel free to <a
href="mailto://pilldroid@foucry,net?Subject=%22Another%20database%22">contact
me</a></p>
<p>Pilldroid est une application de gestion de stock
<strong>théorique</strong> de médicament à destination des personnes
résidant en France.</p>
</blockquote>
<p><a href="https://f-droid.org/packages/net.foucry.pilldroid">
<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png"
alt="Get it on F-Droid"
height="80"> </a></p>
<h2 id="quest-ce-que-pilldroid">Quest-ce que Pilldroid ?</h2>
<p>Pilldroid est une applicaton de gestion de stock <em>théorique</em>
de médicaments, pour téléphone Android©.</p>
<h2 id="pourquoi-stock-théorique">Pourquoi « Stock théorique » ?</h2>
<p>Pilldroid ne sait pas (et na aucun moyen de savoir) si vous avez ou
non pris vos médicaments. Pilldroid effectue, simple calcul :
<code>stock connu - prise par jour</code>. Ce calcul est fait tous les
jours entre 11h et midi.</p>
<h2
id="de-quelles-autorisations-lapplication-pilldroid-a-t-elle-besoin">De
quelles autorisations lapplication Pilldroid a-t-elle besoin ?</h2>
<ul>
<li>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.</li>
<li>Pilldroid a besoin daccéder à lappareil photo de votre téléphone
pour scanner le code-barres des boîtes de médicaments.</li>
<li>Pilldroid a besoin de pouvoir vous envoyer des notifications.</li>
<li>Pilldroid a besoin de faire vibrer le téléphone pour les
notifications.</li>
</ul>
<h2
id="lapplication-pilldroid-embarque-t-elle-des-bibliothèques-tierce">Lapplication
Pilldroid embarque-t-elle des bibliothèques tierce ?</h2>
<p>Oui. Pour la lecture de code-barres, Pilldroid utilise le projet <a
href="https://github.com/journeyapps/zxing-android-embedded">zxing</a>
lui-même libre et ouvert.</p>
<h2 id="lapplication-pilldroid-contient-elle-des-pisteurs">Lapplication
Pilldroid contient-elle des pisteurs ?</h2>
<p><a
href="https://reports.exodus-privacy.eu.org/fr/reports/net.foucry.pilldroid/latest/">NON
!</a></p>
<h2 id="doù-viennent-les-données-de-pilldroid">Doù viennent les données
de Pilldroid ?</h2>
<p>Elles sont issues de plusieurs fichiers de lAgence pour la Sécurité
des Médicaments, agrégés dans une base de données grâce à script Python
qui est disponible sur le dépôt <a
href="https://github.com/jfoucry/TransformMeds">TransformMeds</a>.</p>
<h2 id="ce-que-nest-pas-pilldroid">Ce que nest pas Pilldroid</h2>
<ul>
<li>Pilldroid nest pas un pilulier. Pilldroid ne vous rappellera pas de
prendre vos médicaments, cest <strong>VOTRE</strong>
responsabilité.</li>
<li>Pilldroid nest pas fiable, ce nest quune aide. Seul votre stock
réel est bon.</li>
</ul>
<h2 id="comment-peut-on-participer-à-pilldroid">Comment peut-on
participer à Pilldroid ?</h2>
<p>Mon code est de piètre qualité et mes connaissances Java maigrelettes
toute amélioration <strong>que je comprends</strong> sera la
bienvenue.</p>
<p>Marché de niche, Pilldroid a besoin de testeuses et testeurs.</p>
Et si vous ne pouvez-vous pas par ces moyens, vous pouvez maider à
payer mon électricité et mon accès internet :
<script src="https://liberapay.com/Pilldroid/widgets/button.js"></script>
<noscript>
<a href="https://liberapay.com/Pilldroid/donate"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a>
</noscript>
<h2 id="lapplication-pilldroid-dispose-telle-dun-site-web">Lapplication
Pilldroid dispose telle dun site web ?</h2>
<p>Oui, bien sûr : <a
href="https://pilldroid.foucry.net">Pilldroid</a></p>
<h2 id="contact">Contact</h2>
<p>Le site web en premier lieu et ladresse mail <a
href="mailto://pilldroid@foucry.net:Subject=%22Contact%22">pilldroid@foucry.net</a></p>

View file

@ -82,8 +82,10 @@ android {
namespace 'net.foucry.pilldroid'
allprojects {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
tasks.withType(JavaCompile).tap {
configureEach {
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}
}
}
}
@ -116,7 +118,9 @@ dependencies {
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.journeyapps:zxing-android-embedded:4.3.0'
implementation 'androidx.core:core:1.13.1'
implementation 'de.raphaelebner:roomdatabasebackup:1.0.1'
implementation 'de.raphaelebner:roomdatabasebackup:1.0.1' // a supprimer
implementation 'androidx.documentfile:documentfile:1.0.1'
//coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.0'
}

View file

@ -12,6 +12,8 @@
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY"/>
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application

View file

@ -98,6 +98,8 @@ public class DrugListActivity extends AppCompatActivity {
private RecyclerViewAdapter mAdapter;
private final int PICK_DIRECTORY = 9999;
@Override
public void onStart() {
super.onStart();
@ -322,7 +324,8 @@ public class DrugListActivity extends AppCompatActivity {
startActivity(new Intent(this, WelcomeActivity.class));
return true;
} else if (id == R.id.ImportExport) {
backupprefs();
//backupprefs();
choseDir();
}
return super.onOptionsItemSelected(item);
}
@ -331,6 +334,11 @@ public class DrugListActivity extends AppCompatActivity {
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
constructDrugsList();
if(requestCode == PICK_DIRECTORY && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
String path = (String) extras.get("chosenDir");
//println("Path ==" path);
}
}
public void onResume() {
@ -421,7 +429,7 @@ public class DrugListActivity extends AppCompatActivity {
private void askToAddInDB(Medicine aMedicine) {
final Dialog dlg = new Dialog(this);
dlg.requestWindowFeature(Window.FEATURE_NO_TITLE);
Objects.requireNonNull(dlg.getWindow()).setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
Objects.requireNonNull(dlg.getWindow()).setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dlg.setContentView(R.layout.custom_dialog_layout_one_button);
dlg.setCancelable(false);
TextView msg = dlg.findViewById(R.id.msg);
@ -722,12 +730,19 @@ public class DrugListActivity extends AppCompatActivity {
}
}
void choseDir() {
Intent result = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
String path = "";
result.putExtra("chosenDir", path);
setResult(RESULT_OK, result);
}
void backupprefs() {
Log.i(TAG, "backupprefs");
final Dialog dlg = new Dialog(this);
dlg.requestWindowFeature(Window.FEATURE_NO_TITLE);
Objects.requireNonNull(dlg.getWindow()).setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
Objects.requireNonNull(dlg.getWindow()).setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dlg.setContentView(R.layout.backupprefs);
dlg.setCancelable(false);
@ -793,13 +808,13 @@ public class DrugListActivity extends AppCompatActivity {
// startActivity(intent);
// });
Button btn_export = findViewById(R.id.switch_btn_export);
Button btn_export = dlg.findViewById(R.id.switch_btn_export);
assert btn_export != null;
Button btn_import = findViewById(R.id.switch_btn_import);
Button btn_import = dlg.findViewById(R.id.switch_btn_import);
assert btn_import != null;
Button btn_properties = findViewById(R.id.btn_properties);
Button btn_properties = dlg.findViewById(R.id.btn_properties);
assert btn_properties != null;
Button btn_backupLocation = findViewById(R.id.btn_backup_location);
Button btn_backupLocation = dlg.findViewById(R.id.btn_backup_location);
assert btn_backupLocation != null;
encryptBackup = sharedPreferences.getBoolean(spEncryptBackup, true);
@ -873,6 +888,7 @@ public class DrugListActivity extends AppCompatActivity {
Log.i(TAG, "ok button");
PrescriptionDatabase.getInstanceDatabase(this);
final RoomBackup roomBackup = new RoomBackup(DrugListActivity.this);
if (btn_export.isEnabled()) {
btn_export.setOnClickListener(v -> {
@ -910,43 +926,3 @@ public class DrugListActivity extends AppCompatActivity {
}
}
}
/*
final RoomBackup roomBackup = new RoomBackup(MainActivityJava.this);
*/
/*---------------------Backup and Restore Database--------------------------*//*
btn_backup.setOnClickListener(v -> {
roomBackup.backupLocation(storageLocation);
roomBackup.backupLocationCustomFile(new File(this.getFilesDir() + "/databasebackup/geilesBackup.sqlite3"));
roomBackup.database(FruitDatabase.Companion.getInstance(getApplicationContext()));
roomBackup.enableLogDebug(enableLog);
roomBackup.backupIsEncrypted(encryptBackup);
roomBackup.customEncryptPassword(MainActivity.SECRET_PASSWORD);
if (useMaxFileCount)
roomBackup.maxFileCount(5);
roomBackup.onCompleteListener((success, message, exitCode) -> {
Log.d(TAG, "oncomplete: " + success + ", message: " + message + ", exitCode: " + exitCode);
if (success)
roomBackup.restartApp(new Intent(getApplicationContext(), MainActivityJava.class));
});
roomBackup.backup();
});
btn_restore.setOnClickListener(v -> {
roomBackup.backupLocation(storageLocation);
roomBackup.backupLocationCustomFile(new File(this.getFilesDir() + "/databasebackup/geilesBackup.sqlite3"));
roomBackup.database(FruitDatabase.Companion.getInstance(getApplicationContext()));
roomBackup.enableLogDebug(enableLog);
roomBackup.backupIsEncrypted(encryptBackup);
roomBackup.customEncryptPassword(MainActivity.SECRET_PASSWORD);
roomBackup.onCompleteListener((success, message, exitCode) -> {
Log.d(TAG, "oncomplete: " + success + ", message: " + message + ", exitCode: " + exitCode);
if (success)
roomBackup.restartApp(new Intent(getApplicationContext(), MainActivityJava.class));
});
roomBackup.restore();
});*/

View file

@ -9,7 +9,7 @@ buildscript {
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:8.0.2'
classpath 'com.android.tools.build:gradle:8.6.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
@ -33,7 +33,7 @@ allprojects {
}
tasks.register('clean', Delete) {
delete rootProject.buildDir
delete rootProject
}
dependencies {}

View file

@ -1,6 +1,6 @@
#Fri Sep 22 18:17:05 CEST 2023
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists