From 4bd6c06c5051275a191eda40177c9cfda842328f Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Sun, 12 Jun 2016 18:46:19 +0200 Subject: [PATCH 01/30] =?UTF-8?q?D=C3=A9but=20ajout=20menu=20avec=20=C3=A0?= =?UTF-8?q?=20propos=20et=20aide?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/net/foucry/pilldroid/About.java | 43 +++++++++++++++++++ .../pilldroid/MedicamentListActivity.java | 22 ++++++++++ app/src/main/res/layout/about.xml | 16 +++++++ app/src/main/res/menu/about.xml | 7 +++ app/src/main/res/values/strings.xml | 2 + 5 files changed, 90 insertions(+) create mode 100644 app/src/main/java/net/foucry/pilldroid/About.java create mode 100644 app/src/main/res/layout/about.xml create mode 100644 app/src/main/res/menu/about.xml diff --git a/app/src/main/java/net/foucry/pilldroid/About.java b/app/src/main/java/net/foucry/pilldroid/About.java new file mode 100644 index 0000000..ccd5f05 --- /dev/null +++ b/app/src/main/java/net/foucry/pilldroid/About.java @@ -0,0 +1,43 @@ +package net.foucry.pilldroid; + +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.text.Html; +import android.widget.TextView; + +/** + * Created by jacques on 12/06/16. + */ +public class About extends AppCompatActivity{ + + private final String htmlText = "" + + "

À propos de " + R.string.app_name + "

" + + "" + + ""; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.about); + + TextView htmlTextView = (TextView)findViewById(R.id.aboutHtml); + htmlTextView.setText(Html.fromHtml(htmlText, new ImageGetter(), null)); + } + + private class ImageGetter implements Html.ImageGetter { + + public Drawable getDrawable(String source) { + int id; + if (source.equals("ic_launcher.png")) { + id = R.mipmap.ic_launcher; + } else { + return null; + } + + Drawable d = getResources().getDrawable(id); + d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); + return d; + } + } +} diff --git a/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java b/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java index 0ee95fc..3da720e 100644 --- a/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java +++ b/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java @@ -11,6 +11,9 @@ import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; @@ -147,6 +150,25 @@ public class MedicamentListActivity extends AppCompatActivity { } } + + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.about, menu); + return true; + } + + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.about: + startActivity(new Intent(this, About.class)); + return true; + case R.id.help: + //startActivity(new Intent(this, Help.class)); + return true; + } + return super.onOptionsItemSelected(item); + } + public void scanNow(View view) { Intent intent = new Intent("com.google.zxing.client.android.SCAN"); //intent.putExtra("SCAN_MODE", "CODE_128"); diff --git a/app/src/main/res/layout/about.xml b/app/src/main/res/layout/about.xml new file mode 100644 index 0000000..05ed450 --- /dev/null +++ b/app/src/main/res/layout/about.xml @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/about.xml b/app/src/main/res/menu/about.xml new file mode 100644 index 0000000..f25403c --- /dev/null +++ b/app/src/main/res/menu/about.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cb93174..d0c5ac7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -126,4 +126,6 @@ Google Book Search Requesting connection to network\u2026 Médicament introuvable dans la base de données + À propos + Aide From 9da83c3f337f02ebf17de1ed64d060c5cc54cf7d Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Tue, 14 Jun 2016 16:56:40 +0200 Subject: [PATCH 02/30] =?UTF-8?q?Correction=20erreur=20sur=20la=20copy/lec?= =?UTF-8?q?ture=20de=20la=20base=20de=20m=C3=A9dicaments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/net/foucry/pilldroid/DBMedoc.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/net/foucry/pilldroid/DBMedoc.java b/app/src/main/java/net/foucry/pilldroid/DBMedoc.java index e15488f..a446765 100644 --- a/app/src/main/java/net/foucry/pilldroid/DBMedoc.java +++ b/app/src/main/java/net/foucry/pilldroid/DBMedoc.java @@ -47,14 +47,13 @@ public class DBMedoc extends SQLiteOpenHelper{ } public void createDatabase() throws IOException { - Log.e(MedicamentListActivity.Constants.TAG, "createDatabase called"); boolean dbExist = checkDatabase(); if (dbExist) { - // Nothing to do, DB already exist + Log.v("DB Exists", "db exists"); } else { - this.getDatabaseName(); + this.getReadableDatabase(); try { copyDatabase(); } catch (IOException e) { From 2c5025985e419d863b1c8285a59b03186548b72c Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Tue, 14 Jun 2016 23:36:07 +0200 Subject: [PATCH 03/30] Ajout de About dqans le Manufest --- app/src/main/AndroidManifest.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2580491..35525ae 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -43,6 +43,11 @@ + + \ No newline at end of file From 70db53306046792b74ce36b350d876383ff59dea Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Tue, 14 Jun 2016 23:41:05 +0200 Subject: [PATCH 04/30] About avec HTML (mais sans image) --- .../main/java/net/foucry/pilldroid/About.java | 10 +++++++--- app/src/main/res/layout/about.xml | 8 +------- app/src/main/res/values/strings.xml | 20 +++++++++++++++++++ 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/net/foucry/pilldroid/About.java b/app/src/main/java/net/foucry/pilldroid/About.java index ccd5f05..6a68da4 100644 --- a/app/src/main/java/net/foucry/pilldroid/About.java +++ b/app/src/main/java/net/foucry/pilldroid/About.java @@ -4,7 +4,8 @@ import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.Html; -import android.widget.TextView; +import android.text.Spanned; +import android.webkit.WebView; /** * Created by jacques on 12/06/16. @@ -21,8 +22,11 @@ public class About extends AppCompatActivity{ super.onCreate(savedInstanceState); setContentView(R.layout.about); - TextView htmlTextView = (TextView)findViewById(R.id.aboutHtml); - htmlTextView.setText(Html.fromHtml(htmlText, new ImageGetter(), null)); + String htmlAsString = getString(R.string.html); + Spanned htmlAsSpanned = Html.fromHtml(htmlAsString); + + WebView webView = (WebView) findViewById(R.id.aboutHtml); + webView.loadDataWithBaseURL(null, htmlAsString, "text/html", "utf-8", null); } private class ImageGetter implements Html.ImageGetter { diff --git a/app/src/main/res/layout/about.xml b/app/src/main/res/layout/about.xml index 05ed450..234323c 100644 --- a/app/src/main/res/layout/about.xml +++ b/app/src/main/res/layout/about.xml @@ -3,13 +3,7 @@ android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> - - - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d0c5ac7..9ee4201 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -128,4 +128,24 @@ Médicament introuvable dans la base de données À propos Aide + + À propos de PillDroid +

Gestion de stock de médicaments

+

This is some html. Look, here\'s an underline.

+

Look, this is emphasized. And here\'s some bold.

+

This is a UL list: +

    +
  • One
  • +
  • Two
  • +
  • Three
  • +
+

This is an OL list: +

    +
  1. One
  2. +
  3. Two
  4. +
  5. Three
  6. +
+ ]]> +
From 1efe5fd245ead0e27664a10e79ca1ad6eddc07fb Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Sun, 19 Jun 2016 00:57:40 +0200 Subject: [PATCH 05/30] =?UTF-8?q?Nouvelle=20fa=C3=A7on=20de=20lire=20et=20?= =?UTF-8?q?afficher=20about?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/about.html | 17 +++++++ .../main/java/net/foucry/pilldroid/About.java | 44 +++++++++++++++---- app/src/main/res/layout/about.xml | 2 +- app/src/main/res/values/strings.xml | 20 --------- 4 files changed, 54 insertions(+), 29 deletions(-) create mode 100644 app/src/main/assets/about.html diff --git a/app/src/main/assets/about.html b/app/src/main/assets/about.html new file mode 100644 index 0000000..757779c --- /dev/null +++ b/app/src/main/assets/about.html @@ -0,0 +1,17 @@ +

À propos de PillDroid

+

Gestion de stock de médicaments

+

This is some html. Look, here\'s an underline.

+

Look, this is emphasized. And here\'s some bold.

+

This is a UL list: +

    +
  • One
  • +
  • Two
  • +
  • Three
  • +
+

This is an OL list: +

    +
  1. One
  2. +
  3. Two
  4. +
  5. Three
  6. +
+ \ No newline at end of file diff --git a/app/src/main/java/net/foucry/pilldroid/About.java b/app/src/main/java/net/foucry/pilldroid/About.java index 6a68da4..45b0987 100644 --- a/app/src/main/java/net/foucry/pilldroid/About.java +++ b/app/src/main/java/net/foucry/pilldroid/About.java @@ -2,31 +2,58 @@ package net.foucry.pilldroid; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.support.v4.content.res.ResourcesCompat; import android.support.v7.app.AppCompatActivity; import android.text.Html; import android.text.Spanned; +import android.util.Log; import android.webkit.WebView; +import android.widget.TextView; + +import java.io.IOException; +import java.io.InputStream; /** * Created by jacques on 12/06/16. */ public class About extends AppCompatActivity{ - private final String htmlText = "" + - "

À propos de " + R.string.app_name + "

" + - "" + - ""; + private WebView aboutView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.about); - String htmlAsString = getString(R.string.html); - Spanned htmlAsSpanned = Html.fromHtml(htmlAsString); + String htmlString = null; - WebView webView = (WebView) findViewById(R.id.aboutHtml); - webView.loadDataWithBaseURL(null, htmlAsString, "text/html", "utf-8", null); +/* aboutView = (WebView) findViewById(R.id.aboutHtml); + + aboutView.loadUrl("file:///android_asset/about.html"); + aboutView.clearCache(true); + aboutView.clearHistory(); + aboutView.getSettings().setJavaScriptEnabled(true); + aboutView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);*/ + + try { + InputStream is = getAssets().open("about.html"); + int size = is.available(); + + byte[] buffer = new byte[size]; + + is.read(buffer); + is.close(); + + htmlString = new String(buffer); + + } catch (IOException e) { + throw new RuntimeException(e); + } + + TextView htmlTextView = (TextView)findViewById(R.id.aboutHtml); + htmlTextView.setText(Html.fromHtml(htmlString, new ImageGetter(), null)); + + Log.i("PillDroid", htmlTextView.getText().toString()); } private class ImageGetter implements Html.ImageGetter { @@ -40,6 +67,7 @@ public class About extends AppCompatActivity{ } Drawable d = getResources().getDrawable(id); +// Drawable d = ResourcesCompat.getDrawable(getResources(),id, null); d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); return d; } diff --git a/app/src/main/res/layout/about.xml b/app/src/main/res/layout/about.xml index 234323c..54a2cca 100644 --- a/app/src/main/res/layout/about.xml +++ b/app/src/main/res/layout/about.xml @@ -3,7 +3,7 @@ android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9ee4201..d0c5ac7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -128,24 +128,4 @@ Médicament introuvable dans la base de données À propos Aide - - À propos de PillDroid -

Gestion de stock de médicaments

-

This is some html. Look, here\'s an underline.

-

Look, this is emphasized. And here\'s some bold.

-

This is a UL list: -

    -
  • One
  • -
  • Two
  • -
  • Three
  • -
-

This is an OL list: -

    -
  1. One
  2. -
  3. Two
  4. -
  5. Three
  6. -
- ]]> -
From fe3a1fef56f4d9c195e96300111d4f14aba2f7d0 Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Sun, 19 Jun 2016 01:46:37 +0200 Subject: [PATCH 06/30] Utilisation du html de PilStock --- app/src/main/assets/about.html | 49 ++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/app/src/main/assets/about.html b/app/src/main/assets/about.html index 757779c..a15b457 100644 --- a/app/src/main/assets/about.html +++ b/app/src/main/assets/about.html @@ -1,17 +1,32 @@ -

À propos de PillDroid

-

Gestion de stock de médicaments

-

This is some html. Look, here\'s an underline.

-

Look, this is emphasized. And here\'s some bold.

-

This is a UL list: -

    -
  • One
  • -
  • Two
  • -
  • Three
  • -
-

This is an OL list: -

    -
  1. One
  2. -
  3. Two
  4. -
  5. Three
  6. -
- \ No newline at end of file + + + + + + +
+ +
PilStock © 2016 Jacques Foucry
+

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

+

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

+

EN CAS DE DOUTE, CONSULTEZ VOTRE MÉDECIN OU VOTRE PHARMACIEN.

+

PilStock ne vous rappelle pas de prendre vos médicaments.

+

LA RESPONSABILITÉ DE L'AUTEUR NE SAURAIT ÊTRE ENGAGÉE EN CAS DE SURDOSAGE OU D'OUBLI DE PRISE.

+
+

PilStock n'aurait pas pu voir le jour sans les conseils avisés de Frank, Benoit, Dominique & Aurélien.

+

Stéphane en grand chamboulateur d'interface en fait quelque chose d'utilisable

+
+

Le soutien actif et les conseils du Dr Kauffmann me permettent de faire évoluer PilStock

+

Vous pouvez me contacter à l'adresse suivante : pilstock@pilstock-app.com

+ + From 3a0e0e1301721c5e85215ac919790ba0dceb8f22 Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Sun, 19 Jun 2016 01:47:30 +0200 Subject: [PATCH 07/30] Code de chargement et affichage de la page About --- .../main/java/net/foucry/pilldroid/About.java | 31 +++---------------- 1 file changed, 4 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/net/foucry/pilldroid/About.java b/app/src/main/java/net/foucry/pilldroid/About.java index 45b0987..ced9973 100644 --- a/app/src/main/java/net/foucry/pilldroid/About.java +++ b/app/src/main/java/net/foucry/pilldroid/About.java @@ -1,17 +1,11 @@ package net.foucry.pilldroid; +import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Bundle; -import android.support.v4.content.res.ResourcesCompat; import android.support.v7.app.AppCompatActivity; import android.text.Html; -import android.text.Spanned; -import android.util.Log; import android.webkit.WebView; -import android.widget.TextView; - -import java.io.IOException; -import java.io.InputStream; /** * Created by jacques on 12/06/16. @@ -27,33 +21,16 @@ public class About extends AppCompatActivity{ String htmlString = null; -/* aboutView = (WebView) findViewById(R.id.aboutHtml); + aboutView = (WebView) findViewById(R.id.aboutHtml); aboutView.loadUrl("file:///android_asset/about.html"); aboutView.clearCache(true); aboutView.clearHistory(); aboutView.getSettings().setJavaScriptEnabled(true); - aboutView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);*/ + aboutView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); + aboutView.setBackgroundColor(Color.WHITE); - try { - InputStream is = getAssets().open("about.html"); - int size = is.available(); - byte[] buffer = new byte[size]; - - is.read(buffer); - is.close(); - - htmlString = new String(buffer); - - } catch (IOException e) { - throw new RuntimeException(e); - } - - TextView htmlTextView = (TextView)findViewById(R.id.aboutHtml); - htmlTextView.setText(Html.fromHtml(htmlString, new ImageGetter(), null)); - - Log.i("PillDroid", htmlTextView.getText().toString()); } private class ImageGetter implements Html.ImageGetter { From ee19aad0cfbf8c3013ac891284e1f172137eb111 Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Sun, 19 Jun 2016 01:48:04 +0200 Subject: [PATCH 08/30] Ajout de la couleur de fond --- app/src/main/res/layout/about.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layout/about.xml b/app/src/main/res/layout/about.xml index 54a2cca..1dd71d4 100644 --- a/app/src/main/res/layout/about.xml +++ b/app/src/main/res/layout/about.xml @@ -1,9 +1,10 @@ + android:layout_height="match_parent" + android:background="@android:color/white"> - From c3b87c15344aa796066e812c38b19c790a05f79c Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Sun, 19 Jun 2016 01:48:41 +0200 Subject: [PATCH 09/30] Ajout de la barre de navigation pour le retour de About --- app/src/main/AndroidManifest.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 35525ae..79a7284 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,9 +44,9 @@ + android:theme="@style/AppTheme"> From 451b80f64b458a818bf6781221145c50089c8907 Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Sun, 19 Jun 2016 18:41:46 +0200 Subject: [PATCH 10/30] =?UTF-8?q?Ajout=20message=20dialogue=20ajout=20de?= =?UTF-8?q?=20m=C3=A9dicament?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d0c5ac7..f38692b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -126,6 +126,7 @@ Google Book Search Requesting connection to network\u2026 Médicament introuvable dans la base de données + trouvé dans la base de données À propos Aide From d394f938213a94b6ddfb2d23804997ff2ee9fad1 Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Sun, 19 Jun 2016 18:42:27 +0200 Subject: [PATCH 11/30] =?UTF-8?q?Demande=20ajout=20du=20m=C3=A9dicament=20?= =?UTF-8?q?apr=C3=A8es=20scan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pilldroid/MedicamentListActivity.java | 56 ++++++++++--------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java b/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java index 3da720e..8668f4a 100644 --- a/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java +++ b/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java @@ -59,6 +59,8 @@ public class MedicamentListActivity extends AppCompatActivity { private SimpleCursorAdapter drugAdapter; private List medicaments; + private View mRecyclerView; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -74,20 +76,6 @@ public class MedicamentListActivity extends AppCompatActivity { toolbar.setTitle(getTitle()); } - /*FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); - fab.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - *//* Snackbar.make(view, "Will be used to add a drug to the list", Snackbar.LENGTH_LONG) - .setAction("Action", null).show(); *//* - Intent intent = new Intent("com.google.zxing.client.android.SCAN"); - intent.putExtra("SCAN_MODE", "CODE_128"); - //intent.putExtra("SCAN_FORMATS", "EAN_13,DATA_MATRIX"); - startActivityForResult(intent, 0); - } - });*/ - - if (DEMO) { if (dbHelper.getCount() == 0) { @@ -137,9 +125,10 @@ public class MedicamentListActivity extends AppCompatActivity { } }); } - View recyclerView = findViewById(R.id.medicament_list); - assert recyclerView != null; - setupRecyclerView((RecyclerView) recyclerView); + + mRecyclerView = findViewById(R.id.medicament_list); + assert mRecyclerView != null; + setupRecyclerView((RecyclerView) mRecyclerView); if (findViewById(R.id.medicament_detail_container) != null) { // The detail container view will be present only in the @@ -186,24 +175,39 @@ public class MedicamentListActivity extends AppCompatActivity { Log.i(Constants.TAG, "Format:" + format); Log.i(Constants.TAG, "Content:" + contents); + AlertDialog.Builder dlg = new AlertDialog.Builder(this); + dlg.setTitle(context.getString(R.string.app_name)); + // Handle successful scan if (format.equals("CODE_128")) { //CODE_128 cip13 = contents; - } else - { - cip13 = contents.substring(4,17); + } else { + cip13 = contents.substring(4, 17); } dbMedoc.openDatabase(); - Medicament scannedMedoc = dbMedoc.getMedocByCIP13(cip13); + final Medicament scannedMedoc = dbMedoc.getMedocByCIP13(cip13); dbMedoc.close(); if (scannedMedoc != null) { - Toast.makeText(context, "Medicament found in database", Toast.LENGTH_LONG).show(); - } else - { - AlertDialog.Builder dlg = new AlertDialog.Builder(this); - dlg.setTitle(context.getString(R.string.app_name)); + String msg = scannedMedoc.getNom() + " " + getString(R.string.msgFound); + + dlg.setMessage(msg); + dlg.setNegativeButton(context.getString(R.string.button_cancel), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Nothing to do in case of cancel + } + }); + dlg.setPositiveButton(context.getString(R.string.button_ok), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Add Medicament to DB then try to show it + dbHelper.addDrug(scannedMedoc); + } + }); + dlg.show(); + } else { dlg.setMessage(context.getString(R.string.msgNotFound)); dlg.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override From 1db5b70667e114c6b6133117d566caa7e1ee6799 Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Sun, 19 Jun 2016 18:42:57 +0200 Subject: [PATCH 12/30] =?UTF-8?q?Mise=20=C3=A0=20jour=20du=20graddle=20app?= =?UTF-8?q?/build.gradle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/app/build.gradle b/app/build.gradle index c258254..156466e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -33,4 +33,5 @@ dependencies { compile 'com.android.support:support-v4:23.3.0' compile 'com.android.support:recyclerview-v7:23.3.0' compile 'com.android.support:design:23.3.0' + compile 'com.google.android.gms:play-services-appindexing:8.1.0' } From 4b6ec80c52237e3f62dc03328c483efd1da48801 Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Mon, 20 Jun 2016 23:03:24 +0200 Subject: [PATCH 13/30] =?UTF-8?q?Notification=20d'ajout=20d'un=20m=C3=A9di?= =?UTF-8?q?cament=20=C3=A0=20la=20liste?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../foucry/pilldroid/MedicamentListActivity.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java b/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java index 8668f4a..37e3637 100644 --- a/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java +++ b/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java @@ -60,6 +60,7 @@ public class MedicamentListActivity extends AppCompatActivity { private List medicaments; private View mRecyclerView; + private SimpleItemRecyclerViewAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { @@ -203,7 +204,9 @@ public class MedicamentListActivity extends AppCompatActivity { @Override public void onClick(DialogInterface dialog, int which) { // Add Medicament to DB then try to show it + scannedMedoc.setDateEndOfStock(); dbHelper.addDrug(scannedMedoc); + mAdapter.addItem(medicaments.size()-1,scannedMedoc); } }); dlg.show(); @@ -226,9 +229,13 @@ public class MedicamentListActivity extends AppCompatActivity { private void setupRecyclerView(@NonNull RecyclerView recyclerView) { recyclerView.addItemDecoration(new SimpleDividerItemDecoration(getApplicationContext())); - recyclerView.setAdapter(new SimpleItemRecyclerViewAdapter(medicaments)); + mAdapter = (SimpleItemRecyclerViewAdapter) new SimpleItemRecyclerViewAdapter(medicaments); + recyclerView.setAdapter(mAdapter); } + /** + * SimpleItemRecyclerViewAdapter + */ public class SimpleItemRecyclerViewAdapter extends RecyclerView.Adapter { @@ -238,6 +245,12 @@ public class MedicamentListActivity extends AppCompatActivity { mValues = items; } + public void addItem(int position, Medicament scannedMedoc) { + mValues.add(scannedMedoc); + notifyDataSetChanged(); + dbHelper.addDrug(scannedMedoc); + } + @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) From 4d99698930c6ed51a3d3dc3c87b3fb19f22fc278 Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Thu, 23 Jun 2016 06:01:38 +0200 Subject: [PATCH 14/30] =?UTF-8?q?Ajout=20du=20d=C3=A9but=20des=20notificat?= =?UTF-8?q?ions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pilldroid/MedicamentListActivity.java | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java b/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java index 37e3637..166bb0f 100644 --- a/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java +++ b/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java @@ -1,8 +1,12 @@ package net.foucry.pilldroid; +import android.app.AlarmManager; +import android.app.PendingIntent; +import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.content.IntentFilter; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v7.app.AlertDialog; @@ -62,11 +66,20 @@ public class MedicamentListActivity extends AppCompatActivity { private View mRecyclerView; private SimpleItemRecyclerViewAdapter mAdapter; + // For the notifications + PendingIntent pendingIntent; + AlarmManager alarmManager; + BroadcastReceiver mReceiver; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_medicament_list); + // Register for alarm + + RegisterAlarmBroadcast(); + dbHelper = new DBHelper(this); dbMedoc = new DBMedoc(this); @@ -158,7 +171,19 @@ public class MedicamentListActivity extends AppCompatActivity { } return super.onOptionsItemSelected(item); } - + + + public void onPause() { + super.onPause(); + + alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10000, pendingIntent); + } + + protected void onDestroy() { + unregisterReceiver(mReceiver); + super.onDestroy(); + } + public void scanNow(View view) { Intent intent = new Intent("com.google.zxing.client.android.SCAN"); //intent.putExtra("SCAN_MODE", "CODE_128"); @@ -233,6 +258,23 @@ public class MedicamentListActivity extends AppCompatActivity { recyclerView.setAdapter(mAdapter); } + // Received Alarm, display a toast + private void RegisterAlarmBroadcast() { + mReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + Toast.makeText(context, "Vous devez passer à la pharmacie", Toast.LENGTH_LONG).show(); + } + }; + registerReceiver(mReceiver, new IntentFilter("net.foucry.pilldroid")); + pendingIntent = PendingIntent.getBroadcast(this, 0, new Intent("net.foucry.pilldroid"),0); + alarmManager = (AlarmManager)(this.getSystemService(Context.ALARM_SERVICE)); + } + + private void UnregisterAlarmBroadcast(){ + alarmManager.cancel(pendingIntent); + getBaseContext().unregisterReceiver(mReceiver); + } /** * SimpleItemRecyclerViewAdapter */ From 06cd7a443d3c90804f130a8a1bb5bd04c460ecd0 Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Thu, 23 Jun 2016 17:11:57 +0200 Subject: [PATCH 15/30] Ajout utilisation du vibreur dans la notification --- app/src/main/AndroidManifest.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 79a7284..5c26f84 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,6 +3,7 @@ package="net.foucry.pilldroid"> + + \ No newline at end of file From 9f7e7045e1e002bdc9e0c5e63bf3ac6cb93acd50 Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Thu, 23 Jun 2016 17:12:25 +0200 Subject: [PATCH 16/30] Nouvelle technique pour l'alarme avec notification --- .../pilldroid/MedicamentListActivity.java | 33 +++++++++++++++---- .../pilldroid/NotificationPublisher.java | 28 ++++++++++++++++ 2 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/net/foucry/pilldroid/NotificationPublisher.java diff --git a/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java b/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java index 166bb0f..2f481ed 100644 --- a/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java +++ b/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java @@ -1,6 +1,7 @@ package net.foucry.pilldroid; import android.app.AlarmManager; +import android.app.Notification; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; @@ -8,6 +9,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; +import android.os.SystemClock; import android.support.annotation.NonNull; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; @@ -78,7 +80,7 @@ public class MedicamentListActivity extends AppCompatActivity { // Register for alarm - RegisterAlarmBroadcast(); +// RegisterAlarmBroadcast(); dbHelper = new DBHelper(this); dbMedoc = new DBMedoc(this); @@ -176,13 +178,14 @@ public class MedicamentListActivity extends AppCompatActivity { public void onPause() { super.onPause(); - alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10000, pendingIntent); +// alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10000, pendingIntent); + scheduleNotification(getNotification("10 second delay"), 10000); } - protected void onDestroy() { +/* protected void onDestroy() { unregisterReceiver(mReceiver); super.onDestroy(); - } + }*/ public void scanNow(View view) { Intent intent = new Intent("com.google.zxing.client.android.SCAN"); @@ -258,8 +261,26 @@ public class MedicamentListActivity extends AppCompatActivity { recyclerView.setAdapter(mAdapter); } + private void scheduleNotification(Notification notification, int delay) { + Intent notificationIntent = new Intent(this, NotificationPublisher.class); + notificationIntent.putExtra(NotificationPublisher.NOTIFICATION_ID,1); + notificationIntent.putExtra(NotificationPublisher.NOTIFICATION, notification); + PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); + + long futureInMillis = SystemClock.elapsedRealtime() + delay; + AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); + alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, futureInMillis, pendingIntent); + } + + private Notification getNotification(String content) { + Notification.Builder builder = new Notification.Builder(this); + builder.setContentTitle("Scheduled Notification"); + builder.setContentText(content); + builder.setSmallIcon(R.mipmap.ic_launcher); + return builder.build(); + } // Received Alarm, display a toast - private void RegisterAlarmBroadcast() { +/* private void RegisterAlarmBroadcast() { mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -274,7 +295,7 @@ public class MedicamentListActivity extends AppCompatActivity { private void UnregisterAlarmBroadcast(){ alarmManager.cancel(pendingIntent); getBaseContext().unregisterReceiver(mReceiver); - } + }*/ /** * SimpleItemRecyclerViewAdapter */ diff --git a/app/src/main/java/net/foucry/pilldroid/NotificationPublisher.java b/app/src/main/java/net/foucry/pilldroid/NotificationPublisher.java new file mode 100644 index 0000000..a908fb0 --- /dev/null +++ b/app/src/main/java/net/foucry/pilldroid/NotificationPublisher.java @@ -0,0 +1,28 @@ +package net.foucry.pilldroid; + +import android.app.Notification; +import android.app.NotificationManager; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.os.Vibrator; + +/** + * Created by jfoucry on 6/23/16. + */ +public class NotificationPublisher extends BroadcastReceiver { + + public static String NOTIFICATION_ID = "notification-id"; + public static String NOTIFICATION = "notification"; + + public void onReceive(Context context, Intent intent) { + NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + + Notification notification = intent.getParcelableExtra(NOTIFICATION); + int id = intent.getIntExtra(NOTIFICATION_ID,0); + notificationManager.notify(id, notification); + Vibrator vibrator = (Vibrator) context.getSystemService(context.VIBRATOR_SERVICE); + vibrator.vibrate(400); + + } +} From 837a87f80b3845f57eaa1c9e5235e88ee5b525a3 Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Mon, 25 Jul 2016 22:44:32 +0200 Subject: [PATCH 17/30] =?UTF-8?q?Agrandissement=20de=20la=20taille=20de=20?= =?UTF-8?q?la=20cellule=20et=20r=C3=A9ordonnancement=20des=20=C3=A9l=C3=A9?= =?UTF-8?q?ments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../res/layout/medicament_list_content.xml | 95 ++++++++++--------- 1 file changed, 50 insertions(+), 45 deletions(-) diff --git a/app/src/main/res/layout/medicament_list_content.xml b/app/src/main/res/layout/medicament_list_content.xml index 0f038f7..f5be3b6 100644 --- a/app/src/main/res/layout/medicament_list_content.xml +++ b/app/src/main/res/layout/medicament_list_content.xml @@ -1,63 +1,67 @@ - + + - - - + android:src="@drawable/stock_ok" + android:contentDescription="Icone de stock" + android:layout_centerVertical="true" + android:layout_alignParentStart="true" /> + + + + + + + - - + \ No newline at end of file From ca8be0daefe23a483e66b7b865d13e1517b7560e Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Tue, 26 Jul 2016 22:56:23 +0200 Subject: [PATCH 18/30] =?UTF-8?q?Changement=20des=20d=C3=A9grad=C3=A9s=20d?= =?UTF-8?q?es=20cellules?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/drawable/gradient_bg_alert.xml | 5 ++--- app/src/main/res/drawable/gradient_bg_ok.xml | 7 +++---- app/src/main/res/drawable/gradient_bg_warning.xml | 7 +++---- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/app/src/main/res/drawable/gradient_bg_alert.xml b/app/src/main/res/drawable/gradient_bg_alert.xml index 7d58d72..6bce62a 100644 --- a/app/src/main/res/drawable/gradient_bg_alert.xml +++ b/app/src/main/res/drawable/gradient_bg_alert.xml @@ -2,8 +2,7 @@ \ No newline at end of file diff --git a/app/src/main/res/drawable/gradient_bg_ok.xml b/app/src/main/res/drawable/gradient_bg_ok.xml index e2ea5eb..7155d22 100644 --- a/app/src/main/res/drawable/gradient_bg_ok.xml +++ b/app/src/main/res/drawable/gradient_bg_ok.xml @@ -2,8 +2,7 @@ + android:startColor="#FF048F01" + android:endColor="#FF5CB65A" + android:angle="90" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/gradient_bg_warning.xml b/app/src/main/res/drawable/gradient_bg_warning.xml index 59190ce..e07f789 100644 --- a/app/src/main/res/drawable/gradient_bg_warning.xml +++ b/app/src/main/res/drawable/gradient_bg_warning.xml @@ -2,8 +2,7 @@ + android:startColor="#FFF8A253" + android:endColor="#FFF7C01E" + android:angle="90" /> \ No newline at end of file From 6b2ab5fdeb139d4155bf19f26279e76b96b2ec70 Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Mon, 8 Aug 2016 23:02:51 +0200 Subject: [PATCH 19/30] Changement d'icone --- app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 2294 -> 4543 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 1329 -> 2695 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 3136 -> 6681 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 5562 -> 10941 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 8074 -> 16148 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index 7a892ff1072b660f0da436e0da4ad947d671f0b2..88aebca6c2ae3075ff9149e16e4c11b3fede190f 100644 GIT binary patch literal 4543 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 delta 2283 zcmV?=FxunUlYt%CJoC_Oyk%eGU&lgk- zxyar$(N51YFWCRSz^{GNyX|L?g+9Dm{vhd8`=1Z;r+bTy)< zYw%`}8eary@O7XXSpzZX|DDc(&V|m2&dmul7&3h$W|NB^3DiJO0zMXcIyX8;I@dnK zA%FP=a*=W$1aoJU)4BEu5~Vsw;B-Q=Wl}GlV=pTVrl51~m6NEveAGD(okZvE7!Wc1 zAcVt$&fOs(x_=A~RzP&_jsej=XRrbyb9V@cHC27MXh=#cR;)UM)FlV-_eFb<9RE3D z*Od-TNM!CV10+yBk|hs63`9o*k3D9~ zoJSu8!oq+xYizJS`Upr!03Lb>9VDZ^p0*q@>#zDYAgNr3YX6A<>C0&uv7oPoF>Dwx zZXB>;1+Z@)uxl5va3SFD56cKY?3Hdtgu>{XfHERCbp_H>kn+M*QicizaPT1T`s+Yw zC~)t+sDBwf0h?p@BiP&gTez1-3M)3l;%D_B-%(PuCJ-A`|XHrW`3!0mo+2`oj&XpPP z@`tV728g7$x)t-+UqShp-@6vj$dNFfIDgRzM;H`}$z)=XXi#W8sI0;!#O-MJB0woE z2vXK#&MQSYK4qTE0GY`)q&qmmpk+q0h?bquPjwACWMntH#!t=xB0s4V3xXB3kR)9~ zRAK@C8uu0|$4qptv`9astE+Pehz|;e0_x(YY8Uv)`3$m>3~E5AtPD{}XE0xui+?!o zE9{;38jPd-?+TFV(@%R1=T1NIWk*Y}(@&*F{5h?)pU#8SZ3s#>Aw*G)CuA4#2U!6Y zDF`H0HdZEmiKCLGXd61L_t`UT8gz|~eFoH>pJ-MI{dDwu(m!o)_w<1o6*b8sl>sy4 zH}C{UAaSP&q+^In*5YY(He@gF!+#IIi|CzuNY8V(aPIVzuq_bwPkXY=h}_cQ$s<>L zsZmIZn*`D&%;L^sf#L*WRXK=PYq4~L7H__=9oHV5{C_)W!=+0u0o0wJsL**oRou|y zFBw)(9@_JejHKLtK^RwxD6RX3S<#dE*a;QJ!#q+n$oLgiNx!Ck;??uhH198(WNVsxD$oR6$V`cZ0UEGQ_5{Wz4DJdWaXEm z(F1^rD-8V&=+3fhv9$!sTDIEJ2D2wWsdt@5;l&$n1yuO6(OUrhx+MrqF%wXF);meK zD~Oc+L^|>By7kk}%zq-3SJt=%(7*Cc-Udjx+S&c2q<*@=+5#zej`)e}>qyxxNzUo? z)AG%^*#GYm+;Xv>QVv+X6i^pGH8DSh56?tA8guX;%c_7MNK#PLEO~ zTp1#{^L9UxZHv7v;QjR0$Au`pdaKWHc7J8|TK&dx9LlBY)HF+m$qMqG^L8Q z6*M#1HGKzA&wdK~m7ntLptQtM*(~Ccvk{}n#T;2a+XvEo|fm@BnqUZE3jO zKau?%1r;sNBc+#%B`PiARNo?2`7IW3Ihd7n8ey`_?0+{gG#eRk-viXmw#D8*&5&2I zjc_FQ6DvLHs0H$4SSZ&bTBgOU#5{y2o=33!CdopR4Ycn9>IqZ>J29X~EA$LXDm#an zvNM=TvL`a}EF?)K1kf+6dmki#x&vjhIf^u!G^-?B1&LCG%B~=UI!LKw-{<2c=D<;G zGiCHRVd=pT2u-a_EShU&UbcldF^5zBcb|~?NI_GYv6K}~BZ|ZgK zre5*3aPh$c&OKN_d^Cmla1&QN+(djljyS|24sm$H_#eI8q;@b-x*7lg002ovPDHLk FV1i^BWO)Dp diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png index 8ad3ae5a73f35561ea8fb3117017d374111ac539..1ed05b82f61df67adce0da524d02ab32d7ddd7d7 100644 GIT binary patch delta 2687 zcmV-_3V`*o3WpVtBYz4`Nkll)NS&S2DKVHDlqE7Sn ze?8qp59a`5r0Uf))BV5yef_@g{jdKX6O%#y0RWHKP-15IX@9`=x@&Q)$(#BklMf+g z+QT_>ViSp3GKRVQB(lj$b4c1bnK{nH01vm!Bq7UM0RCjY2GjJZu zZ#>R_0vk3SZhtMZ3vAE@#g{7EXGj&4A%@qoowg zBAX4I1VUL$6|c0PO6ZSu9*aPNlb&be9No=5=-_ioLF^jYqR~w*QE2)bbdN@Su|RN+ zY#AjUGzjj%q+6POj$2r|(08rfXu)$Rh`#aIF-Q%kGk@C-3>XBr8XQZ1nK(;Q3z74q zr~)e&s`33P&@k>@$eA=3LS1)*onM_%fiN1OYy(sff4%ht34zxy5M1$`&U(53^NshR z=mUF-a&x07FE7vp1%W0e1}GmNpr%d*+4yO&;mgy;&IT=Z1o2aP<3SDxo*@9}8lPQE z`8fO6K!3@&4=HNI2#Ojt3aBANfEqd!s4-)Jnm->jJ9h%LZXHk-7I4$j1(tnt%cvmu z{wm5LPzh;yDnD*)eb#w-!^>GHrd^)|gT};!qR6Rk4S}p!0h(RAfLgKyUYL)DM2B_Y z>{VhkI$4u7V?nrD^RT3HZm;VEm-pYEYRyIm#ed_hUiBC}YdjuMlO_S>>kFF5NT8gY zKxu9P+XazCAGJmRq80Y$g!(%qv>}~i?LwWqB`?=wowxU`p)@>Rd!GPULu%RCfhIg0 zD1U#TEG?mAycN+$(x9soQpq+z0oQL=3cIBei->%_wf=B(5e~E$S8FsTJTMplYa>Sj zwSRCSXkuf5TD1zOv11{F=ws=+oI$M$0gKwbt0g8a!-h)-35bI1TQfm!gELu%IJwR&0LmZr#a%_&^o?VlqZH~>Z; z&%?r?rMVeeT3Vo?p#jRPl@M`;WO(zyw0{tKyfT%e1)gq!D6gxVx*)uXfKsWXgKuqZg=PXqtyaSyrApGo^|N>KSA$DfT~k_SCSSL>v1KXe zk$Nq*#CmOlqz;yProyw)@AW(QS5{V_s;s1gXHBJ2L1SYh4Wy~5iT*$BcO|&*Fn<(? zs@+;r4_DG3Y|@ofHUsggs>8b4t4$eL`_+K0=m7}UUV@VjUqahZGlQwqaOH|#@STBR zCJ+b$k}H((-!vtB5^6}Bp@6t^j}vfp=C&8St%<7N^Z{ryVB=E)vo>XdKzIq(tUd^t zQ|I(eokfd!44!L9CDaBQ9@F|b+kdk@*w~~$mS>TeJ4)$|8#l~X{h*e00YGP=3hcZe zz#QRCaPhtZi~W*e%h%gMHepJS02+V(*&qO{arJ@OL49mE)bq;x@7Rjc$jHcdbO7@6 z^WSreZm8)B0J9*6nZ5|(5qvDnf=@*$@P+S1aF_f7af`e`K5DF9@S5@CL4PTi_X_|^ zE7S!`EBr1wTM4tabOo>^yr%Z((W8@f0CID4r?^HmD7yuq%S1KU5;}b(%!Pjm(_n$m zWmqanhUGp2`&P>w*$jHc;+B*OiL@mq| zKLvZyeV8r$AIZiwSmb*NmVZf;Vcq&8kUo7Lw35YZFaWr;VlyE*))hcPLIPh0AUQet z1GgA;ZSMd&C}mA3h1qZv<-uHG27Kmym8O*&0U`}O4|o1}Y7`JCZ2U|w&hDtEV){c+C>ItnXi9TfDD9nR@3e&av@YCu; z9GeE&1!esP5PN~$wZK-Q4iZjZlQ1iBM=SB;v19fN!_^JkW^RB_P>epx>9xa2ct=-u zmq@hwh=|XEqQ_MR1^=jwG?iO1CWW?{3#n=hkB*+rEWoDRc7NJDKVr?{aqulfS^U8J9{u0V$`c zV>q!X-ygbp!akr@3j$woU|lx$3l7>RDSsMd4x~-!zEr&P|G*gN6?Y(i%s>P& z8F?rOscNGqB)Tvb5KiEm)Emun-%Y^XYb zbb9k>(1tCoDJF2@3w>_fU63mh2du=oaL#_yrZ-^|X9xm!0;WgDo&0WP^rK=M3A25U z)PEv2!(Z9=YgT{l4x5&aNpLJ6|oACBYy<=NklHk?^tGm?nXr|+$EhGYoLI0YOrGZ+oN#QBnJ5{+@$=mbRAGPF~0$V6Zwld-L@ zl$JsJ_ul7e3=T`2^ZjSdNr_Y8L)aauwn(Ud^xaY4Ny=3RFn6zvthgEe$=K`AW1PM zEP%}7L5xS-4TOc=8sXtUObj5G1C^CPLIQ@OW1-IZf{5l420%^P8{U)WM??e=7YCG= z11c3;sb3yU!LtSD7ari``uy7icp@^An4ZP8)t)_Y-G3WJ{Md_(Q2P-Wz%Ks*JP{QI z6cz$iRX|1tY%8Ntn^KM>&BXizytkz^Z~%`VYu5r=El^Pb`?1f_^S1@ck8eV(okxJ2 z7rNmLj|dKego{+e*3kin!-27}F__I}v|qI1xg(SFHAY>i-=qu0oeENXOrg#1)-IoAXcjtBiGG1 z@|_*Yues(5U=m{a4J5yO0g@fH=y_nBU&%XTV__N@xdp%z7K;UTyPXaCym!z7^(W*0 z`4LzPIU!b#B9ZAunxqv^%1)ssTZ`)}SNR06)qmB^m^?pd75IL%5kGdnGa2Huka_}f z3L`c#mypJ^AzPtCzU*6kxwQa}yCS`c>+9F|)>hODz8_z;+K~RbGjxYJ4#I>)X&)Y8 z&f_t86Sk`xQB-^kO&c=d3ZL@h=FXjdCqI)Pw53q{IN@)A3bRgB>=ZKc&ZUE8%8qo2U3}HY+L21i5~}a_@JQ+ z!y`9l4ML-{&k||?9*Bw@4HOpAR{vl#(|?6+(l$Jy_ttvZMw z&8#1}+D4Rr*nyt@s{sR?Xt&J=03T$+J+1yFesmK*&br604!d5}q3(Dmt_=IR23l7!mQSs456x9qM zQDf$u5(dC@Kdd}I&LKu|k}h(LH*qZ}JOI8Q<17f>(dj`kS@JuQOMb&f38{d>${k$<3oxyTTgyn!AAZ$3j_r6~Mi~aBQJK=(3abGbl`b)k=f6aPFTy!t3r5F|1`VVIT VVZ-+vb8!Fw002ovPDHLkV1g{XV!i+X diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 2842f956ca0e611f1073de3f49abc5163faf7fbf..10905ae6fc60e6d08f07100857fcf3a10af7a086 100644 GIT binary patch literal 6681 zcmV+!8s_DRP);BKa_uTO^%nU`!U^3sgzkw;YtabKYd+&4Zoqzn}@5kSd zsvZEKK}?gHRu#s7PUCOnY7aO9*o>OiTWm*5upQ06kySmy5iD(0fRp!hiFF{>omf9& z2Gsh|*YG{vDhSc0&wqP}V1#POz22PIfT9wZaW4lv&!)o8edk^uUw@dn<+)#)wRo3Q zykK+rv-um#o}=O4_!@aH6F-BW#qZ#EaT~ZT+@=E3-^#<9GVqm7oc!N8uNY=segNT{ z5|}^#x2?Qn>W?pBsCOwCxjzL%wt_7wjYuryMdhx^2R<1r{ZzIPV*mjJzzv%qKFVJ3AN8RfmqHaaIQWOVGcX4jbGfq!R1zpR*&Kf?QTtfY*SK zGH!pxVEuh5;4$H`;W5gEN{uEP=LLW3C1=7a_kGf0ORwkrXlKJkLx8S|j5nc50+wEc z2y%>gta!|d&ZVi0dTsvy!Y44BgqpMwD_-!x%f)83F{&RD7~%6A@R-T5e<3(8ZMF9X zzEY)scO*g=_3!nscu_5*t`F*Le0ajpgvXBOfafC622HgUTK;cwDNOz`hRL$)v&y~6 zDQc*dF7O9}qvF&Z>F&vEUeZ`EDsQU5S2hu=4U_#|!0}tJ_MAL6&wGY2n9 zkD$;B3L|)zj6W|F=wHvhJero4)>eo?V~+gy_nna@vFRmEE603y3;ai|f)l+b!b3fM zkhFXs#5#I#|AT%I*MB;Aj}L}ncIizuB$Z>jy8G0Ni&As2Al6s#S$TIsRw?e{lLUIzsZqc>G=#I6Q3O2v}u!egJeg- z960fgbQfD(5tj_I_I%A~Y67FL56rxIzCZodG$;s|&prdDb7$`J zWIJbijD~6R&o>zo4BRBlB;OJ^cO%!QUcG=<`+_Is6EV-nRCDUr7n$eHTC%{gMnVc} z{QvTX?;#nzd$XRxdPGzdNLQ=?X5>hYBtm4FW;57l`VCmyK4=oz5n?ev^eJ3RPM=mU znGr8A&z?Q&xHejv$rV|m@>9LWDhFGYArYtnrl!C+Ie~P~9@ZE~M_^1$fYH@uKZDuR zn$fG(UmsjVQp99sq$n#XDXD9niZX4kVSLj#cB3qk&v<6cJ6${Qg@$1ZNByW#AYHkV z(}zu)fSEfNm|nfOjEQ_Mjp)Oo>1wVIZsPJG%bvo4lQ{Spw37rdIqHr8nD z+iq_E_5|>T@gH?y`gD*62Xp!m5CF_4p8(UbBc~%&A3jx6ec(j77^eG6;QZy(xpm?N zyr781;RD=T2ywiW2Z0`=4f z#D-wx8(EkZ6BF})Z!OC7%Np0xU#(IZyzefZ!5V8)IG>FU*-K7@q<^TiijRjsWps2}#L4FN1h#0wU0E|erBBo06f`Q}}1 zV!uYxy|N&-+NGl(ZMg0I`X_)l1iD){uDZr*8uek#8ek?&0H%F=nLeEEIR>VEr6&5| zB9;zWCV}4*AB0mcXjUuX&CSj2;l8)LNI3er5L5u=8d?oU0*0lQExAI@#s;K2c7Sx> zK9DY10*r+PFz>y`eg^d+!t6V+T3Vn6UQi5+!}CQ%3;H9LSFT*qu5s+Y{@{fdu3k{o zUQXB3Z#V*kM6_uG%+R4AUABx9>FwKrS-23G{{5kx2>6quMTz$TmU9qNgYEc9?JDD~*2`}c%0f|TiPo6x1XV0FoB%tBn_!>`yNF;`Rr^GO7 zMZ;FdMs8x*8+-2;f~i)O)iLiP$;ru`mh5}=SYCYP?Z2}R6EW6oH1J=N5F{=vl#O%* z8$mCn-hft8Qc@u-W#@|_;E)&wFKxJ#)M3-(oQ)ed_CRcZ{`qIEsydz;DH)=F<3d?w z;fMDCLzhAbw{&b2@XHJgK$4Xu16F8A1cssK&!4j-;In*Ky8B2BjyuGFBecH5(8M1K zA@(v6f-f{2 z`RD<>Hz?AFGq=R>`TBbF0yi;ZLP(B^OWsbKbXqFI&)~s>wL{}yTt?SXP5?Lh4V`kq z$l(zTvP*`aEdJME;pkaVP?g}zho!3YVgG3{j9yt!VTfcyzI)UE?A*DtuF^2XXFn+^ zDgD0N@=EgN%c=;-0i(rfU}Ae6%xuoU*E2T2?GAnG75rD$)*vRLTU`R=!xFC#7?$Mq zA&2NgAkhc2rFCDF%?r*gj);gbL5vj^Wjq15QgfzHeUpAxgMbHwfIq?9<}_H@9Dz}b zqG8QgN62seLA~VvPtKgFG5CtYk}7>jA^PC7vu^Z(pD~;CLjn96ef+;l(@{SDU%D$^ zikJ4NUawCHaK;ey5KQcDf!U(-Fl*bDN&$T5SEa2E#KT>(qm zL>OU5NLYLrCOXEz6z6D|<`NCAbAE(7o%`25_KzJ~r{LFAAFzH{`#Y&0mej60YTzn? zb&)Bj2*$dV+7k31jhQoNw*K)@>2>x>!zu}=m<<^_J^~XN38x7O350|=LP9JdAqJ+o zlCVT9V2Uf`wP{~t0!nu7tTzIb>4T!Q_0Gdu^p{vHCE&F)?e@^2L$NQUQ6UrJyPsRO zZ0Wcx;zfG(3E)X6UVnA27l3Fnq$25CfmO#lYuI2Vn2;FQK%# zPWAGBU0sl5XV*IcHPMG-*TgVpWzD849l{=EI5;@`vr>1IC*a`0gZlQ{%kosGpo*-B zl8{ToQ7U|7e;tO{T>vY)6EM>LD2#K6gGo-YFx7>SK#2H^5b?FmE;wd1mgs|KqlKTE z=!1M%N`G9vCLf=QE(p#k@b&dIR7QYiLPElTZ^Emp0jkmjBq0+9Iot1jq?9$&QR2(n(0VLqgJ35|YlzykRW$hA9GXm`-fXr%NIG z{SPb0|A>f2BS4Wp$dhn2RSX|3shWV6L~Nl(bOF;; zQ~R658!p07OjS`E7XJa`9S*}}xv(_T`8U`x>MMBKqLqw*C&!OBIsx)w2{l5f3H}GG zM?gqOh$U@JS0>=VfddA$4?&9RgaYafS;QOCs5e|=wPBduNf=2or3zumg%fEcVy@j@ zIBYr@$}~y!o0zB;1jvgth9+SsGGA782=e#$H&aT$=FOY?+HZfES0@Bi2uWD5y6;g0q7O;3Yzb=zMf&hB zk5~waybKwS^VQBH&~BzFuY?iPk~fj&?YW)OW?zwZ(}%4$4)ICoq5gv`X1c@VO3$G3g*dJA@4_|o3K}6h5$S*8va00@QC{IEE z8~9M-KOVM&ob++_8^lIjDdt*kycRn~`ZeG?$z z{JjPxV0Mu5NqO(hH*XMZyCB9D1X%bWWpWGhq!*o-v8l>sDGf#hOX=|oHAFc`X;Z0j(va_5%xW_=io{Ny4nO861jl+mYusjM;W&LbA=8J63iM(2@;KNXdjs+c>Q*1Z z;#DtA{9kZN_Jj!&unnz4(|zTSNs}g_7j)Qn^kJkiy&hPN?$02XwxT}pZH=3CdVf#U z?{la6m#Rq^s!m%Yooj2b`jABQA(7~V^0o$=OVCNUd@G~Y;NxluQ;#avh5BTJUqH|z z#8hScmkUF>-MV$tUlmo9j0#@wRdJo_1K-xT#7<+i?NzJ#@DDP@ z;Igagl@N%XYv}dV4?p}6FV@qoGW_t5g$ozr(uodHF_-+Tyi1^=ZmL>)D-!5KHl3Hg z$Ld4nwzpz^z((JiofjbSavJ0-(1?OUF(h6ufMt90!E8wZN51M+(TwGiJO~W`B?Pgg zm{#vW!%&;KbLS3m+$zbd>N)}S)Q87a>cd1Qe#s1mrfAmKTK+0yA7_hHITL+rl~oJq$@!L;{L0 z=Kkg$`LKS=@4FB~ie=628$lV<`|`^#hdFF1%x@ZAPz`-poGh3YJtdoeU_HVymWVaC znhy<^R!(q;hB5ZB?2=1ddWp4%F$r(zVJyiQ{uGS<1%Y=8$><-A7|x$Rzh!MMme;Vd zvcg-tcir{d=|H^vzUg>@B7G3FHDvX}RhdxpGjcdJI>8~99sQFWi5EB=Viy~aw2g&f zi;l62kWK7vv)4s%UQi_S0)F%lTbc)J!y>~FJBnfL?wUee2eqIb$%qWScW0!q8BvqG zAE=`G;gL+Jd5;)scUm?FG1@+!4L@V;Nf@#t1T2byVKztDW%zhK1YQ?`o>d_X(TNx5 z4Oi}W@7^5?uXfeS{Z)AZaU*1~%eoC)7k#!y#NH{Z>E0Jqkx(NM_u15yn;N~yW=+Fv zPlC1WaTsBH1V${12Wy)@z|!Uz47NF|kN^YP^_;RI13XvwyC7x+{5G{7{enlcu3fw0 zG@5=`RMM~JOC{V4Pt(2=ZY7V9O^p(<#;gg$6Ou8+_8eF&It@dJnGx_!7hM5kyE|M6 zqS=rEs{<0LnR@}O4vUFFtSDx6a@Q=4sZ*z74%^AZ#Ke60w)AvTVzbx4z5}-;u0RAQ z)>+)F9L_@!GH@=!)b0kc>m>Hy1Y`TV1pIXJ*=$ze4bTG+3xbJL@a0EFMn*#st5Ksy zwXTcN&p$M+t*!9~4gTq~(r^BpfZXz?mlaia4kDknzq45~IL~;&L~UbZ;|}Dxcj&g?){gr=uZin{5+a0Tu%406c?Thd zd(P)xC!aB3!7ql7Ju|^~-S!~FhGJAN_mkEjaZRUHt5&$KrGL+P2|G<)~%-G)xB8ToHNcXY^-LRNs@ zO%hb}ddNAOyXS#-aQq2^g)w46v8nf8*w7+E!|H*ywzi4ywoB*DJ^nf*@Zg)d=Y!{l z;};1AgAoggNrU{d275K7si|pu^4vpLS9kCaTP|F{-Ul0w-of7v5cGL4<}*0*Jwp;M z>FDSTK@2Ds&FVAsC?bIu<(|Y$S8qOFKrYK_2Aq0e$=Swf6fd`u9(K9%1IdwrO#0S)GYsj}4EJ94mG; zKlwf#RtEnX-KS3)44*}ak%+1Xw(s0ucj}?!Zj(V-82!5r?8RI8$=Z-|2dr=~cNEtuG&CS!n zcf-Mh3;eHUjPuHXL2Qp*EF**`g}cm0EM-S8H5OPljEDrUvlqlk-+)cGK}Px@mwXuK zodpZlUVDW5#C?-vu%IKpA08VXBaQXVnmX``v;keY6~;4shSEdo{H3=AVQS@+4Do$)*f1QG5 zj9pjkI%2pW?~gDuGaEN%%$TX<@hKYqjjxgShT~`GXH95KH>BI@joZe3(D>e(?py0! z3pKSNLX*Z^1f&%ioqBjdGv?kH9;k=t(~#AV0*W?3VEyTP_!)it4t|$zqZ4kEhL{#~ zUz&e);HyIj_F8lhIIOa9r9tP;o&S$&NGGA;Yxo|120u%|)}h<@8}PRzgeOIlh72tV js?hk?H3eX+J>dTj7ntru^CMZg00000NkvXXu0mjf#+S@w delta 3132 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 W18KhQQQ9E@000052UvRd73{kF7|sXXgL{Xs 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 literal 5562 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 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 7c7d259e8c12cca621b00a7048bf07fa728768f0..fcaf7e468db8536cd3c36e1192d9e5ce1c4eb38b 100644 GIT binary patch literal 16148 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 literal 8074 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 JOu;JT{{dIr9)th@ From 457728ce19a265f52ad597878bf08aa4366f11c1 Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Mon, 8 Aug 2016 23:03:40 +0200 Subject: [PATCH 20/30] Ajout de truc par Google --- app/src/main/AndroidManifest.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5c26f84..d005f32 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -49,7 +49,11 @@ android:parentActivityName=".MedicamentListActivity" android:theme="@style/AppTheme"> - + + \ No newline at end of file From d020ee1bcfeabe7e11b8994672ee3dceb5e5932d Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Mon, 8 Aug 2016 23:04:07 +0200 Subject: [PATCH 21/30] Modification notification pour le lendemain midi --- app/src/main/ic_launcher-web.png | Bin 0 -> 53128 bytes .../pilldroid/MedicamentListActivity.java | 93 +++++++++++++----- .../java/net/foucry/pilldroid/UtilDate.java | 13 +++ 3 files changed, 82 insertions(+), 24 deletions(-) create mode 100644 app/src/main/ic_launcher-web.png diff --git a/app/src/main/ic_launcher-web.png b/app/src/main/ic_launcher-web.png new file mode 100644 index 0000000000000000000000000000000000000000..42559b24586f440f5756ff577b77742aeaa5bc74 GIT binary patch literal 53128 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�r7$%0QC>cT&KK0VfBXAaIgE zWr351PLD+R%C`pHkDiCZodTYNJO_GTXHQ}88|kM7KA?{v2yy^qfcxx#Bm~lwz?A~` z`hXJyDhHAvxRT(Cf-4K0G@KD6LMz`IbiZ~6>~vgD0Z$>%f!-bCOR(p;rX(#W4JRRd(U>^f~Kp#O61TqjT z1R+wui2)}E+~mL&1XmKMEKp(KJNhwqHOXVczG=zB&G z1VNB}AqEyXut-9vIK))w{?_M;d1nZMAPDkbN Date: Tue, 9 Aug 2016 23:31:57 +0200 Subject: [PATCH 22/30] =?UTF-8?q?Ajout=20m=C3=A9thode=20pour=20avoir=20le?= =?UTF-8?q?=20nom=20de=20l'application=20(sans=20doute=20=C3=A0=20d=C3=A9p?= =?UTF-8?q?lacer=20dans=20une=20class=20utils?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changement du titre de la notification (avec le nom de l'application) --- .../net/foucry/pilldroid/MedicamentListActivity.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java b/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java index 07044ee..139f61e 100644 --- a/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java +++ b/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java @@ -7,6 +7,8 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; import android.os.SystemClock; @@ -335,12 +337,20 @@ public class MedicamentListActivity extends AppCompatActivity { private Notification getNotification(String content) { Notification.Builder builder = new Notification.Builder(this); - builder.setContentTitle("Scheduled Notification"); + builder.setContentTitle(getAppName()); builder.setContentText(content); builder.setSmallIcon(R.mipmap.ic_launcher); return builder.build(); } + private String getAppName() { + PackageManager packageManager = getApplicationContext().getPackageManager(); + ApplicationInfo applicationInfo = null; + try { + applicationInfo = packageManager.getApplicationInfo(this.getPackageName(), 0); + } catch (final PackageManager.NameNotFoundException e) {} + return (String)((applicationInfo != null) ? packageManager.getApplicationLabel(applicationInfo) : "???"); + } /** * SimpleItemRecyclerViewAdapter */ From 390f620ca4bc1b3fad0f973d2699967428e7c968 Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Wed, 10 Aug 2016 21:03:28 +0200 Subject: [PATCH 23/30] =?UTF-8?q?Notification=20programm=C3=A9e=20pour=20l?= =?UTF-8?q?e=20premier=20m=C3=A9dicament=20qui=20arrive=20en=20fin=20de=20?= =?UTF-8?q?stock,=20=C3=A0=20la=20date=20de=20fin=20de=20stock=20(le=20cal?= =?UTF-8?q?cul=20n'\''est=20pas=20correct)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changement définition du TAG des logs --- .../java/net/foucry/pilldroid/DBHelper.java | 14 ++--- .../java/net/foucry/pilldroid/DBMedoc.java | 12 +++-- .../pilldroid/MedicamentListActivity.java | 52 +++++++++---------- .../java/net/foucry/pilldroid/UtilDate.java | 7 +-- 4 files changed, 45 insertions(+), 40 deletions(-) diff --git a/app/src/main/java/net/foucry/pilldroid/DBHelper.java b/app/src/main/java/net/foucry/pilldroid/DBHelper.java index cfc065d..12f13ca 100644 --- a/app/src/main/java/net/foucry/pilldroid/DBHelper.java +++ b/app/src/main/java/net/foucry/pilldroid/DBHelper.java @@ -34,6 +34,8 @@ public class DBHelper extends SQLiteOpenHelper { private static DBHelper sInstance; + private static final String TAG = DBHelper.class.getName(); + private static final String[] COLUMS = {KEY_ID, KEY_CIS,KEY_CIP13, KEY_NAME, KEY_ADMIN, KEY_PRES, KEY_STOCK, KEY_PRISE, KEY_SEUIL_WARN, KEY_SEUIL_ALERT}; @@ -76,7 +78,7 @@ public class DBHelper extends SQLiteOpenHelper { public void dropDrug() { SQLiteDatabase db = this.getWritableDatabase(); - Log.d(MedicamentListActivity.Constants.TAG, "Drop drug table"); + Log.d(TAG, "Drop drug table"); db.execSQL("DROP TABLE IF EXISTS drug"); this.onCreate(db); @@ -84,7 +86,7 @@ public class DBHelper extends SQLiteOpenHelper { public void addDrug(Medicament medicament) { // Logging - Log.d(MedicamentListActivity.Constants.TAG, medicament.toString()); + Log.d(TAG, medicament.toString()); // Get reference to writable DB SQLiteDatabase db = this.getWritableDatabase(); @@ -144,7 +146,7 @@ public class DBHelper extends SQLiteOpenHelper { medicament.setAlertThreshold(Integer.parseInt(cursor.getString(9))); // Log - Log.d(MedicamentListActivity.Constants.TAG, "getDrug("+id+")" + medicament.toString()); + Log.d(TAG, "getDrug("+id+")" + medicament.toString()); // Return medicament @@ -183,7 +185,7 @@ public class DBHelper extends SQLiteOpenHelper { medicament.setAlertThreshold(Integer.parseInt(cursor.getString(9))); // Log - Log.d(MedicamentListActivity.Constants.TAG, "getDrug("+cip13+")" + medicament.toString()); + Log.d(TAG, "getDrug("+cip13+")" + medicament.toString()); // Return medicament @@ -225,7 +227,7 @@ public class DBHelper extends SQLiteOpenHelper { } cursor.close(); - Log.d(MedicamentListActivity.Constants.TAG, "getAllDrugs " + medicaments.toString()); + Log.d(TAG, "getAllDrugs " + medicaments.toString()); // return return medicaments; @@ -269,7 +271,7 @@ public class DBHelper extends SQLiteOpenHelper { db.close(); // log - Log.d(MedicamentListActivity.Constants.TAG, "delete drug "+medicament.toString()); + Log.d(TAG, "delete drug "+medicament.toString()); } public int getCount() { diff --git a/app/src/main/java/net/foucry/pilldroid/DBMedoc.java b/app/src/main/java/net/foucry/pilldroid/DBMedoc.java index a446765..8aee11e 100644 --- a/app/src/main/java/net/foucry/pilldroid/DBMedoc.java +++ b/app/src/main/java/net/foucry/pilldroid/DBMedoc.java @@ -35,6 +35,8 @@ public class DBMedoc extends SQLiteOpenHelper{ private static final String[] COLUMNS_NAMES = {MEDOC_CIS, MEDOC_CIP13, MEDOC_ADMIN, MEDOC_NOM, MEDOC_PRES}; + private static final String TAG = DBMedoc.class.getName(); + public DBMedoc(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); this.myContext = context; @@ -64,7 +66,7 @@ public class DBMedoc extends SQLiteOpenHelper{ private boolean checkDatabase() { if (BuildConfig.DEBUG) { - Log.e(MedicamentListActivity.Constants.TAG, "checkDatabase called"); + Log.e(TAG, "checkDatabase called"); } SQLiteDatabase checkDB = null; @@ -84,7 +86,7 @@ public class DBMedoc extends SQLiteOpenHelper{ } private void copyDatabase() throws IOException { - Log.e(MedicamentListActivity.Constants.TAG, "copyDatabase called"); + Log.e(TAG, "copyDatabase called"); InputStream myInput = myContext.getAssets().open(DATABASE_NAME); String outFileName = DATABASE_PATH + DATABASE_NAME; @@ -105,7 +107,7 @@ public class DBMedoc extends SQLiteOpenHelper{ } public void openDatabase() throws SQLiteException { - Log.e(MedicamentListActivity.Constants.TAG, "openDatabase called"); + Log.e(TAG, "openDatabase called"); String myPath = DATABASE_PATH + DATABASE_NAME; myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); @@ -130,7 +132,7 @@ public class DBMedoc extends SQLiteOpenHelper{ private DBMedoc dbMedoc; public Medicament getMedocByCIP13(String cip13) { - Log.e(MedicamentListActivity.Constants.TAG, "getNedocByCIP13 - " + cip13); + Log.e(TAG, "getNedocByCIP13 - " + cip13); SQLiteDatabase db = this.getReadableDatabase(); @@ -167,7 +169,7 @@ public class DBMedoc extends SQLiteOpenHelper{ medicament.setAlertThreshold(7); // Log - Log.d(MedicamentListActivity.Constants.TAG, "getDrug(" + cip13 + ")" + medicament.toString()); + Log.d(TAG, "getDrug(" + cip13 + ")" + medicament.toString()); // Return medicament diff --git a/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java b/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java index 139f61e..4d2a86a 100644 --- a/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java +++ b/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java @@ -34,10 +34,8 @@ import com.google.android.gms.appindexing.AppIndex; import com.google.android.gms.common.api.GoogleApiClient; import java.text.SimpleDateFormat; -import java.util.Calendar; import java.util.Collections; import java.util.Comparator; -import java.util.Date; import java.util.List; import java.util.Locale; import java.util.Random; @@ -92,6 +90,19 @@ public class MedicamentListActivity extends AppCompatActivity { public void onStop() { super.onStop(); +/* Calendar calendar = Calendar.getInstance(); + Date now = calendar.getTime(); + Date tomorrow = UtilDate.getTomorrow();*/ + + Medicament firstMedicament = medicaments.get(0); + + long outOfStock = firstMedicament.getDateEndOfStock().getTime(); + + // int between2DateInMillis = (int) (tomorrow.getTime() - now.getTime()); + scheduleNotification(getNotification("It's today + 10s"), outOfStock); + + Log.d(TAG, "Notification scheduled for "+ firstMedicament.getDateEndOfStock().toString()); + // ATTENTION: This was auto-generated to implement the App Indexing API. // See https://g.co/AppIndexing/AndroidStudio for more information. Action viewAction = Action.newAction( @@ -108,10 +119,7 @@ public class MedicamentListActivity extends AppCompatActivity { client.disconnect(); } - // Log TAG String - public interface Constants { - String TAG = "nef.foucry.pilldroid"; - } + private static final String TAG = MedicamentListActivity.class.getName(); private static DBHelper dbHelper; private static DBMedoc dbMedoc; @@ -132,10 +140,6 @@ public class MedicamentListActivity extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_medicament_list); - // Register for alarm - -// RegisterAlarmBroadcast(); - dbHelper = new DBHelper(this); dbMedoc = new DBMedoc(this); @@ -235,21 +239,16 @@ public class MedicamentListActivity extends AppCompatActivity { public void onPause() { super.onPause(); - Calendar calendar = Calendar.getInstance(); + /*Calendar calendar = Calendar.getInstance(); Date now = calendar.getTime(); Date tomorrow = UtilDate.getTomorrow(); - int between2DateInMillis = (int) (tomorrow.getTime() - now.getTime()); - scheduleNotification(getNotification("It's tomorrow At 12"), between2DateInMillis); + //int between2DateInMillis = (int) (tomorrow.getTime() - now.getTime()); + scheduleNotification(getNotification("It's today +20s"), 20000); - Log.d(Constants.TAG, "Notification scheduled"); + Log.d(TAG, "Notification scheduled");*/ } -/* protected void onDestroy() { - unregisterReceiver(mReceiver); - super.onDestroy(); - }*/ - public void scanNow(View view) { Intent intent = new Intent("com.google.zxing.client.android.SCAN"); //intent.putExtra("SCAN_MODE", "CODE_128"); @@ -264,8 +263,8 @@ public class MedicamentListActivity extends AppCompatActivity { if (resultCode == RESULT_OK) { String contents = intent.getStringExtra("SCAN_RESULT"); String format = intent.getStringExtra("SCAN_RESULT_FORMAT"); - Log.i(Constants.TAG, "Format:" + format); - Log.i(Constants.TAG, "Content:" + contents); + Log.i(TAG, "Format:" + format); + Log.i(TAG, "Content:" + contents); AlertDialog.Builder dlg = new AlertDialog.Builder(this); dlg.setTitle(context.getString(R.string.app_name)); @@ -351,6 +350,7 @@ public class MedicamentListActivity extends AppCompatActivity { } catch (final PackageManager.NameNotFoundException e) {} return (String)((applicationInfo != null) ? packageManager.getApplicationLabel(applicationInfo) : "???"); } + /** * SimpleItemRecyclerViewAdapter */ @@ -381,11 +381,11 @@ public class MedicamentListActivity extends AppCompatActivity { SimpleDateFormat dateFormat = new SimpleDateFormat("EEEE d MMMM yyyy", Locale.getDefault()); String dateEndOfStock = date2String(mValues.get(position).getDateEndOfStock(), dateFormat); - Log.d(Constants.TAG, "dateEndOfStock == " + dateEndOfStock); - Log.d(Constants.TAG, "stock == " + mValues.get(position).getStock()); - Log.d(Constants.TAG, "prise == " + mValues.get(position).getPrise()); - Log.d(Constants.TAG, "warn == " + mValues.get(position).getWarnThreshold()); - Log.d(Constants.TAG, "alert == " + mValues.get(position).getAlertThreshold()); + Log.d(TAG, "dateEndOfStock == " + dateEndOfStock); + Log.d(TAG, "stock == " + mValues.get(position).getStock()); + Log.d(TAG, "prise == " + mValues.get(position).getPrise()); + Log.d(TAG, "warn == " + mValues.get(position).getWarnThreshold()); + Log.d(TAG, "alert == " + mValues.get(position).getAlertThreshold()); holder.mItem = mValues.get(position); holder.mIDView.setText(mValues.get(position).getCip13()); diff --git a/app/src/main/java/net/foucry/pilldroid/UtilDate.java b/app/src/main/java/net/foucry/pilldroid/UtilDate.java index 434a25b..29c60eb 100644 --- a/app/src/main/java/net/foucry/pilldroid/UtilDate.java +++ b/app/src/main/java/net/foucry/pilldroid/UtilDate.java @@ -12,6 +12,7 @@ import java.util.Date; */ public class UtilDate { + private static final String TAG = UtilDate.class.getName(); /** * * @param aDate @@ -21,7 +22,7 @@ public class UtilDate { */ public static Date dateAtNoon(Date aDate) { - Log.d(MedicamentListActivity.Constants.TAG, "dateAtNoon " + aDate); + Log.d(TAG, "dateAtNoon " + aDate); Calendar calendar = Calendar.getInstance(); calendar.setTime(aDate); @@ -37,7 +38,7 @@ public class UtilDate { */ public static Date getTomorrow() { - Log.d(MedicamentListActivity.Constants.TAG, "tomorrow"); + Log.d(TAG, "tomorrow"); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_YEAR,1); @@ -70,7 +71,7 @@ public class UtilDate { */ public static String date2String(Date date, DateFormat dateFormat) { - Log.d(MedicamentListActivity.Constants.TAG, "date == " + date); + Log.d(TAG, "date == " + date); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); From f79ca8d00dd09df1989e9cd36e1598cb1673cc51 Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Thu, 11 Aug 2016 17:41:14 +0200 Subject: [PATCH 24/30] Ajout convertion date millisecondes vers date --- app/src/main/java/net/foucry/pilldroid/UtilDate.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/src/main/java/net/foucry/pilldroid/UtilDate.java b/app/src/main/java/net/foucry/pilldroid/UtilDate.java index 29c60eb..058b3ca 100644 --- a/app/src/main/java/net/foucry/pilldroid/UtilDate.java +++ b/app/src/main/java/net/foucry/pilldroid/UtilDate.java @@ -105,4 +105,11 @@ public class UtilDate { return (int) (todayDate.getTime() - oldDate.getTime()); } + + public static String convertDate(long dateInMilliseconds) { + DateFormat formatter = new SimpleDateFormat("YYYY/mm/dd hh:MM:ss"); + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(dateInMilliseconds); + return formatter.format(calendar.getTime()); + } } From f775ab3d660eccef7d36620fbda5cfd2e2337131 Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Thu, 11 Aug 2016 17:41:53 +0200 Subject: [PATCH 25/30] Correction mineures --- app/src/main/java/net/foucry/pilldroid/Utils.java | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/net/foucry/pilldroid/Utils.java b/app/src/main/java/net/foucry/pilldroid/Utils.java index dc4798e..6b79c60 100644 --- a/app/src/main/java/net/foucry/pilldroid/Utils.java +++ b/app/src/main/java/net/foucry/pilldroid/Utils.java @@ -3,6 +3,7 @@ package net.foucry.pilldroid; import java.io.InputStream; import java.io.OutputStream; +import java.util.Date; import java.util.Random; import java.lang.Math; From e2d5228a7f9eeaa811a70a837b8386bb6a6875c0 Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Thu, 11 Aug 2016 17:42:09 +0200 Subject: [PATCH 26/30] Nouvelle programmation des notifications --- .../pilldroid/MedicamentListActivity.java | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java b/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java index 4d2a86a..1c98bad 100644 --- a/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java +++ b/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java @@ -34,8 +34,10 @@ import com.google.android.gms.appindexing.AppIndex; import com.google.android.gms.common.api.GoogleApiClient; import java.text.SimpleDateFormat; +import java.util.Calendar; import java.util.Collections; import java.util.Comparator; +import java.util.Date; import java.util.List; import java.util.Locale; import java.util.Random; @@ -90,18 +92,26 @@ public class MedicamentListActivity extends AppCompatActivity { public void onStop() { super.onStop(); -/* Calendar calendar = Calendar.getInstance(); + Calendar calendar = Calendar.getInstance(); Date now = calendar.getTime(); - Date tomorrow = UtilDate.getTomorrow();*/ + + long dateSchedule; Medicament firstMedicament = medicaments.get(0); - long outOfStock = firstMedicament.getDateEndOfStock().getTime(); + Date dateAlerte = UtilDate.removeDaysToDate(firstMedicament.getAlertThreshold(), firstMedicament.getDateEndOfStock()); + + if (dateAlerte.getTime() < now.getTime()) + { + dateSchedule = now.getTime() + 300000; + } else { + dateSchedule = dateAlerte.getTime(); + } // int between2DateInMillis = (int) (tomorrow.getTime() - now.getTime()); - scheduleNotification(getNotification("It's today + 10s"), outOfStock); + scheduleNotification(getNotification("It's today + 10s"), dateSchedule); - Log.d(TAG, "Notification scheduled for "+ firstMedicament.getDateEndOfStock().toString()); + Log.d(TAG, "Notification scheduled for "+ UtilDate.convertDate(dateSchedule)); // ATTENTION: This was auto-generated to implement the App Indexing API. // See https://g.co/AppIndexing/AndroidStudio for more information. From 5fde8c367cae3ba7687fd3b4c8ac097aeca45074 Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Fri, 12 Aug 2016 16:08:27 +0200 Subject: [PATCH 27/30] Correction format de la date --- app/src/main/java/net/foucry/pilldroid/UtilDate.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/net/foucry/pilldroid/UtilDate.java b/app/src/main/java/net/foucry/pilldroid/UtilDate.java index 058b3ca..c0648b7 100644 --- a/app/src/main/java/net/foucry/pilldroid/UtilDate.java +++ b/app/src/main/java/net/foucry/pilldroid/UtilDate.java @@ -107,7 +107,7 @@ public class UtilDate { } public static String convertDate(long dateInMilliseconds) { - DateFormat formatter = new SimpleDateFormat("YYYY/mm/dd hh:MM:ss"); + DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(dateInMilliseconds); return formatter.format(calendar.getTime()); From 06236003258fa4c274fd469db9d96c7b450bf375 Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Fri, 12 Aug 2016 16:09:01 +0200 Subject: [PATCH 28/30] =?UTF-8?q?Probl=C3=A8me=20avec=20les=20notification?= =?UTF-8?q?s=20qui=20ne=20semblent=20plus=20envoy=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pilldroid/MedicamentListActivity.java | 69 ++++++++----------- 1 file changed, 30 insertions(+), 39 deletions(-) diff --git a/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java b/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java index 1c98bad..4ca7806 100644 --- a/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java +++ b/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java @@ -2,8 +2,8 @@ package net.foucry.pilldroid; import android.app.AlarmManager; import android.app.Notification; +import android.app.NotificationManager; import android.app.PendingIntent; -import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; @@ -25,7 +25,6 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; -import android.widget.SimpleCursorAdapter; import android.widget.TextView; import android.widget.Toast; @@ -92,27 +91,6 @@ public class MedicamentListActivity extends AppCompatActivity { public void onStop() { super.onStop(); - Calendar calendar = Calendar.getInstance(); - Date now = calendar.getTime(); - - long dateSchedule; - - Medicament firstMedicament = medicaments.get(0); - - Date dateAlerte = UtilDate.removeDaysToDate(firstMedicament.getAlertThreshold(), firstMedicament.getDateEndOfStock()); - - if (dateAlerte.getTime() < now.getTime()) - { - dateSchedule = now.getTime() + 300000; - } else { - dateSchedule = dateAlerte.getTime(); - } - - // int between2DateInMillis = (int) (tomorrow.getTime() - now.getTime()); - scheduleNotification(getNotification("It's today + 10s"), dateSchedule); - - Log.d(TAG, "Notification scheduled for "+ UtilDate.convertDate(dateSchedule)); - // ATTENTION: This was auto-generated to implement the App Indexing API. // See https://g.co/AppIndexing/AndroidStudio for more information. Action viewAction = Action.newAction( @@ -134,17 +112,12 @@ public class MedicamentListActivity extends AppCompatActivity { private static DBHelper dbHelper; private static DBMedoc dbMedoc; - private SimpleCursorAdapter drugAdapter; + // private SimpleCursorAdapter drugAdapter; private List medicaments; private View mRecyclerView; private SimpleItemRecyclerViewAdapter mAdapter; - // For the notifications - PendingIntent pendingIntent; - AlarmManager alarmManager; - BroadcastReceiver mReceiver; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -160,6 +133,12 @@ public class MedicamentListActivity extends AppCompatActivity { toolbar.setTitle(getTitle()); } + // Remove previous notification + +// Log.d(TAG, "Remove old notification"); +// NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); +// nm.cancelAll(); + if (DEMO) { if (dbHelper.getCount() == 0) { @@ -249,14 +228,26 @@ public class MedicamentListActivity extends AppCompatActivity { public void onPause() { super.onPause(); - /*Calendar calendar = Calendar.getInstance(); + Calendar calendar = Calendar.getInstance(); Date now = calendar.getTime(); - Date tomorrow = UtilDate.getTomorrow(); - //int between2DateInMillis = (int) (tomorrow.getTime() - now.getTime()); - scheduleNotification(getNotification("It's today +20s"), 20000); + long dateSchedule; - Log.d(TAG, "Notification scheduled");*/ + Medicament firstMedicament = medicaments.get(0); + + Date dateAlerte = UtilDate.removeDaysToDate(firstMedicament.getAlertThreshold(), firstMedicament.getDateEndOfStock()); + + if (dateAlerte.getTime() < now.getTime()) + { + dateSchedule = now.getTime() + 10000; + } else { + dateSchedule = dateAlerte.getTime(); + } + + // int between2DateInMillis = (int) (tomorrow.getTime() - now.getTime()); + scheduleNotification(getNotification("It's today + 10s"), dateSchedule); + + Log.d(TAG, "Notification scheduled for "+ UtilDate.convertDate(dateSchedule)); } public void scanNow(View view) { @@ -268,7 +259,7 @@ public class MedicamentListActivity extends AppCompatActivity { public void onActivityResult(int requestCode, int resultCode, Intent intent) { Context context = getApplicationContext(); - String cip13 = null; + String cip13; if (requestCode == 0) { if (resultCode == RESULT_OK) { String contents = intent.getStringExtra("SCAN_RESULT"); @@ -306,7 +297,7 @@ public class MedicamentListActivity extends AppCompatActivity { // Add Medicament to DB then try to show it scannedMedoc.setDateEndOfStock(); dbHelper.addDrug(scannedMedoc); - mAdapter.addItem(medicaments.size() - 1, scannedMedoc); + mAdapter.addItem(scannedMedoc); } }); dlg.show(); @@ -329,7 +320,7 @@ public class MedicamentListActivity extends AppCompatActivity { private void setupRecyclerView(@NonNull RecyclerView recyclerView) { recyclerView.addItemDecoration(new SimpleDividerItemDecoration(getApplicationContext())); - mAdapter = (SimpleItemRecyclerViewAdapter) new SimpleItemRecyclerViewAdapter(medicaments); + mAdapter = new SimpleItemRecyclerViewAdapter(medicaments); recyclerView.setAdapter(mAdapter); } @@ -373,7 +364,7 @@ public class MedicamentListActivity extends AppCompatActivity { mValues = items; } - public void addItem(int position, Medicament scannedMedoc) { + public void addItem(Medicament scannedMedoc) { mValues.add(scannedMedoc); notifyDataSetChanged(); dbHelper.addDrug(scannedMedoc); @@ -423,7 +414,7 @@ public class MedicamentListActivity extends AppCompatActivity { holder.mView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Medicament medicamentCourant = (Medicament) mValues.get(position); + Medicament medicamentCourant = mValues.get(position); if (mTwoPane) { Bundle arguments = new Bundle(); arguments.putSerializable("medicament", medicamentCourant); From e148350ffd191534d4a59ca5a7db68875b66bd9f Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Sun, 14 Aug 2016 11:11:39 +0200 Subject: [PATCH 29/30] Correction format de la date --- app/src/main/java/net/foucry/pilldroid/UtilDate.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/net/foucry/pilldroid/UtilDate.java b/app/src/main/java/net/foucry/pilldroid/UtilDate.java index 058b3ca..9f3117d 100644 --- a/app/src/main/java/net/foucry/pilldroid/UtilDate.java +++ b/app/src/main/java/net/foucry/pilldroid/UtilDate.java @@ -107,7 +107,7 @@ public class UtilDate { } public static String convertDate(long dateInMilliseconds) { - DateFormat formatter = new SimpleDateFormat("YYYY/mm/dd hh:MM:ss"); + DateFormat formatter = new SimpleDateFormat("dd/MM/yy hh:mm:ss"); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(dateInMilliseconds); return formatter.format(calendar.getTime()); From 188a641018c020cb3311386522cfef6b7f31e473 Mon Sep 17 00:00:00 2001 From: Jacques Foucry Date: Sun, 14 Aug 2016 11:12:15 +0200 Subject: [PATCH 30/30] Correction calcul envoie des notifications --- .../pilldroid/MedicamentListActivity.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java b/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java index 1c98bad..074fce9 100644 --- a/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java +++ b/app/src/main/java/net/foucry/pilldroid/MedicamentListActivity.java @@ -2,6 +2,7 @@ package net.foucry.pilldroid; import android.app.AlarmManager; import android.app.Notification; +import android.app.NotificationManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; @@ -72,6 +73,10 @@ public class MedicamentListActivity extends AppCompatActivity { public void onStart() { super.onStart(); + Log.d(TAG, "Remove old notification"); + NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); + nm.cancelAll(); + // ATTENTION: This was auto-generated to implement the App Indexing API. // See https://g.co/AppIndexing/AndroidStudio for more information. client.connect(); @@ -103,15 +108,15 @@ public class MedicamentListActivity extends AppCompatActivity { if (dateAlerte.getTime() < now.getTime()) { - dateSchedule = now.getTime() + 300000; + dateSchedule = 120000; } else { - dateSchedule = dateAlerte.getTime(); + dateSchedule = dateAlerte.getTime() - now.getTime(); } // int between2DateInMillis = (int) (tomorrow.getTime() - now.getTime()); - scheduleNotification(getNotification("It's today + 10s"), dateSchedule); + scheduleNotification(getNotification("Vous devez passer à la pharmacie."), dateSchedule); - Log.d(TAG, "Notification scheduled for "+ UtilDate.convertDate(dateSchedule)); + Log.d(TAG, "Notification scheduled for "+ UtilDate.convertDate(now.getTime() + dateSchedule)); // ATTENTION: This was auto-generated to implement the App Indexing API. // See https://g.co/AppIndexing/AndroidStudio for more information. @@ -268,7 +273,7 @@ public class MedicamentListActivity extends AppCompatActivity { public void onActivityResult(int requestCode, int resultCode, Intent intent) { Context context = getApplicationContext(); - String cip13 = null; + String cip13; if (requestCode == 0) { if (resultCode == RESULT_OK) { String contents = intent.getStringExtra("SCAN_RESULT"); @@ -329,7 +334,7 @@ public class MedicamentListActivity extends AppCompatActivity { private void setupRecyclerView(@NonNull RecyclerView recyclerView) { recyclerView.addItemDecoration(new SimpleDividerItemDecoration(getApplicationContext())); - mAdapter = (SimpleItemRecyclerViewAdapter) new SimpleItemRecyclerViewAdapter(medicaments); + mAdapter = new SimpleItemRecyclerViewAdapter(medicaments); recyclerView.setAdapter(mAdapter); } @@ -423,7 +428,7 @@ public class MedicamentListActivity extends AppCompatActivity { holder.mView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Medicament medicamentCourant = (Medicament) mValues.get(position); + Medicament medicamentCourant = mValues.get(position); if (mTwoPane) { Bundle arguments = new Bundle(); arguments.putSerializable("medicament", medicamentCourant);