From 0db605e010986b580356a9ee66477581b7e8def2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Brey?= Date: Tue, 26 Jun 2018 10:05:12 +0200 Subject: [PATCH 01/15] Update gradle plugin to 3.1.3 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 11f9e97b6..200f5b765 100644 --- a/build.gradle +++ b/build.gradle @@ -15,7 +15,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.1.2' + classpath 'com.android.tools.build:gradle:3.1.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.vanniktech:gradle-android-junit-jacoco-plugin:0.11.0' } From ffad18fa9d586c9984b531e27ce7d759533e019a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Brey?= Date: Tue, 26 Jun 2018 10:07:44 +0200 Subject: [PATCH 02/15] Update kotlin version to 1.2.50 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 200f5b765..458b8e773 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { } ext { - kotlin_version = '1.2.40' + kotlin_version = '1.2.50' libVersions = [ android: [ support: '25.4.0' From 2c1747f25ce5373d8c6fa9deeb7b21a324f019eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Brey?= Date: Tue, 26 Jun 2018 10:16:11 +0200 Subject: [PATCH 03/15] Display that AEMPS database is from Spain. Closes #114 --- Calendula/src/main/res/values-de/strings_translatable.xml | 2 +- Calendula/src/main/res/values-fr-rCH/strings_translatable.xml | 2 +- Calendula/src/main/res/values-fr/strings_translatable.xml | 2 +- Calendula/src/main/res/values-it/strings_translatable.xml | 2 +- Calendula/src/main/res/values/strings_translatable.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Calendula/src/main/res/values-de/strings_translatable.xml b/Calendula/src/main/res/values-de/strings_translatable.xml index ac8c1168b..b63f3a67a 100644 --- a/Calendula/src/main/res/values-de/strings_translatable.xml +++ b/Calendula/src/main/res/values-de/strings_translatable.xml @@ -396,7 +396,7 @@ Sie werden alle ihre Einnahmen auf dem Startbildschirm sehen." "In weniger als 2 Wochen" "In weniger als 3 Wochen" "Keine" -"AEMPS Datenbank" +AEMPS Datenbank (Spanien) "Agencia Española de Medicamentos y Productos Sanitarios Datenbank" "Einrichtung läuft..." "Von QR-Code" diff --git a/Calendula/src/main/res/values-fr-rCH/strings_translatable.xml b/Calendula/src/main/res/values-fr-rCH/strings_translatable.xml index a1c09a97a..0c7c53f35 100644 --- a/Calendula/src/main/res/values-fr-rCH/strings_translatable.xml +++ b/Calendula/src/main/res/values-fr-rCH/strings_translatable.xml @@ -396,7 +396,7 @@ Vous verrez toutes leurs prises sur l'écran d'accueil." "Dans moins de 2 semaines" "Dans moins de 3 semaines" "Aucun" -"Base de données AEMPS" +Base de données AEMPS (Espagne) "Base de données de l'Agence Espagnole des Médicaments et des Produits Sanitaires" "Initialisation..." "À partir d'un QR" diff --git a/Calendula/src/main/res/values-fr/strings_translatable.xml b/Calendula/src/main/res/values-fr/strings_translatable.xml index b96669a7b..7a8ec9ee0 100644 --- a/Calendula/src/main/res/values-fr/strings_translatable.xml +++ b/Calendula/src/main/res/values-fr/strings_translatable.xml @@ -401,7 +401,7 @@ Vous verrez toutes leurs prises sur l'écran d'accueil." "Dans moins de 2 semaines" "Dans moins de 3 semaines" "Aucun" -"Base de données de l'AEMPS" +Base de données de l\'AEMPS (Espagne) "Base de données de l'Agence Espagnole des Médicaments et des Produits Sanitaires" "Initialisation…" "À partir d'un QR" diff --git a/Calendula/src/main/res/values-it/strings_translatable.xml b/Calendula/src/main/res/values-it/strings_translatable.xml index 6d32f2a88..a307e243b 100644 --- a/Calendula/src/main/res/values-it/strings_translatable.xml +++ b/Calendula/src/main/res/values-it/strings_translatable.xml @@ -394,7 +394,7 @@ Potrai vedere tutte le assunzioni nella schermata principale." "In meno di 2 settinane" "In meno di 3 settimane" "Nessuno" -"Database AEMPS" +Database AEMPS (Spagna) "Database dell'Agencia Española de Medicamentos y Productos Sanitarios" "Configurazione…" "Codice QR" diff --git a/Calendula/src/main/res/values/strings_translatable.xml b/Calendula/src/main/res/values/strings_translatable.xml index c941de467..fd93caf7c 100644 --- a/Calendula/src/main/res/values/strings_translatable.xml +++ b/Calendula/src/main/res/values/strings_translatable.xml @@ -395,7 +395,7 @@ You will see all their intakes in the home screen." "In less than 2 weeks" "In less than 3 weeks" "None" -"AEMPS Database" +AEMPS Database (Spain) "Agencia Española de Medicamentos y Productos Sanitarios database" "Setting up…" "From QR" From be83d08d0549c12064a8bba2c460290b2bd802e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Brey?= Date: Tue, 26 Jun 2018 12:50:44 +0200 Subject: [PATCH 04/15] PinLockActivity: make PIN verification a result call as well This removes the responsibility of forwarding to home activity from PinLockActivity, and also enhances reusability. --- .../calendula/activities/StartActivity.java | 44 -------------- .../calendula/activities/StartActivity.kt | 56 +++++++++++++++++ .../calendula/pinlock/PinLockActivity.java | 60 ++++++++++++------- .../settings/privacy/PrivacyPrefsFragment.kt | 1 + .../settings/privacy/PrivacyPrefsPresenter.kt | 2 +- .../privacy/PrivacyPrefsPresenterTest.kt | 2 +- 6 files changed, 97 insertions(+), 68 deletions(-) delete mode 100644 Calendula/src/main/java/es/usc/citius/servando/calendula/activities/StartActivity.java create mode 100644 Calendula/src/main/java/es/usc/citius/servando/calendula/activities/StartActivity.kt diff --git a/Calendula/src/main/java/es/usc/citius/servando/calendula/activities/StartActivity.java b/Calendula/src/main/java/es/usc/citius/servando/calendula/activities/StartActivity.java deleted file mode 100644 index 9494c8712..000000000 --- a/Calendula/src/main/java/es/usc/citius/servando/calendula/activities/StartActivity.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Calendula - An assistant for personal medication management. - * Copyright (C) 2014-2018 CiTIUS - University of Santiago de Compostela - * - * Calendula is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software. If not, see . - */ - -package es.usc.citius.servando.calendula.activities; - - -import android.app.Activity; -import android.content.Intent; -import android.os.Bundle; - -import es.usc.citius.servando.calendula.HomePagerActivity; -import es.usc.citius.servando.calendula.pinlock.PINManager; -import es.usc.citius.servando.calendula.pinlock.PinLockActivity; -import es.usc.citius.servando.calendula.pinlock.UnlockStateManager; - - -public class StartActivity extends Activity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (PINManager.isPINSet() && !UnlockStateManager.getInstance().isUnlocked()) { - startActivity(new Intent(this, PinLockActivity.class)); - } else { - startActivity(new Intent(this, HomePagerActivity.class)); - } - finish(); - } -} diff --git a/Calendula/src/main/java/es/usc/citius/servando/calendula/activities/StartActivity.kt b/Calendula/src/main/java/es/usc/citius/servando/calendula/activities/StartActivity.kt new file mode 100644 index 000000000..435189424 --- /dev/null +++ b/Calendula/src/main/java/es/usc/citius/servando/calendula/activities/StartActivity.kt @@ -0,0 +1,56 @@ +/* + * Calendula - An assistant for personal medication management. + * Copyright (C) 2014-2018 CiTIUS - University of Santiago de Compostela + * + * Calendula is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software. If not, see . + */ + +package es.usc.citius.servando.calendula.activities + + +import android.app.Activity +import android.content.Intent +import android.os.Bundle + +import es.usc.citius.servando.calendula.HomePagerActivity +import es.usc.citius.servando.calendula.pinlock.PINManager +import es.usc.citius.servando.calendula.pinlock.PinLockActivity +import es.usc.citius.servando.calendula.pinlock.UnlockStateManager + + +class StartActivity : Activity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + verifyUnlockAndLaunch() + } + + private fun verifyUnlockAndLaunch() { + if (PINManager.isPINSet() && !UnlockStateManager.getInstance().isUnlocked) { + val i = Intent(this, PinLockActivity::class.java) + i.action = PinLockActivity.ACTION_VERIFY_PIN + startActivityForResult(i, PinLockActivity.REQUEST_VERIFY) + } else { + startActivity(Intent(this, HomePagerActivity::class.java)) + finish() + } + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (requestCode == PinLockActivity.REQUEST_VERIFY) { + verifyUnlockAndLaunch() + } + } +} diff --git a/Calendula/src/main/java/es/usc/citius/servando/calendula/pinlock/PinLockActivity.java b/Calendula/src/main/java/es/usc/citius/servando/calendula/pinlock/PinLockActivity.java index 5cb3a24d6..96d41b17e 100644 --- a/Calendula/src/main/java/es/usc/citius/servando/calendula/pinlock/PinLockActivity.java +++ b/Calendula/src/main/java/es/usc/citius/servando/calendula/pinlock/PinLockActivity.java @@ -57,8 +57,12 @@ public class PinLockActivity extends CalendulaActivity { - public static final String EXTRA_PIN = "PinLockActivity.result"; + public static final String EXTRA_NEW_PIN = "PinLockActivity.newpin.result"; + public static final String EXTRA_VERIFY_PIN_RESULT = "PinLockActivity.verify.result"; + public static final String ACTION_NEW_PIN = "PinLockActivity.action.new_pin"; + public static final String ACTION_VERIFY_PIN = "PinLockActivity.action.verify_pin"; public static final int REQUEST_PIN = 15765; + public static final int REQUEST_VERIFY = 15766; private static final int PIN_SIZE = 4; private static final String TAG = "PinLockActivity"; @@ -148,6 +152,15 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_pin_lock); ButterKnife.bind(this); + if (!isCalledForResult()) { + throw new IllegalStateException("This activity can only be called for result"); + } + + final String action = getIntent().getAction(); + if (action == null) { + throw new IllegalArgumentException("Action required!"); + } + pinInputStateManager = new PinInputStateManager(PIN_SIZE); indicatorDotView.setSize(PIN_SIZE); @@ -176,23 +189,25 @@ public void onPinChange(String currentPin, int pinLength) { android.graphics.PorterDuff.Mode.MULTIPLY); setupStatusBar(ContextCompat.getColor(this, R.color.android_blue_dark)); - if (isCalledForResult()) { - // if called for result we will return a PIN - pinInputStateManager.setPinCompleteListener(new NewPinListener()); - promptMessage.setText(R.string.text_pinlock_new_prompt); - setupToolbar(null, ContextCompat.getColor(this, R.color.android_blue_dark)); - } else { - // if not called for result, we will authorize access - pinInputStateManager.setPinCompleteListener(new AuthorizeAccessListener()); - errorMessage.setVisibility(View.GONE); // indicator shows error - promptMessage.setText(R.string.text_pinlock_auth_prompt); - footer.setVisibility(View.VISIBLE); - toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar); - toolbar.setVisibility(View.GONE); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - setupFingerprintAuth(); - } + + switch (action) { + case ACTION_NEW_PIN: + pinInputStateManager.setPinCompleteListener(new NewPinListener()); + promptMessage.setText(R.string.text_pinlock_new_prompt); + setupToolbar(null, ContextCompat.getColor(this, R.color.android_blue_dark)); + break; + case ACTION_VERIFY_PIN: + pinInputStateManager.setPinCompleteListener(new AuthorizeAccessListener()); + errorMessage.setVisibility(View.GONE); // indicator shows error + promptMessage.setText(R.string.text_pinlock_auth_prompt); + footer.setVisibility(View.VISIBLE); + toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar); + toolbar.setVisibility(View.GONE); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + setupFingerprintAuth(); + } + break; } } @@ -256,7 +271,7 @@ public void run() { if (pin.equals(firstPin)) { // everything's fine, return the PIN Intent returnIntent = new Intent(); - returnIntent.putExtra(EXTRA_PIN, pin); + returnIntent.putExtra(EXTRA_NEW_PIN, pin); setResult(Activity.RESULT_OK, returnIntent); LogUtil.d(TAG, "PIN input correct"); finish(); @@ -291,10 +306,11 @@ public void onComplete(String pin) { boolean checkPIN = PINManager.checkPIN(pin); if (checkPIN) { //PIN is correct, forward to main activity - LogUtil.d(TAG, "PIN is correct, setting unlock and forwarding to main activity"); + LogUtil.d(TAG, "PIN is correct"); + Intent returnIntent = new Intent(); + returnIntent.putExtra(EXTRA_VERIFY_PIN_RESULT, true); + setResult(Activity.RESULT_OK, returnIntent); UnlockStateManager.getInstance().unlock(); - Intent i = new Intent(PinLockActivity.this, StartActivity.class); - startActivity(i); finish(); } else { new Handler().postDelayed(new Runnable() { diff --git a/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsFragment.kt b/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsFragment.kt index 9e5f1370d..9b747916d 100644 --- a/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsFragment.kt +++ b/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsFragment.kt @@ -82,6 +82,7 @@ class PrivacyPrefsFragment : override fun recordPIN() { val i = Intent(activity, PinLockActivity::class.java) + i.action = PinLockActivity.ACTION_NEW_PIN startActivityForResult(i, PinLockActivity.REQUEST_PIN) } diff --git a/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsPresenter.kt b/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsPresenter.kt index 1c271205d..710f81b8d 100644 --- a/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsPresenter.kt +++ b/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsPresenter.kt @@ -50,7 +50,7 @@ class PrivacyPrefsPresenter(val fpHelper: FingerprintHelper) : override fun onResult(request: Int, result: Int, data: Intent?) { LogUtil.d(TAG, "onResult() called with request=$request, result=$result, data=$data") if (request == PinLockActivity.REQUEST_PIN && result == Activity.RESULT_OK && data != null) { - val pin = data.getStringExtra(PinLockActivity.EXTRA_PIN) + val pin = data.getStringExtra(PinLockActivity.EXTRA_NEW_PIN) val pinManagerResult = PINManager.savePIN(pin) if (pinManagerResult) { view.setPINPrefText(R.string.pref_summary_pin_lock_set) diff --git a/Calendula/src/test/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsPresenterTest.kt b/Calendula/src/test/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsPresenterTest.kt index 25fb3d0c0..c0e53552a 100644 --- a/Calendula/src/test/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsPresenterTest.kt +++ b/Calendula/src/test/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsPresenterTest.kt @@ -103,7 +103,7 @@ class PrivacyPrefsPresenterTest { presenter.onResult( PinLockActivity.REQUEST_PIN, Activity.RESULT_OK, - Intent().putExtra(PinLockActivity.EXTRA_PIN, FAKE_PIN) + Intent().putExtra(PinLockActivity.EXTRA_NEW_PIN, FAKE_PIN) ) verify(view).setPINPrefText(kotlinEq(R.string.pref_summary_pin_lock_set)) From 31bfeaa444c6b1fc96d43415215139968b829869 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Brey?= Date: Tue, 26 Jun 2018 12:54:18 +0200 Subject: [PATCH 05/15] PinLockActivity: make the back button undo input if possible --- .../servando/calendula/pinlock/PinLockActivity.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Calendula/src/main/java/es/usc/citius/servando/calendula/pinlock/PinLockActivity.java b/Calendula/src/main/java/es/usc/citius/servando/calendula/pinlock/PinLockActivity.java index 96d41b17e..b9d96a22f 100644 --- a/Calendula/src/main/java/es/usc/citius/servando/calendula/pinlock/PinLockActivity.java +++ b/Calendula/src/main/java/es/usc/citius/servando/calendula/pinlock/PinLockActivity.java @@ -248,6 +248,14 @@ private boolean isCalledForResult() { return calledForResult; } + @Override + public void onBackPressed() { + // delete a number if possible, else go back + if (!pinInputStateManager.delete()) { + super.onBackPressed(); + } + } + private class NewPinListener implements PinInputStateManager.PinInputCompleteListener { private String firstPin; From 4c6b99ad7946d4db2de70a53daabcb0f8bb58f7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Brey?= Date: Tue, 26 Jun 2018 13:08:34 +0200 Subject: [PATCH 06/15] StartActivity: close app if PIN input is canceled --- .../citius/servando/calendula/activities/StartActivity.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Calendula/src/main/java/es/usc/citius/servando/calendula/activities/StartActivity.kt b/Calendula/src/main/java/es/usc/citius/servando/calendula/activities/StartActivity.kt index 435189424..e02283e19 100644 --- a/Calendula/src/main/java/es/usc/citius/servando/calendula/activities/StartActivity.kt +++ b/Calendula/src/main/java/es/usc/citius/servando/calendula/activities/StartActivity.kt @@ -50,7 +50,11 @@ class StartActivity : Activity() { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == PinLockActivity.REQUEST_VERIFY) { - verifyUnlockAndLaunch() + if (resultCode == Activity.RESULT_CANCELED) { + finish() + } else { + verifyUnlockAndLaunch() + } } } } From dbb7993a151ad4e5f0c2e516c258f79ace3fc0b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Brey?= Date: Tue, 26 Jun 2018 13:12:10 +0200 Subject: [PATCH 07/15] Privacy prefs: require PIN confirmation before PIN delete/modify Rel #119 --- .../settings/privacy/PrivacyPrefsContract.kt | 1 + .../settings/privacy/PrivacyPrefsFragment.kt | 6 +++ .../settings/privacy/PrivacyPrefsPresenter.kt | 54 ++++++++++++++----- .../privacy/PrivacyPrefsPresenterTest.kt | 31 +++++++++-- 4 files changed, 77 insertions(+), 15 deletions(-) diff --git a/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsContract.kt b/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsContract.kt index 532b5ae5f..879d35fff 100644 --- a/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsContract.kt +++ b/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsContract.kt @@ -28,6 +28,7 @@ interface PrivacyPrefsContract { interface View : IView { fun recordPIN() + fun verifyPIN(requestCode: Int) fun showPINOptions() fun showConfirmDeletePinChoice() fun setPINPrefText(@StringRes pinPrefText: Int) diff --git a/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsFragment.kt b/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsFragment.kt index 9b747916d..8c0b89baf 100644 --- a/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsFragment.kt +++ b/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsFragment.kt @@ -43,6 +43,7 @@ class PrivacyPrefsFragment : PrivacyPrefsContract.View { + companion object { private const val TAG = "PrivacyPrefsFragment" } @@ -153,5 +154,10 @@ class PrivacyPrefsFragment : // noop } + override fun verifyPIN(requestCode: Int) { + val i = Intent(activity, PinLockActivity::class.java) + i.action = PinLockActivity.ACTION_VERIFY_PIN + startActivityForResult(i, requestCode) + } } \ No newline at end of file diff --git a/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsPresenter.kt b/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsPresenter.kt index 710f81b8d..9e85baf40 100644 --- a/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsPresenter.kt +++ b/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsPresenter.kt @@ -20,6 +20,7 @@ package es.usc.citius.servando.calendula.settings.privacy import android.app.Activity import android.content.Intent +import android.support.annotation.VisibleForTesting import es.usc.citius.servando.calendula.R import es.usc.citius.servando.calendula.mvp.BasePresenter import es.usc.citius.servando.calendula.pinlock.PINManager @@ -34,6 +35,10 @@ class PrivacyPrefsPresenter(val fpHelper: FingerprintHelper) : companion object { private const val TAG = "PrivacyPrefsPresenter" + @VisibleForTesting + const val REQUEST_MODIFY = 12152 + @VisibleForTesting + const val REQUEST_DELETE = 12318 } override fun start() { @@ -47,22 +52,39 @@ class PrivacyPrefsPresenter(val fpHelper: FingerprintHelper) : } } - override fun onResult(request: Int, result: Int, data: Intent?) { - LogUtil.d(TAG, "onResult() called with request=$request, result=$result, data=$data") - if (request == PinLockActivity.REQUEST_PIN && result == Activity.RESULT_OK && data != null) { - val pin = data.getStringExtra(PinLockActivity.EXTRA_NEW_PIN) - val pinManagerResult = PINManager.savePIN(pin) - if (pinManagerResult) { - view.setPINPrefText(R.string.pref_summary_pin_lock_set) - if (fpHelper.canUseFingerPrint()) { - view.setFingerprintPrefEnabled(true) - view.showEnableFingerprintDialog() + override fun onResult(requestCode: Int, result: Int, data: Intent?) { + LogUtil.d( + TAG, + "onResult() called with requestCode=$requestCode, result=$result, data=$data" + ) + + if (result == Activity.RESULT_OK && data != null) { + when (requestCode) { + PinLockActivity.REQUEST_PIN -> { + val pin = data.getStringExtra(PinLockActivity.EXTRA_NEW_PIN) + val pinManagerResult = PINManager.savePIN(pin) + if (pinManagerResult) { + view.setPINPrefText(R.string.pref_summary_pin_lock_set) + if (fpHelper.canUseFingerPrint()) { + view.setFingerprintPrefEnabled(true) + view.showEnableFingerprintDialog() + } + } + } + REQUEST_DELETE -> { + if (data.getBooleanExtra(PinLockActivity.EXTRA_VERIFY_PIN_RESULT, false)) { + deletePIN() + } + } + REQUEST_MODIFY -> { + if (data.getBooleanExtra(PinLockActivity.EXTRA_VERIFY_PIN_RESULT, false)) { + modifyPIN() + } } } } else { LogUtil.w(TAG, "onResult: invalid result or missing data") } - } override fun onClickPINPref() { @@ -78,13 +100,21 @@ class PrivacyPrefsPresenter(val fpHelper: FingerprintHelper) : } override fun confirmDeletePIN() { + view.verifyPIN(REQUEST_DELETE) + } + + override fun onClickModifyPIN() { + view.verifyPIN(REQUEST_MODIFY) + } + + private fun deletePIN() { LogUtil.d(TAG, "confirmDeletePIN: deleting PIN") PINManager.clearPIN() view.setPINPrefText(R.string.pref_summary_pin_lock_unset) view.setFingerprintPrefEnabled(false) } - override fun onClickModifyPIN() { + private fun modifyPIN() { view.recordPIN() } diff --git a/Calendula/src/test/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsPresenterTest.kt b/Calendula/src/test/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsPresenterTest.kt index c0e53552a..4b912c6b4 100644 --- a/Calendula/src/test/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsPresenterTest.kt +++ b/Calendula/src/test/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsPresenterTest.kt @@ -31,6 +31,7 @@ import es.usc.citius.servando.calendula.util.PreferenceUtils import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import org.mockito.ArgumentMatchers import org.mockito.Mock import org.mockito.Mockito import org.mockito.Mockito.* @@ -124,6 +125,31 @@ class PrivacyPrefsPresenterTest { verify(view, never()).showEnableFingerprintDialog() } + @Test + fun onResultValidDelete() { + presenter.onResult( + PrivacyPrefsPresenter.REQUEST_DELETE, + Activity.RESULT_OK, + Intent().putExtra(PinLockActivity.EXTRA_VERIFY_PIN_RESULT, true) + ) + + verify(view).setPINPrefText(kotlinEq(R.string.pref_summary_pin_lock_unset)) + verify(view).setFingerprintPrefEnabled(kotlinEq(false)) + } + + + @Test + fun onResultValidModify() { + presenter.onResult( + PrivacyPrefsPresenter.REQUEST_MODIFY, + Activity.RESULT_OK, + Intent().putExtra(PinLockActivity.EXTRA_VERIFY_PIN_RESULT, true) + ) + + verify(view).recordPIN() + } + + @Test fun onClickPINPrefWithPinSet() { @@ -154,15 +180,14 @@ class PrivacyPrefsPresenterTest { fun confirmDeletePIN() { presenter.confirmDeletePIN() - verify(view).setPINPrefText(kotlinEq(R.string.pref_summary_pin_lock_unset)) - verify(view).setFingerprintPrefEnabled(kotlinEq(false)) + verify(view).verifyPIN(ArgumentMatchers.anyInt()) } @Test fun onClickModifyPIN() { presenter.onClickModifyPIN() - verify(view).recordPIN() + verify(view).verifyPIN(ArgumentMatchers.anyInt()) } } \ No newline at end of file From ac84c394f042eb3f032ea05c459270de44a2ef77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Brey?= Date: Thu, 28 Jun 2018 14:08:25 +0200 Subject: [PATCH 08/15] PinLockActivity: make fingerprint work with the new pin verification model Rel #119 --- .../calendula/pinlock/PinLockActivity.java | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/Calendula/src/main/java/es/usc/citius/servando/calendula/pinlock/PinLockActivity.java b/Calendula/src/main/java/es/usc/citius/servando/calendula/pinlock/PinLockActivity.java index b9d96a22f..89aaea672 100644 --- a/Calendula/src/main/java/es/usc/citius/servando/calendula/pinlock/PinLockActivity.java +++ b/Calendula/src/main/java/es/usc/citius/servando/calendula/pinlock/PinLockActivity.java @@ -129,6 +129,7 @@ void launchFingerprintAuth() { fpHelper.startAuthentication(new LoginFPCallbackAdapter(this, fingerprintDialog)); } + @RequiresApi(Build.VERSION_CODES.M) private void showFingerprintDialog() { fingerprintDialog = new MaterialDialog.Builder(this) .icon(IconUtils.icon(this, CommunityMaterial.Icon.cmd_fingerprint, R.color.android_blue_dark, 48)) @@ -315,11 +316,7 @@ public void onComplete(String pin) { if (checkPIN) { //PIN is correct, forward to main activity LogUtil.d(TAG, "PIN is correct"); - Intent returnIntent = new Intent(); - returnIntent.putExtra(EXTRA_VERIFY_PIN_RESULT, true); - setResult(Activity.RESULT_OK, returnIntent); - UnlockStateManager.getInstance().unlock(); - finish(); + returnVerifiedResult(); } else { new Handler().postDelayed(new Runnable() { @Override @@ -338,13 +335,21 @@ public void run() { } + private void returnVerifiedResult() { + Intent returnIntent = new Intent(); + returnIntent.putExtra(EXTRA_VERIFY_PIN_RESULT, true); + setResult(Activity.RESULT_OK, returnIntent); + UnlockStateManager.getInstance().unlock(); + finish(); + } + private static class LoginFPCallbackAdapter implements FingerprintHelper.FingerprintCallbackAdapter { - private Activity activity; + private PinLockActivity activity; private MaterialDialog fingerprintDialog; - LoginFPCallbackAdapter(Activity activity, MaterialDialog fingerprintDialog) { + LoginFPCallbackAdapter(PinLockActivity activity, MaterialDialog fingerprintDialog) { this.activity = activity; this.fingerprintDialog = fingerprintDialog; } @@ -368,10 +373,15 @@ public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult re fingerprintDialog.setContent(R.string.fingerprint_unlock_dialog_successful_message); fingerprintDialog.setIcon(IconUtils.icon(activity, GoogleMaterial.Icon.gmd_check_circle, R.color.android_green, 48)); } - UnlockStateManager.getInstance().unlock(); - Intent i = new Intent(activity, StartActivity.class); - activity.startActivity(i); - activity.finish(); + + switch (activity.getIntent().getAction()) { + case ACTION_NEW_PIN: + throw new IllegalArgumentException("No fingerprint allowed for new pin recording"); + case ACTION_VERIFY_PIN: + activity.returnVerifiedResult(); + break; + } + } } } From 0d3073a9f0eb02a3812668bdf186752fd752f559 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Brey?= Date: Fri, 29 Jun 2018 13:23:16 +0200 Subject: [PATCH 09/15] Make app lock timeout configurable Rel #119 --- .../calendula/pinlock/UnlockStateManager.java | 10 ++++++++-- .../settings/privacy/PrivacyPrefsContract.kt | 2 +- .../settings/privacy/PrivacyPrefsFragment.kt | 17 +++++++++++++++-- .../settings/privacy/PrivacyPrefsPresenter.kt | 3 +++ .../servando/calendula/util/PreferenceKeys.java | 3 ++- Calendula/src/main/res/values/strings.xml | 15 +++++++++++++++ .../src/main/res/values/strings_preferences.xml | 1 + .../main/res/values/strings_translatable.xml | 5 +++++ Calendula/src/main/res/xml/pref_privacy.xml | 10 ++++++++++ .../privacy/PrivacyPrefsPresenterTest.kt | 8 ++++---- 10 files changed, 64 insertions(+), 10 deletions(-) diff --git a/Calendula/src/main/java/es/usc/citius/servando/calendula/pinlock/UnlockStateManager.java b/Calendula/src/main/java/es/usc/citius/servando/calendula/pinlock/UnlockStateManager.java index 49d4c4e25..58bb31c65 100644 --- a/Calendula/src/main/java/es/usc/citius/servando/calendula/pinlock/UnlockStateManager.java +++ b/Calendula/src/main/java/es/usc/citius/servando/calendula/pinlock/UnlockStateManager.java @@ -22,13 +22,15 @@ import org.joda.time.Duration; import es.usc.citius.servando.calendula.util.LogUtil; +import es.usc.citius.servando.calendula.util.PreferenceKeys; +import es.usc.citius.servando.calendula.util.PreferenceUtils; /** * Utility class to handle unlock state (for PIN lock) */ public class UnlockStateManager { - private final static Duration MAX_UNLOCK_DURATION = Duration.standardMinutes(5); + private final static String DEFAULT_UNLOCK_DURATION_SECONDS = "120"; private final static String TAG = "UnlockStateManager"; private static UnlockStateManager theInstance; private DateTime unlockTimestamp; @@ -76,7 +78,11 @@ public boolean isUnlocked() { LogUtil.v(TAG, "isUnlocked() called"); if (unlockTimestamp != null) { Duration diff = new Duration(unlockTimestamp, DateTime.now()); - if (diff.compareTo(MAX_UNLOCK_DURATION) <= 0) { + // need to be a string to use a ListPreference + final String maxDurationStr = PreferenceUtils.getString(PreferenceKeys.UNLOCK_PIN_TIMEOUT, DEFAULT_UNLOCK_DURATION_SECONDS); + Duration maxDuration = Duration.standardSeconds(Integer.parseInt(maxDurationStr)); + LogUtil.d(TAG, "Max unlock duration is " + maxDuration.toString()); + if (diff.compareTo(maxDuration) <= 0) { LogUtil.d(TAG, "isUnlocked() returned: " + true); return true; } else { diff --git a/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsContract.kt b/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsContract.kt index 879d35fff..df049c06e 100644 --- a/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsContract.kt +++ b/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsContract.kt @@ -33,8 +33,8 @@ interface PrivacyPrefsContract { fun showConfirmDeletePinChoice() fun setPINPrefText(@StringRes pinPrefText: Int) fun setFingerprintPrefEnabled(enabled: Boolean) + fun setPINDependentPrefsEnabled(enabled: Boolean) fun showEnableFingerprintDialog() - } interface Presenter : IPresenter { diff --git a/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsFragment.kt b/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsFragment.kt index 8c0b89baf..8deebd3b1 100644 --- a/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsFragment.kt +++ b/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsFragment.kt @@ -22,6 +22,7 @@ import android.content.Intent import android.content.SharedPreferences import android.os.Bundle import android.support.v14.preference.SwitchPreference +import android.support.v7.preference.ListPreference import android.support.v7.preference.Preference import com.github.javiersantos.materialstyleddialogs.MaterialStyledDialog import com.github.javiersantos.materialstyleddialogs.enums.Style @@ -59,6 +60,7 @@ class PrivacyPrefsFragment : private val pinPref: Preference by lazy { findPreference(PreferenceKeys.UNLOCK_PIN.key()) } private val fingerprintPref: SwitchPreference by lazy { findPreference(PreferenceKeys.FINGERPRINT_ENABLED.key()) as SwitchPreference } + private val pinTimeoutPref: ListPreference by lazy { findPreference(PreferenceKeys.UNLOCK_PIN_TIMEOUT.key()) as ListPreference } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { @@ -69,6 +71,8 @@ class PrivacyPrefsFragment : presenter.onClickPINPref() true } + pinTimeoutPref.summary = pinTimeoutPref.entry + } @@ -78,7 +82,11 @@ class PrivacyPrefsFragment : } override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) { - //noop + when (key) { + pinTimeoutPref.key -> { + pinTimeoutPref.summary = pinTimeoutPref.entry + } + } } override fun recordPIN() { @@ -150,8 +158,13 @@ class PrivacyPrefsFragment : fingerprintPref.isEnabled = enabled } + override fun setPINDependentPrefsEnabled(enabled: Boolean) { + pinTimeoutPref.isEnabled = enabled + } + + override fun showEnableFingerprintDialog() { - // noop + //TODO } override fun verifyPIN(requestCode: Int) { diff --git a/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsPresenter.kt b/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsPresenter.kt index 9e85baf40..291e70822 100644 --- a/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsPresenter.kt +++ b/Calendula/src/main/java/es/usc/citius/servando/calendula/settings/privacy/PrivacyPrefsPresenter.kt @@ -47,6 +47,7 @@ class PrivacyPrefsPresenter(val fpHelper: FingerprintHelper) : if (fpHelper.canUseFingerPrint()) { view.setFingerprintPrefEnabled(true) } + view.setPINDependentPrefsEnabled(true) } else { view.setPINPrefText(R.string.pref_summary_pin_lock_unset) } @@ -69,6 +70,7 @@ class PrivacyPrefsPresenter(val fpHelper: FingerprintHelper) : view.setFingerprintPrefEnabled(true) view.showEnableFingerprintDialog() } + view.setPINDependentPrefsEnabled(true) } } REQUEST_DELETE -> { @@ -112,6 +114,7 @@ class PrivacyPrefsPresenter(val fpHelper: FingerprintHelper) : PINManager.clearPIN() view.setPINPrefText(R.string.pref_summary_pin_lock_unset) view.setFingerprintPrefEnabled(false) + view.setPINDependentPrefsEnabled(false) } private fun modifyPIN() { diff --git a/Calendula/src/main/java/es/usc/citius/servando/calendula/util/PreferenceKeys.java b/Calendula/src/main/java/es/usc/citius/servando/calendula/util/PreferenceKeys.java index c59b602f7..c48742b68 100644 --- a/Calendula/src/main/java/es/usc/citius/servando/calendula/util/PreferenceKeys.java +++ b/Calendula/src/main/java/es/usc/citius/servando/calendula/util/PreferenceKeys.java @@ -76,7 +76,8 @@ public enum PreferenceKeys { UNLOCK_PIN(R.string.prefkey_pin_lock), UNLOCK_PIN_HASH(R.string.prefkey_unlock_pin_hash), UNLOCK_PIN_SALT(R.string.prefkey_unlock_pin_salt), - FINGERPRINT_ENABLED(R.string.prefkey_fingerprint_enabled); + FINGERPRINT_ENABLED(R.string.prefkey_fingerprint_enabled), + UNLOCK_PIN_TIMEOUT(R.string.prefkey_pin_timeout); @StringRes private final int stringId; diff --git a/Calendula/src/main/res/values/strings.xml b/Calendula/src/main/res/values/strings.xml index 877a65b17..b443c814e 100644 --- a/Calendula/src/main/res/values/strings.xml +++ b/Calendula/src/main/res/values/strings.xml @@ -173,4 +173,19 @@ @string/calendar_pickup_reminder_three_days_before + + @string/pref_lock_30s + @string/pref_lock_1m + @string/pref_lock_2m + @string/pref_lock_5m + + + + 30 + 60 + 120 + 300 + + + diff --git a/Calendula/src/main/res/values/strings_preferences.xml b/Calendula/src/main/res/values/strings_preferences.xml index e76e9255c..01db9e37b 100644 --- a/Calendula/src/main/res/values/strings_preferences.xml +++ b/Calendula/src/main/res/values/strings_preferences.xml @@ -76,5 +76,6 @@ unlock_pin_hash unlock_pin_salt fingerprint_enabled + pref_pin_timeout diff --git a/Calendula/src/main/res/values/strings_translatable.xml b/Calendula/src/main/res/values/strings_translatable.xml index fd93caf7c..1adfdedd6 100644 --- a/Calendula/src/main/res/values/strings_translatable.xml +++ b/Calendula/src/main/res/values/strings_translatable.xml @@ -517,4 +517,9 @@ Do you want to install the new database now? "Generic" "Taken" + "Lock after" + "30 seconds" + "1 minute" + "2 minutes" + "5 minutes" \ No newline at end of file diff --git a/Calendula/src/main/res/xml/pref_privacy.xml b/Calendula/src/main/res/xml/pref_privacy.xml index bde8263a0..be19c2728 100644 --- a/Calendula/src/main/res/xml/pref_privacy.xml +++ b/Calendula/src/main/res/xml/pref_privacy.xml @@ -23,6 +23,16 @@ android:summary="@string/pref_summary_pin_lock_unset" android:title="@string/pref_title_pin_lock"/> + + Date: Fri, 29 Jun 2018 14:14:52 +0200 Subject: [PATCH 10/15] Make PIN timeout actually work * PIN lock timeout was only enforced if the app was open from the drawer (going through StartActivity) * Add timeout check on OnResume for activities extending CalendulaActivity * Timeout will now be strongly enforced, whether navigating through the app or opening from recents or notification. Rel #119 --- .../servando/calendula/CalendulaActivity.java | 18 ++++++++++++++++++ .../calendula/activities/StartActivity.kt | 10 +++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/Calendula/src/main/java/es/usc/citius/servando/calendula/CalendulaActivity.java b/Calendula/src/main/java/es/usc/citius/servando/calendula/CalendulaActivity.java index dc8ae004c..7a359519d 100644 --- a/Calendula/src/main/java/es/usc/citius/servando/calendula/CalendulaActivity.java +++ b/Calendula/src/main/java/es/usc/citius/servando/calendula/CalendulaActivity.java @@ -21,6 +21,7 @@ import android.annotation.SuppressLint; import android.app.AlertDialog; import android.content.DialogInterface; +import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Color; import android.graphics.drawable.Drawable; @@ -38,6 +39,11 @@ import java.util.HashMap; import java.util.Map; +import es.usc.citius.servando.calendula.activities.StartActivity; +import es.usc.citius.servando.calendula.pinlock.PINManager; +import es.usc.citius.servando.calendula.pinlock.PinLockActivity; +import es.usc.citius.servando.calendula.pinlock.UnlockStateManager; +import es.usc.citius.servando.calendula.util.LogUtil; import es.usc.citius.servando.calendula.util.PermissionUtils; import es.usc.citius.servando.calendula.util.ScreenUtils; @@ -177,4 +183,16 @@ public void onClick(DialogInterface dialog, int id) { alert.show(); } + @Override + protected void onResume() { + super.onResume(); + if (PINManager.isPINSet() && !UnlockStateManager.getInstance().isUnlocked() && !(this instanceof PinLockActivity)) { + // If we get unlock timeout on resume, we'll call StartActivity to ask for a PIN + LogUtil.d("CalendulaActivity", "Unlock has expired"); + final Intent i = new Intent(this, StartActivity.class); + i.putExtra(StartActivity.EXTRA_RETURN_TO_PREVIOUS, true); + //i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(i); + } + } } diff --git a/Calendula/src/main/java/es/usc/citius/servando/calendula/activities/StartActivity.kt b/Calendula/src/main/java/es/usc/citius/servando/calendula/activities/StartActivity.kt index e02283e19..d3dc1a895 100644 --- a/Calendula/src/main/java/es/usc/citius/servando/calendula/activities/StartActivity.kt +++ b/Calendula/src/main/java/es/usc/citius/servando/calendula/activities/StartActivity.kt @@ -31,6 +31,10 @@ import es.usc.citius.servando.calendula.pinlock.UnlockStateManager class StartActivity : Activity() { + companion object { + const val EXTRA_RETURN_TO_PREVIOUS = "StartActivity.extras.return_to_previous" + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) verifyUnlockAndLaunch() @@ -42,7 +46,11 @@ class StartActivity : Activity() { i.action = PinLockActivity.ACTION_VERIFY_PIN startActivityForResult(i, PinLockActivity.REQUEST_VERIFY) } else { - startActivity(Intent(this, HomePagerActivity::class.java)) + val returnToPrevious = intent.getBooleanExtra(EXTRA_RETURN_TO_PREVIOUS,false) + if (!returnToPrevious) { + // if "return to previous" is specified, just finish this activity to go back in the stack + startActivity(Intent(this, HomePagerActivity::class.java)) + } finish() } } From d7900782870417ba9c3e8a83c168ac1d1ba52c9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Brey?= Date: Thu, 12 Jul 2018 17:20:22 +0200 Subject: [PATCH 11/15] circle.yml: disable coverage report for now --- circle.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/circle.yml b/circle.yml index 0c28b2efa..c73996f2d 100644 --- a/circle.yml +++ b/circle.yml @@ -48,14 +48,14 @@ jobs: # - run: # name: Run Integration Tests # command: ./gradlew connectedCiDebugAndroidTest --no-daemon - - run: - name: Generate Coverage Report - command: ./gradlew jacocoTestReportCiDebug --no-daemon - - store_artifacts: - path: Calendula/build/reports/ - destination: reports - - run: - name: Report coverage - command: | - wget 'https://oss.sonatype.org/service/local/repositories/releases/content/com/codacy/codacy-coverage-reporter/2.0.2/codacy-coverage-reporter-2.0.2-assembly.jar' -O coverage-reporter.jar - java -cp coverage-reporter.jar com.codacy.CodacyCoverageReporter -l Java -r Calendula/build/reports/jacoco/ciDebug/jacoco.xml +# - run: +# name: Generate Coverage Report +# command: ./gradlew jacocoTestReportCiDebug --no-daemon +# - store_artifacts: +# path: Calendula/build/reports/ +# destination: reports +# - run: +# name: Report coverage +# command: | +# wget 'https://oss.sonatype.org/service/local/repositories/releases/content/com/codacy/codacy-coverage-reporter/2.0.2/codacy-coverage-reporter-2.0.2-assembly.jar' -O coverage-reporter.jar +# java -cp coverage-reporter.jar com.codacy.CodacyCoverageReporter -l Java -r Calendula/build/reports/jacoco/ciDebug/jacoco.xml From 07b19194c9f575798660895a737086fae1a1cd7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Brey?= Date: Fri, 13 Jul 2018 10:14:54 +0200 Subject: [PATCH 12/15] CONTRIBUTING: translations PRs should be done to the translation branch --- CONTRIBUTING.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 54d61be73..59137eb8f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -38,15 +38,15 @@ Non-code contributions are also welcome!. You can do a lot of things: > Join the BETA channel: [click here!](https://play.google.com/apps/testing/es.usc.citius.servando.calendula) - ### Help with app translations + Contributing translations is now easier than ever! Just join us at POEditor using [this link](https://poeditor.com/join/project/kIdyqFodDn) and start translating Calendula to one of the existing languages, or suggest a new one. **This is the recommended method for translations**. You can also contribute with better translations for particular words or sentences. Alternatively, you can contribute translations via pull request: - * Add a new folder named `values-{LANG}/` at `Calendula/src/main/res/` - * Translate the `strings_translatable.xml` file from `values` to your desired language. - * Send a pull request. +* Add a new folder named `values-{LANG}/` at `Calendula/src/main/res/`. +* Translate the `strings_translatable.xml` file from `Calendula/src/main/res/values` to your desired language. +* Send a pull request to the `translations` branch. You can also improve an existing `strings_translatable.xml` file and make a PR with that! From 64c02da88ad39e9e48a812b80b15c6b153c825ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Brey?= Date: Tue, 17 Jul 2018 12:31:57 +0200 Subject: [PATCH 13/15] strings: add a proper set of duration names for future use --- .../src/main/res/values/strings_translatable.xml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Calendula/src/main/res/values/strings_translatable.xml b/Calendula/src/main/res/values/strings_translatable.xml index 1adfdedd6..7b09c882b 100644 --- a/Calendula/src/main/res/values/strings_translatable.xml +++ b/Calendula/src/main/res/values/strings_translatable.xml @@ -186,7 +186,6 @@ Please carefully read the leaflet or ask your pharmacist before you get behind t "weeks" "months" "Show calendar" -"hours" "Please, select a schedule type to keep on creating the schedule" "Routine schedule" "Dosing interval" @@ -522,4 +521,18 @@ Do you want to install the new database now? "1 minute" "2 minutes" "5 minutes" + second + seconds + minute + minutes + hour + hours + day + days + week + weeks + month + months + year + years \ No newline at end of file From c9cdde9fc4bfa38b7a440ec72ed5e4d9b3ec35f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Brey?= Date: Tue, 17 Jul 2018 12:43:54 +0200 Subject: [PATCH 14/15] Translations: Squashed commit of the following: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit 65c0126e38dd6c6ad074b067acf50c5ede013af0 Author: Calendula Bot Date: Tue Jul 17 12:42:36 2018 +0200 Update strings_translatable.xml (POEditor.com) commit d7d2b815c92acf15ddff8c1d29d30ac79105333c Author: Calendula Bot Date: Tue Jul 17 12:42:33 2018 +0200 Update strings_translatable.xml (POEditor.com) commit d35b360a6d5453cefe6cb9b3c5d2723f6d47f929 Author: Calendula Bot Date: Tue Jul 17 12:42:31 2018 +0200 Update strings_translatable.xml (POEditor.com) commit 4c89546958180fefaa37c19c023aaf5a7d2f0482 Author: Calendula Bot Date: Tue Jul 17 12:42:28 2018 +0200 Update strings_translatable.xml (POEditor.com) commit f968a917812e8cba8be3935df765e7ea65e97cc4 Author: Calendula Bot Date: Tue Jul 17 12:42:26 2018 +0200 Update strings_translatable.xml (POEditor.com) commit 1fbc79b33fcea13c9343e849047e1924c2c113d6 Author: Calendula Bot Date: Tue Jul 17 12:42:24 2018 +0200 Update strings_translatable.xml (POEditor.com) commit ee6f7d222b893295c0d8aba51b127aafd19458dc Author: Calendula Bot Date: Tue Jul 17 12:37:34 2018 +0200 Update strings_translatable.xml (POEditor.com) commit b514f620feb156bc21104dd58c6a3ed66bb9032a Author: Calendula Bot Date: Tue Jul 17 12:37:31 2018 +0200 Update strings_translatable.xml (POEditor.com) commit 321926563055026efcbb303c3c7c3aa3182db8b3 Author: Calendula Bot Date: Tue Jul 17 12:37:29 2018 +0200 Update strings_translatable.xml (POEditor.com) commit 858d45580bb7207a7da96812b97e7099435bba75 Author: Calendula Bot Date: Tue Jul 17 12:37:27 2018 +0200 Update strings_translatable.xml (POEditor.com) commit d83d720feb6dc3f25d993d13caf1aa52ccca7412 Author: Calendula Bot Date: Tue Jul 17 12:37:24 2018 +0200 Update strings_translatable.xml (POEditor.com) commit 9579a7fff9d5810760cc97a9d6c2dfbfc9596c9a Author: Calendula Bot Date: Tue Jul 17 12:37:22 2018 +0200 Update strings_translatable.xml (POEditor.com) commit cdaa96c83b9848341254e6e5d7b6a20fb9354818 Author: Calendula Bot Date: Tue Jul 17 12:37:20 2018 +0200 Update strings_translatable.xml (POEditor.com) commit b67a7839de809fd7ea4e9f5406c1c6b21e24ae71 Author: Calendula Bot Date: Tue Jul 17 12:37:17 2018 +0200 Update strings_translatable.xml (POEditor.com) commit c6d152da47f83cae2d0f8ff589d0c5d381fb4b29 Merge: 7e67298 64c02da Author: Álvaro Brey Date: Tue Jul 17 12:34:06 2018 +0200 Merge branch 'develop' into translations * develop: strings: add a proper set of duration names for future use CONTRIBUTING: translations PRs should be done to the translation branch circle.yml: disable coverage report for now Make PIN timeout actually work Make app lock timeout configurable PinLockActivity: make fingerprint work with the new pin verification model Privacy prefs: require PIN confirmation before PIN delete/modify StartActivity: close app if PIN input is canceled PinLockActivity: make the back button undo input if possible PinLockActivity: make PIN verification a result call as well Display that AEMPS database is from Spain. Update kotlin version to 1.2.50 Update gradle plugin to 3.1.3 Bump version for release 2.5.5 Update translations. commit 7e672981b1cc8407c6f91559f36c4506d5f815d9 Author: Heimen Stoffels Date: Wed Jul 11 19:04:06 2018 +0200 Added Dutch translation commit cb77d396db52e3a819b2ab64821864f35f022251 Author: Heimen Stoffels Date: Wed Jul 11 19:02:54 2018 +0200 Added Dutch translation commit dd0baa6ca2d0cc20cfe7866696cfa688475d7ee8 Author: lambiase Date: Thu Jul 12 17:13:07 2018 +0200 Fix typos in Italian translation (#124) * Italian translation - first commit * Italian translation - till line 268 * Completed Italian translation * Update translations. Squashed commit of the following: commit b3659dd80ec5cfd03e1921cd91ba1b79aea661e4 Author: Calendula Bot Date: Fri May 11 16:04:59 2018 +0200 Update strings_translatable.xml (POEditor.com) commit 67bbc7eb65f60f010ed428b5660db17b76f80439 Author: Calendula Bot Date: Fri May 11 16:04:57 2018 +0200 Update strings_translatable.xml (POEditor.com) commit 1e9addfdb3afb555094ae0c1ae4b3c9f9dc8b1e5 Author: Calendula Bot Date: Fri May 11 16:04:55 2018 +0200 Update strings_translatable.xml (POEditor.com) commit 1f22a15bb06f88bd4965775df8ae88ab54888534 Author: Calendula Bot Date: Fri May 11 16:04:52 2018 +0200 Update strings_translatable.xml (POEditor.com) commit b74b73b2a97b63c2049310fb6cdf1232aaec6e1d Author: Calendula Bot Date: Fri May 11 16:04:50 2018 +0200 Update strings_translatable.xml (POEditor.com) commit 48bbe9da921945f31863140ea01240a5403cafcf Author: Calendula Bot Date: Fri May 11 16:04:48 2018 +0200 Update strings_translatable.xml (POEditor.com) commit 9e353376124ea2d7af904f04b1de7f7385f2c8e2 Author: Calendula Bot Date: Fri May 11 16:04:45 2018 +0200 Update strings_translatable.xml (POEditor.com) commit fb71365440392034f03ddd3d69ed1572b97ee9a4 Author: Calendula Bot Date: Fri May 11 16:04:43 2018 +0200 Update strings_translatable.xml (POEditor.com) commit b80f86fbc16bf13dc6e1c0011ce148b485ca9f8d Merge: c25ae22 bf38361 Author: Álvaro Brey Date: Fri May 11 15:58:42 2018 +0200 Merge branch 'develop' into translations * develop: build: update Gradle plugin to 3.1.2 build: update Kotlin version to 1.2.40 Support adaptive icons StockDisplayUtils: solve some compilation warnings MedicineItem: fix missing string for stock info under some cases Update build tools versions build: Update Gradle plugin and dist PickupNotification: unwrap useless version checks build: Prepend project name to APK name commit c25ae226cfe18320dc9b135a6d1c87b7f9565393 Merge: 9075f33 f1315ca Author: Álvaro Brey Date: Mon Apr 2 12:11:59 2018 +0200 Merge branch 'develop' into translations * develop: Italian translation (#105) Translations: Squashed commit of the following: commit 9075f333c617779e66f5a2faba161b3d6105c9be Author: Calendula Bot Date: Tue Mar 27 10:43:16 2018 +0200 Update strings_translatable.xml (POEditor.com) commit f9373081c903e369f298b61578f268e4446f8f93 Author: Calendula Bot Date: Tue Mar 27 10:42:10 2018 +0200 Update strings_translatable.xml (POEditor.com) commit a044773e59ae8a2679c0541400552950a10be06b Author: Calendula Bot Date: Tue Mar 27 10:42:08 2018 +0200 Update strings_translatable.xml (POEditor.com) commit 7e805216c5898d8460ba575ab1db8f378a1fdeb8 Author: Calendula Bot Date: Tue Mar 27 10:42:05 2018 +0200 Update strings_translatable.xml (POEditor.com) commit 8d0274c66a4655f17e525972f1409bc208a0237c Author: Calendula Bot Date: Tue Mar 27 10:42:03 2018 +0200 Update strings_translatable.xml (POEditor.com) commit ea3e883c4a35f37bffc173a065fb9519d52b9c15 Author: Calendula Bot Date: Tue Mar 27 10:42:01 2018 +0200 Update strings_translatable.xml (POEditor.com) commit f0f21333117f2adf924a74d4771d559b8b5db698 Author: Calendula Bot Date: Tue Mar 27 10:41:58 2018 +0200 Update strings_translatable.xml (POEditor.com) commit c30acfda377d403c4b7b6edc91bd2548c3f70da8 Author: Calendula Bot Date: Tue Mar 27 10:41:56 2018 +0200 Update strings_translatable.xml (POEditor.com) commit 5e783ac08fa1cc995178d4211ac42538fee03048 Author: Álvaro Brey Date: Tue Mar 27 10:39:53 2018 +0200 Add stub strings for AU region in order to be able to export them from POEditor commit 994a44f57176cfa4d8c12d6758061a5e8f585df2 Merge: aff7658 5860405 Author: Álvaro Brey Date: Tue Mar 27 10:31:44 2018 +0200 Merge branch 'develop' into translations * develop: Notification: use 'taken' instead of 'take' to better reflect user action commit aff7658fb7fea56885453cabd8d08a4126efad67 Merge: c77f122 3b15fd6 Author: Álvaro Brey Date: Tue Mar 27 10:21:48 2018 +0200 Merge branch 'develop' into translations * develop: Add keystore.properties symlink for easier management Remove med alerts before removing med RoutineCreateOrEditFrag: Force using RadialTimePicker with SDK<21 MedicinesActivity: don't wait for layout inflation before starting search MedicinesActivity: avoid re-launching search activity when this activity is GCd Schedules: Don't show pill dose pickers for presentations other than pills Add icon asset folder link to the contributing guidelines Add drug presentation icon sources to the repo MedicineCreateOrEditFragm: don't hardcode tag for presentations Fix medicine activity tests with new presentation layout Presentation: simplify icon retrieval Add new medicine presentations. Fixes #54 and #98 Properly format 24h times Add default strings for new presentations build: update Kotlin version to 1.2.30 build: Update versionCode and versionName Update versionCode and versionName for 2.5.3 release Update translations commit c77f122a8f9fbd3a6c97fae5117d6a0c864876ca Author: Calendula Bot Date: Tue Mar 6 10:29:22 2018 +0100 Update strings_translatable.xml (POEditor.com) commit e0ae955583c3f1425fba4d5f6750a16a156f9c75 Author: Calendula Bot Date: Tue Mar 6 10:29:19 2018 +0100 Update strings_translatable.xml (POEditor.com) commit c6744b3cfef175a43d60a5d653ce667e705c13ab Author: Calendula Bot Date: Tue Mar 6 10:29:17 2018 +0100 Update strings_translatable.xml (POEditor.com) commit 561879a62a9015c44799140cd17a7b03ecc48415 Author: Calendula Bot Date: Tue Mar 6 10:29:14 2018 +0100 Update strings_translatable.xml (POEditor.com) * Bump version for release 2.5.5 * Fix typos in Italian translation * Escape double quote in Italian translation * Undo changes to build.gradle commit b3659dd80ec5cfd03e1921cd91ba1b79aea661e4 Author: Calendula Bot Date: Fri May 11 16:04:59 2018 +0200 Update strings_translatable.xml (POEditor.com) commit 67bbc7eb65f60f010ed428b5660db17b76f80439 Author: Calendula Bot Date: Fri May 11 16:04:57 2018 +0200 Update strings_translatable.xml (POEditor.com) commit 1e9addfdb3afb555094ae0c1ae4b3c9f9dc8b1e5 Author: Calendula Bot Date: Fri May 11 16:04:55 2018 +0200 Update strings_translatable.xml (POEditor.com) commit 1f22a15bb06f88bd4965775df8ae88ab54888534 Author: Calendula Bot Date: Fri May 11 16:04:52 2018 +0200 Update strings_translatable.xml (POEditor.com) commit b74b73b2a97b63c2049310fb6cdf1232aaec6e1d Author: Calendula Bot Date: Fri May 11 16:04:50 2018 +0200 Update strings_translatable.xml (POEditor.com) commit 48bbe9da921945f31863140ea01240a5403cafcf Author: Calendula Bot Date: Fri May 11 16:04:48 2018 +0200 Update strings_translatable.xml (POEditor.com) commit 9e353376124ea2d7af904f04b1de7f7385f2c8e2 Author: Calendula Bot Date: Fri May 11 16:04:45 2018 +0200 Update strings_translatable.xml (POEditor.com) commit fb71365440392034f03ddd3d69ed1572b97ee9a4 Author: Calendula Bot Date: Fri May 11 16:04:43 2018 +0200 Update strings_translatable.xml (POEditor.com) commit b80f86fbc16bf13dc6e1c0011ce148b485ca9f8d Merge: c25ae22 bf38361 Author: Álvaro Brey Date: Fri May 11 15:58:42 2018 +0200 Merge branch 'develop' into translations * develop: build: update Gradle plugin to 3.1.2 build: update Kotlin version to 1.2.40 Support adaptive icons StockDisplayUtils: solve some compilation warnings MedicineItem: fix missing string for stock info under some cases Update build tools versions build: Update Gradle plugin and dist PickupNotification: unwrap useless version checks build: Prepend project name to APK name commit c25ae226cfe18320dc9b135a6d1c87b7f9565393 Merge: 9075f33 f1315ca Author: Álvaro Brey Date: Mon Apr 2 12:11:59 2018 +0200 Merge branch 'develop' into translations * develop: Italian translation (#105) Translations: Squashed commit of the following: commit 9075f333c617779e66f5a2faba161b3d6105c9be Author: Calendula Bot Date: Tue Mar 27 10:43:16 2018 +0200 Update strings_translatable.xml (POEditor.com) commit f9373081c903e369f298b61578f268e4446f8f93 Author: Calendula Bot Date: Tue Mar 27 10:42:10 2018 +0200 Update strings_translatable.xml (POEditor.com) commit a044773e59ae8a2679c0541400552950a10be06b Author: Calendula Bot Date: Tue Mar 27 10:42:08 2018 +0200 Update strings_translatable.xml (POEditor.com) commit 7e805216c5898d8460ba575ab1db8f378a1fdeb8 Author: Calendula Bot Date: Tue Mar 27 10:42:05 2018 +0200 Update strings_translatable.xml (POEditor.com) commit 8d0274c66a4655f17e525972f1409bc208a0237c Author: Calendula Bot Date: Tue Mar 27 10:42:03 2018 +0200 Update strings_translatable.xml (POEditor.com) commit ea3e883c4a35f37bffc173a065fb9519d52b9c15 Author: Calendula Bot Date: Tue Mar 27 10:42:01 2018 +0200 Update strings_translatable.xml (POEditor.com) commit f0f21333117f2adf924a74d4771d559b8b5db698 Author: Calendula Bot Date: Tue Mar 27 10:41:58 2018 +0200 Update strings_translatable.xml (POEditor.com) commit c30acfda377d403c4b7b6edc91bd2548c3f70da8 Author: Calendula Bot Date: Tue Mar 27 10:41:56 2018 +0200 Update strings_translatable.xml (POEditor.com) commit 5e783ac08fa1cc995178d4211ac42538fee03048 Author: Álvaro Brey Date: Tue Mar 27 10:39:53 2018 +0200 Add stub strings for AU region in order to be able to export them from POEditor commit 994a44f57176cfa4d8c12d6758061a5e8f585df2 Merge: aff7658 5860405 Author: Álvaro Brey Date: Tue Mar 27 10:31:44 2018 +0200 Merge branch 'develop' into translations * develop: Notification: use 'taken' instead of 'take' to better reflect user action commit aff7658fb7fea56885453cabd8d08a4126efad67 Merge: c77f122 3b15fd6 Author: Álvaro Brey Date: Tue Mar 27 10:21:48 2018 +0200 Merge branch 'develop' into translations * develop: Add keystore.properties symlink for easier management Remove med alerts before removing med RoutineCreateOrEditFrag: Force using RadialTimePicker with SDK<21 MedicinesActivity: don't wait for layout inflation before starting search MedicinesActivity: avoid re-launching search activity when this activity is GCd Schedules: Don't show pill dose pickers for presentations other than pills Add icon asset folder link to the contributing guidelines Add drug presentation icon sources to the repo MedicineCreateOrEditFragm: don't hardcode tag for presentations Fix medicine activity tests with new presentation layout Presentation: simplify icon retrieval Add new medicine presentations. Fixes #54 and #98 Properly format 24h times Add default strings for new presentations build: update Kotlin version to 1.2.30 build: Update versionCode and versionName Update versionCode and versionName for 2.5.3 release Update translations commit c77f122a8f9fbd3a6c97fae5117d6a0c864876ca Author: Calendula Bot Date: Tue Mar 6 10:29:22 2018 +0100 Update strings_translatable.xml (POEditor.com) commit e0ae955583c3f1425fba4d5f6750a16a156f9c75 Author: Calendula Bot Date: Tue Mar 6 10:29:19 2018 +0100 Update strings_translatable.xml (POEditor.com) commit c6744b3cfef175a43d60a5d653ce667e705c13ab Author: Calendula Bot Date: Tue Mar 6 10:29:17 2018 +0100 Update strings_translatable.xml (POEditor.com) commit 561879a62a9015c44799140cd17a7b03ecc48415 Author: Calendula Bot Date: Tue Mar 6 10:29:14 2018 +0100 Update strings_translatable.xml (POEditor.com) --- .../res/values-de/strings_translatable.xml | 4 +- .../res/values-es/strings_translatable.xml | 18 + .../values-fr-rCH/strings_translatable.xml | 4 +- .../res/values-fr/strings_translatable.xml | 4 +- .../values-gl-rES/strings_translatable.xml | 18 + .../res/values-it/strings_translatable.xml | 20 +- .../res/values-nl/strings_translatable.xml | 522 ++++++++++++++++++ .../main/res/values/strings_translatable.xml | 42 +- metadata/nl/full_description.txt | 33 ++ metadata/nl/short_description.txt | 1 + 10 files changed, 633 insertions(+), 33 deletions(-) create mode 100644 Calendula/src/main/res/values-nl/strings_translatable.xml create mode 100644 metadata/nl/full_description.txt create mode 100644 metadata/nl/short_description.txt diff --git a/Calendula/src/main/res/values-de/strings_translatable.xml b/Calendula/src/main/res/values-de/strings_translatable.xml index b63f3a67a..fa85fcdf5 100644 --- a/Calendula/src/main/res/values-de/strings_translatable.xml +++ b/Calendula/src/main/res/values-de/strings_translatable.xml @@ -396,7 +396,9 @@ Sie werden alle ihre Einnahmen auf dem Startbildschirm sehen." "In weniger als 2 Wochen" "In weniger als 3 Wochen" "Keine" -AEMPS Datenbank (Spanien) + + +"AEMPS Datenbank (Spanien)" "Agencia Española de Medicamentos y Productos Sanitarios Datenbank" "Einrichtung läuft..." "Von QR-Code" diff --git a/Calendula/src/main/res/values-es/strings_translatable.xml b/Calendula/src/main/res/values-es/strings_translatable.xml index 573557a51..bf10bfad3 100644 --- a/Calendula/src/main/res/values-es/strings_translatable.xml +++ b/Calendula/src/main/res/values-es/strings_translatable.xml @@ -518,4 +518,22 @@ Quieres instalar la nueva base de datos ahora?" "Genérico" "Tomado" +"Bloquear después de" +"30 segundos" +"1 minuto" +"2 minutos" +"5 minutos" +"segundo" +"segundos" +"minuto" +"minutes" +"hora" +"día" +"días" +"semana" +"semanas" +"mes" +"meses" +"año" +"años" \ No newline at end of file diff --git a/Calendula/src/main/res/values-fr-rCH/strings_translatable.xml b/Calendula/src/main/res/values-fr-rCH/strings_translatable.xml index 0c7c53f35..29865730b 100644 --- a/Calendula/src/main/res/values-fr-rCH/strings_translatable.xml +++ b/Calendula/src/main/res/values-fr-rCH/strings_translatable.xml @@ -396,7 +396,9 @@ Vous verrez toutes leurs prises sur l'écran d'accueil." "Dans moins de 2 semaines" "Dans moins de 3 semaines" "Aucun" -Base de données AEMPS (Espagne) + + +"Base de données AEMPS (Espagne)" "Base de données de l'Agence Espagnole des Médicaments et des Produits Sanitaires" "Initialisation..." "À partir d'un QR" diff --git a/Calendula/src/main/res/values-fr/strings_translatable.xml b/Calendula/src/main/res/values-fr/strings_translatable.xml index 7a8ec9ee0..fe5d28d44 100644 --- a/Calendula/src/main/res/values-fr/strings_translatable.xml +++ b/Calendula/src/main/res/values-fr/strings_translatable.xml @@ -401,7 +401,9 @@ Vous verrez toutes leurs prises sur l'écran d'accueil." "Dans moins de 2 semaines" "Dans moins de 3 semaines" "Aucun" -Base de données de l\'AEMPS (Espagne) + + +"Base de données de l'AEMPS (Espagne)" "Base de données de l'Agence Espagnole des Médicaments et des Produits Sanitaires" "Initialisation…" "À partir d'un QR" diff --git a/Calendula/src/main/res/values-gl-rES/strings_translatable.xml b/Calendula/src/main/res/values-gl-rES/strings_translatable.xml index 7d5374d99..8ff733ca6 100644 --- a/Calendula/src/main/res/values-gl-rES/strings_translatable.xml +++ b/Calendula/src/main/res/values-gl-rES/strings_translatable.xml @@ -519,4 +519,22 @@ Queres instalar a nova base de datos agora?" "Xenérico" "Tomado" +"Bloquear despois de" +"30 segundos" +"1 minuto" +"2 minutos" +"5 minutos" +"segundo" +"segundos" +"minuto" +"minutos" +"hora" +"día" +"días" +"semana" +"semanas" +"mes" +"meses" +"ano" +"anos" \ No newline at end of file diff --git a/Calendula/src/main/res/values-it/strings_translatable.xml b/Calendula/src/main/res/values-it/strings_translatable.xml index a307e243b..ed0f4de5c 100644 --- a/Calendula/src/main/res/values-it/strings_translatable.xml +++ b/Calendula/src/main/res/values-it/strings_translatable.xml @@ -147,7 +147,7 @@ "Non ancora selezionato" "Seleziona una presentazione" "Capito" -"L'allarme verrà ripeturo alle %1$s" +"L'allarme verrà ripetuto alle %1$s" "Cancella ora" "Ritarda" "Allarme ritardato di %1$s minuti" @@ -213,7 +213,7 @@ "Seleziona prima una medicina" "Pazienti" "Stai per creare un trattamento. Scegli quello più adatto alle tue esigenze!" -"Questo tipo di trattamento ti permette di collegare le assunzioni alle tue routine. Ad esempio: \"Ogni giorno a colazione e cena, escludendo le domeniche, oppure \"Ogni 3 giorni, a pranzo.\"" +"Questo tipo di trattamento ti permette di collegare le assunzioni alle tue routine. Ad esempio: \"Ogni giorno a colazione e cena, escludendo le domeniche\", oppure \"Ogni 3 giorni, a pranzo.\"" "I trattamenti orari sono indicati per le assunzioni che si ripetono con un certo periodo. Ad esempio: \"Ogni 8 ore\". Imposta l'orario della prima assunzione." "Le pillole contraccettive ed altri medicinali vanno assunti per un certo periodo e poi sospesi. Questo tipo di trattamento ti permette di specificare il periodo di assunzione e quello di pausa." "Nessuna routine configurata. @@ -295,7 +295,7 @@ Per lo sviluppo di Calendula utilizziamo diverse librerie open source di seguito "Ricerca…" "Database USA" "Avvertimi quando le mie scorte stanno per finire" -"Impossibile completare quest'azione perché la precedente richiesta di accesso allo storage è stata negata. Puoi dare l'autorizzazione nella scħermata di informazioni dell'app." +"Impossibile completare quest'azione perché la precedente richiesta di accesso allo storage è stata negata. Puoi dare l'autorizzazione nella schermata di informazioni dell'app." "Vai alle informazioni dell'app" "Questa medicina non è compatibile con le tue allergie" "Hai specificato di essere allergico ad alcune componenti contenute in questa medicina. Allergeni:" @@ -336,7 +336,7 @@ Per lo sviluppo di Calendula utilizziamo diverse librerie open source di seguito "Fammi uscire di qui!" "Continua" "Informazioni importanti" -"Comfigura database delle medicine" +"Configura database delle medicine" "Il database verrà scaricato e configurato. Potrebbero volerci alcuni secondi, ma nel frattempo puoi continuare ad utilizzare l'applicazione." "Errore nello scaricamento del database :(" "Configurazione del database" @@ -391,10 +391,12 @@ Potrai vedere tutte le assunzioni nella schermata principale." "Controllo delle riserve" "Non avvisarmi" "In meno di una settimana" -"In meno di 2 settinane" +"In meno di 2 settimane" "In meno di 3 settimane" "Nessuno" -Database AEMPS (Spagna) + + +"Database AEMPS (Spagna)" "Database dell'Agencia Española de Medicamentos y Productos Sanitarios" "Configurazione…" "Codice QR" @@ -452,7 +454,7 @@ Se decidi di non scaricarlo, alcune informazioni riguardanti le tue medicine pot "Mostra ritiri" "Aiuto" "Ricerca medicine" -"Vuoi sbloccare Calendula usando l'impronŧa digitale?" +"Vuoi sbloccare Calendula usando l'impronta digitale?" "Sblocco con impronta digitale abilitato!" "Usa l'impronta digitale per sbloccare" "Assicurati che il sensore delle impronte digitali sia pulito e riprova." @@ -507,9 +509,7 @@ Vuoi installare il nuovo database adesso? "grammi" -"applicazione - -" +"applicazione" "applicazioni" diff --git a/Calendula/src/main/res/values-nl/strings_translatable.xml b/Calendula/src/main/res/values-nl/strings_translatable.xml new file mode 100644 index 000000000..7fb1842be --- /dev/null +++ b/Calendula/src/main/res/values-nl/strings_translatable.xml @@ -0,0 +1,522 @@ + + +"Startpagina" +"Instellingen" +"Verwijderen" +"ROUTINES" +"MEDICIJNEN" +"Apotheken" +"Route plannen" +"medicijn" +"Rondleiding" +"Instellingen" +"Over" +"Routines" +"Routine bewerken" +"Routine creëren" +"Medicijnen" +"Schema bewerken" +"Schema creëren" +"Routinenaam" +"Tijd" +"Routine creëren" +"Nieuwe routine creëren…" +"Medicatienaam" +"Presentatie" +"Medicijn creëren" +"Geen informatie" +"Schema\'s" +"Vertraging" +"Klaar" +"Annuleren" +"Bevestigen" +"Denk eraan om je medicijnen te gebruiken" +"Alarm ontbreekt" +"Selecteer een dosering" +"Tijden en doseringen" +"Herhalen" +"Controleren en bevestigen" +"Samenvatting" +"Pillen" +"Capsules" +"Inhaler" +"Druppels" +"Pommade" +"Siroop" +"Spray" +"Pleisters" +"Onbekend" +"Verstuiver" +"Schema" + +"injectie" +"injecties" + + +"pil" +"pillen" + + +"capsule" +"capsules" + + +"inhalatie" +"inhalaties" + + +"toepassing" +"toepassingen" + + +"druppel" +"druppels" + + +"toepassing" +"toepassingen" + + +"ml" +"ml" + + +"pleister" +"pleisters" + + +"eenheid" +"eenheden" + + +"sachet" +"sachets" + +"Nooit" +"Elke dag" +"Eén keer per dag" +"Twee keer per dag" +"Drie keer per dag" +"Vier keer per dag" +"keer per dag" +"en" +"Ontbijt" +"Lunch" +"Avondeten" +"TIJD" +"DOSERING" +"Inname" +"Eerste keer innemen op" +"Ma" +"Di" +"Woe" +"Do" +"Vrij" +"Za" +"Zo" +"MA" +"DI" +"WOE" +"DO" +"VRIJ" +"ZA" +"ZO" +"NIET" +"Het is tijd om je medijnen te gebruiken!" +"Selecteer een medicijn om een schema te creëren" +"Selecteer routines voor al je innames" +"Doseringen moeten hoger dan nul zijn" +"Geen medicijnen vandaag" +"Medicijn gecreëerd!" +"Medicijn verwijderd!" +"Medicijn bijgewerkt!" +"Schema gecreëerd!" +"De innamecyclus moet hoger dan nul zijn" +"Herinnering geannuleerd" +"De routine '%1$s' is gekoppeld aan schema\'s, welke verloren zullen gaan als je de routine verwijdert. Wil je de routine tóch verwijderen?" +"'%1$s' is gekoppeld aan schema\'s, welke verloren zullen gaan als je de routine verwijdert. Wil je de routine tóch verwijderen?" +"Routine '%1$s' verwijderen?" +"'%1$s' verwijderen?" +"Routine verwijderen" +"Medicijn verwijderen" +"Schema verwijderen" +"Schema '%1$s' verwijderen?" +"Ja" +"Nee" +"Typ een naam" +"Nog niks geselecteerd" +"Selecteer een presentatie" +"Ik begrijp het" +"Het alarm wordt herhaald om %1$s" +"Nu annuleren" +"Uitstellen" +"Het alarm is uitgesteld met '%1$s' minuten" +"Hoe voel je je?" +"Ik voel me erg slecht" +"Ik voel me slecht" +"Ik voel niks" +"Ik voel me goed" +"Ik voel me erg goed" +"Zoeken op naam of code…" +"Medicijndatabank" +"Typ hier…" +"Je kunt medicijnen eenvoudig toevoegen en bijsluiters bekijken door de medicijndatabank in te schakelen. Als je dat nu niet wilt doen, dan kan dat later alsnog in de instellingen." +"Medicijndatabank" +"Activeren (aanbevolen)" +"Annuleren" +"Dit medicijn kan je rijvaardigheid beïnvloeden. +Lees de bijsluiter nauwkeurig of vraag je apotheker om advies voordat je achter stuur kruipt." +"Wees voorzichtig" +"Bijsluiter lezen" +"Ik begrijp het" +"Tussenpoos" +"elke" +"Elke %1$s %2$s" +"Beginnen" +"Vandaag" +"Stoppen" +"Nooit" +"dd MMMM YYYY" +"Stoppen na %1$s innames" +"Periode + tijdelijke stop" +"Elke dag" +"Enkele dagen per week" +"Tussenpoos" +"dagen" +"weken" +"maanden" +"Kalender tonen" +"uur" +"Selecteer een schematype om door te gaan met creëren" +"Routineschema" +"Dosering met tussenpoos" +"Periode + tijdelijke stop" +"Gebruikelijke cycli" +"Bijv.: elke 3 dagen, bij het ontbijt, lunch en avondeten" +"Bijv.: elke 8 uur" +"Bijv.: 21 dagen + 7 dagen stoppen" +"Herhaalperiode instellen (inname + tijdelijke stop)" +"Ten slotte kun je het begin en einde van het schema opgeven. Gebruik de standaardwaarden om het schema oneindig te herhalen." +"Geef de herhaalperiode, dosering en eerste innametijd op." +"Geef de herhaalperiode op. Als deze elke dag hetzelfde is, dan hoef je niks op te geven." +"Geef op hoeveel keer per dag het schema herhaald moet worden." +"Koppel nu elke inname met je routines en geef de doseringen op." +"Ophaalkalender" +"Ophalen op %1$s" +"Tot %1$s" +"dd MMMM" +"Schema\'s bevestigen" +"Recept %1$s van %2$s" +"Recepten scannen" +"QR-code scannen" +"Duur" +"Alle medicijnen zijn ingenomen!" +"Selecteer eerst een medicijn" +"Patiënten" +"Je staat op het punt om een schema te creëren. Kies het schema dat het beste aansluit!" +"Dit schema stelt je in staat om innames te verbinden met routines, zoals bijv.: \"Elke dag bij het ontbijt en avondeten, behalve op zondag\", of \"Elke 3 dagen bij de lunch.\"" +"Uurschema\'s zijn bedoeld voor innames die zich per periode herhalen, zoals bijv.: \"Elke 8 uur\". Stel de eerste innametijd in en ga zo verder." +"Anticonceptiepillen en andere medicatie worden voor een bepaalde periode ingenomen, waarna een stopperiode volgt. Dit schema stelt je in staat om beide periodes in te stellen." +"Er zijn nog geen routines. + +Routines zijn tijden waarop je medicijnen moet innemen, zoals ontbijt en avondeten. Je kunt dit hergebruiken om toekomstige schema\'s sneller te creëren." +"Er zijn nog geen medicijnen. + +Voeg medicijnen toe om eenvoudig toegang te krijgen tot bijsluiters en waarschuwingen." +"Er zijn nog een schema\'s. + +Voeg je schema\'s hier toe en krijg een melding van ons!" +
+Calendula wordt ontwikkeld door het Research Centre for Information Technologies van de USC (CITIUS) +

+Bezoek onze website voor meer informatie: +
+citius.usc.es/calendula +

+Calendula is een open-bronproject. Je kunt ideëen en suggesties bijdragen op onze GitHub-pagina of door een e-mail te sturen: +
+https://github.com/citiususc/calendula +
+citius.calendula@usc.es +

+Voor de ontwikkeling gebruiken wij verschillende open-bronbibliotheken, die hieronder worden vermeldt: +"]]>
+"Er is een fout opgetreden tijdens het laden van de pagina" +"Vooruitzicht" +"Een paar seconden geduld..." +"De bijsluiter zal spoedig gereed zijn…" +"De bijsluiter kan niet worden geladen" +"Sorry, er is geen bijsluiter beschikbaar voor dit medicijn" +"Geen inname beschikbaar" +"De inname zal beschikbaar zijn op %1$s. We sturen je een meldig zodra het zover is!" +"Er zijn vele uren verstreken sinds de laatste inname. Heb je je medicatie genomen en wil je dit nu bevestigen?" +"Medicatie van" +"op" +"Bevestigd op" +"Geannuleerd op" +"Nee, ik heb het niet ingenomen" +"Ja, ik heb het ingenomen" +"Nee" +"Nee" +"Ja, ik heb het ingenomen" +"Je hebt deze inname bevestigd %1$s. Heb je het genomen?" +"Delen met" +"Openen in webbrowser" +"Delen met…" +"Over" +"Allergieën" +"Allergieën" +"Er is een fout opgetreden tijdens opslaan van je allergieën." +"Allergie '%1$s' verwijderen?" +"Hulpstof" +"Actief ingrediënt" +"Het verwijderen van allergie-informatie is mislukt." +"Er zijn nog geen allergieën toegevoegd!" +"Begin met typen van je allergie om suggesties te krijgen." +"Geen resultaten voor huidige zoekopdracht" +"Het lijkt erop dat er een probleem is opgetreden bij het melden. Kijk in je agenda of er iets te melden valt." +"Oeps…" +"Allergieën gedetecteerd voor dit medicijn." +"Dit medicijn bevat ingrediënten waar je allergisch voor bent. Omwille van je eigen veiligheid, kun je dit medcijn niet inplannen." +"Er is een fout opgetreden tijdens het opslaan van je medicijn." +"Dit medicijn kan niet worden ingepland omdat je allergisch bent voor sommige hulpstoffen." +"Waarschuwing" +"Enkele van je medicijnen bevatten het zojuist toegevoegde allergeen. Bekijk hun vooruitzichten nauwkeurig." +"Dit medicijn is al toegevoegd." +"%1$d elementen" +"%1$d geselecteerd" +"Je allergie-informatie is opgeslagen." +"Databank vereist" +"Allergiebeheer wordt momenteel alleen ondersteund i.c.m. de AEMPS-medicatiedatabank. Wil je deze activeren?" +"%1$d elementen (%2$d geselecteerd)" +"\"%1$s\" toevoegen" +"Sorry, we hebben niks kunnen vinden met die naam" +"Typ een medicijnnaam of -code om te beginnen met zoeken of scan de barcode van een verpakking..." +"Zoeken…" +"VS-databank" +"Waarschuwen als mijn medicatievoorraad opraakt" +"Deze actie kan niet worden uitgevoerd omdat je ons vorige machtigingsverzoek voor opslag hebt geweigerd. Je kunt de machtiging alsnog afgeven in de app-informatieweergave." +"Ga naar app-informatie" +"Er zijn allergieconflicten voor dit medicijn" +"Je hebt opgegeven dat je allergisch bent voor enkele stoffen die dit medicijn bevat. Allergenen:" +"Gebruiker" +"%1$s\'s %2$s" +"%1$d gekoppelde schema\'s" +"Geen gekoppelde schema\'s" +"Gisteren" +"Vandaag" +"Morgen" +"Dit is de standaardpatiënt; deze kan niet worden verwijderd. Wil je al zijn/haar schema\'s, medicijnen en routines verwijderen?" +"Ja, alles verwijderen" +"Gebruikersgegevens verwijderd!" +"Standaardroutines creëren" +"Voorraad raakt op" +"Meer toevoegen" +"%1$d %2$s resterend" +"Geen actieve schema\'s" +"1 actief schema" +"%1$d actieve schema\'s" +"Koppel een echt medicijn om meer informatie te verkrijgen" +"Er is standaardinformatie over dit medicijn" +"Geen gegevens" +"Het medicijn is gekoppeld!" +"Informatie" +"Waarschuwingen" +"Medicijn niet gevonden" +"Koppelen aan medicijn" +"Bijsluiter" +"Officiële bijsluiter" +"Met de huidige schema\'s heb je voldoende voor %1$d dagen" +"Met de huidige schema\'s heb je voldoende voor %1$d maanden en %2$d dagen" +"Met de huidige schema\'s heb je voldoende voor meer dan drie maanden" +"Geen waarschuwingen gevonden voor dit medicijn" +"Geen voorraad meer" +"Je hebt dit medicijn niet meer op voorraad." +"Allergiebeheer is een experimentele functie. Denk eraan om bijsluiters te lezen zodat je zeker weet dat je wel of niet allergisch bent." +"Haal me hier vandaan!" +"Doorgaan" +"Belangrijke informatie" +"Medicijndatabank gebruiken" +"De databankwordt gedownload en ingesteld. Dit kan een paar seconden duren, maar je kunt de app gewoon blijven gebruiken." +"Fout bij downloaden van databank :(" +"Bezig met instellen van databank" +"Bezig met instellen van databank" +"Databank is ingesteld" +"Druk hier om een nieuw medicijn toe te voegen" +"Bezig met instellen" +"Databank instellen mislukt" +"Er is iets misgegaan tijdens het instellen van de databank." +"Welkom bij Calendula!" +"Het gebruiken van je medicatie is niet gemakkelijk, maar nu wordt het in ieder geval minder moeilijk! + +Kijk wat we je kunnen bieden!" +"Routines" +"Een routine is een tijdstip waarop je medicijnen moet gebruiken. + +Gebruik je meerdere medicijnen bij het ontbijt of de lunch? Creëer dan een routine op dat tijdstip en Calendula zal alle innames groeperen in één melding." +"Medicatie-overzicht" +"Houd al je medicijnen overzichtelijk door het overzicht te gebruiken. Je krijgt hierdoor eenvoudig toegang tot bijsluiters uit de officiële databanken." +"Schema\'s" +"Creëer een medicijnkalender d.m.v. de schemabewerker. Je kunt je innames koppelen aan routines, uurlijkse of dagelijkse herhalingen instellen en nog veel meer!" +"Herinneringen" +"Calendula stuurt je een melding over je innames. Denk eraan om dit te bevestigen, anders sturen we je opnieuw een melding! + +Pas meldingen aan in de instellingen." +"Meerdere patiënten!" +"Calendula stelt je in staat om de medicatie van meerdere patiënten te beheren, met hun eigen medicijnoverzicht, routines en schema\'s. + +Je kunt al hun innames bekijken op het hoofdscherm." +"Instellingen" +"Algemeen" +"Getoonde naam" +"Calendula" +"Meldingen" +"Medicijninname-meldingen" +"Medicijnen ophalen-meldingen" +"Aanhoudende meldingen" +"Meldingen herhalen" +"Herhalen, elke" +"Meldingen verwerpen na" +"Geluid" +"Standaard" +"5 min" +"15 min" +"30 min" +"60 min" +"30 min" +"1 uur" +"2 uur" +"Medicijndatabank inschakelen" +"Geselecteerde databank" +"Voorraadbeheer" +"Geen waarschuwing" +"Minder dan één week" +"Minder dan twee weken" +"Minder dan drie weken" +"Geen" + + +"AEMPS-databank (Spanien)" +"Agencia Española de Medicamentos y Productos Sanitarios-databank" +"Bezig met instellen…" +"Van QR-code" +"morgen" +"1 min" +"30 min" +"15 min" +"60 min" +"Neem je medicijnen nu in" +"Voer een naam in." +"Naam" +"Barcode scannen" +"Databank-update beschikbaar" +"Er is een update beschikbaar van de huidige medicijndatabank. Wil je deze downloaden en installeren?" +"Druk hier om te downloaden en installeren" +"In de nieuwste update van de databank zijn enkele van je medicijnen verwijderd. Ze blijven beschikbaar op je overzicht, maar je kunt geen bijsluiters e.d. meer bekijken." +"Extra informatie verloren na update" +"Controleren op updates" +"Geen databank-update beschikbaar" +"Databank-update vereist" +"Deze versie van de app vereist een nieuwere databank. Wil je deze nu downloaden en instellen? +Als je dit niet doet, dan kan sommige medicijninformatie verloren gaan." +"Downloaden" +"Geen internetverbinding beschikbaar! Maak verbinding met het internet en probeer het opnieuw." +"Bewerken" +"Injecties" +"Voorraad terugzetten?" +"De voorraadinformatie van %1$s wordt teruggezet op de standaardwaarde." +"Terugzetten" +"Medicijn bewerken" +"Sorteren op:" +"Standaard" +"Naam" +"Presentatie" +"Sorteren" +"Meldingen" +"Ophalen" +"Alles" +"Bezig met bijwerken van kalender..." +"Advies" +"Bezoek je apotheek, %1$s, om %2$s medicijnen tegelijkertijd op te halen:" +"Bezoek je apotheek, %1$s, om het volgende op te halen:" +"Nadien kun je opnieuw naar %1$s gaan om %2$s medicijnen tegelijkertijd op te halen:" +"Nadien kun je opnieuw naar %1$s gaan en het volgende ophalen:" +"Er staan medicijnen voor je klaar bij de apotheek; haal ze zo spoedig mogelijk op:" +"'op' d MMMM '('EEEE')'" +"Herinnering" +"1 dag ervoor" +"2 dagen ervoor" +"3 dagen ervoor" +"Er zijn geen op te halen medicijnen." +"Oké" +"Voorraad" +"Uitklappen" +"Ophalingen tonen" +"Hulp" +"Medicijnen zoeken" +"Wil je Calendula ontgrendelen met je vingerafdruk?" +"Vingerafdruk-ontgrendeling ingschakeld!" +"Gebruik je vingerafdruk om te ontgrendelen" +"Zorg ervoor dat je vingerafdruksensor schoon is en probeer het opnieuw." +"Vingerafdruk-authenticatie mislukt." +"Even geduld…" +"Authenticatie gelukt" +"Vingerafdruk-ontgrendeling" +"Pincode-ontgrendeling" +"Annuleren" +"Verwijderen" +"De app is vergrendeld met een pincode. Wat wil je doen?" +"Bewerken" +"Pincode" +"Weet je zeker dat je de pinvergrendeling wilt verwijderen?" +"Pinvergrendeling verwijderen?" +"Pincode vergeten?" +"Als je je pincode bent vergeten, dan kun je opnieuw inloggen om weer toegang te krijgen. Wil je doorgaan?" +"Pincodeherstel" +"Vingerafdruk gebruiken" +"Vingerafdruk-ontgrendeling" +"Privacy" +"Pincode ingesteld" +"Geen pincode ingesteld" +"App-vergrendeling" +"De ingevoerde pincode is onjuist. Probeer het opnieuw." +"Voer je pincode in om door te gaan." +"De ingevoerde codes komen niet overeen. Probeer het opnieuw." +"Voer een viercijferige pincode in." +"Voer je pincode in of gebruik je vingerafdruk om door te gaan" +"Voer dezelfde pincode nogmaals in..." +"of gebruik je vingerafdruk om te authenticeren" +"Om je te voorzien van betere medicijninformatie, is het nodig dat je de medicijndatabank herinstalleert via de Instellingen. Als je dit niet doet, dan heb je geen toegang meer tot bijsluiters of andere extra functies. + +Aan je schema\'s, medicijnoverzicht, routines en andere basisfuncties verandert niks, ongeacht je keuze. + +Wil je de nieuwe databank nu installeren? +" +"Geluid van aanhoudende meldingen" +"Met de huidige schema\'s heb je voldoende voor %1$d weken en %2$d dagen" +"Er zijn nog %1$d %2$s van %3$s aanwezig en met de huidige schema\'s raakt de voorraad raakt over %4$d dagen." +"Voorraad van %1$s raakt op" +"Voorraad beheren" +"Oeps! Er is een fout opgetreden." +"Geen" +"Patiënt toevoegen" +"Downloaden en instellen" +"Wil je dat dit schema oneindig wordt herhaald?" +"Poeder" +"Crème" + +"gram" +"gram" + + +"toepassing" +"toepassingen" + + +"eenheid" +"eenheden" + +"Algemeen" +"Ingenomen" +
\ No newline at end of file diff --git a/Calendula/src/main/res/values/strings_translatable.xml b/Calendula/src/main/res/values/strings_translatable.xml index 7b09c882b..24a35520c 100644 --- a/Calendula/src/main/res/values/strings_translatable.xml +++ b/Calendula/src/main/res/values/strings_translatable.xml @@ -186,6 +186,7 @@ Please carefully read the leaflet or ask your pharmacist before you get behind t "weeks" "months" "Show calendar" +"hours" "Please, select a schedule type to keep on creating the schedule" "Routine schedule" "Dosing interval" @@ -394,7 +395,9 @@ You will see all their intakes in the home screen." "In less than 2 weeks" "In less than 3 weeks" "None" -AEMPS Database (Spain) + + +"AEMPS Database (Spain)" "Agencia Española de Medicamentos y Productos Sanitarios database" "Setting up…" "From QR" @@ -516,23 +519,22 @@ Do you want to install the new database now?
"Generic" "Taken" - "Lock after" - "30 seconds" - "1 minute" - "2 minutes" - "5 minutes" - second - seconds - minute - minutes - hour - hours - day - days - week - weeks - month - months - year - years +"Lock after" +"30 seconds" +"1 minute" +"2 minutes" +"5 minutes" +"second" +"seconds" +"minute" +"minutes" +"hour" +"day" +"days" +"week" +"weeks" +"month" +"months" +"year" +"years" \ No newline at end of file diff --git a/metadata/nl/full_description.txt b/metadata/nl/full_description.txt new file mode 100644 index 000000000..91217de3c --- /dev/null +++ b/metadata/nl/full_description.txt @@ -0,0 +1,33 @@ +Calendula is een assistent voor het beheren van je persoonlijke medicatie. De app helpt bij het beheren van je recepten, +zonder dat je daarvoor duizenden alarmen hoeft in te stellen op je telefoon en je hoeft je geen zorgen meer te maken dat je je +medicatie vergeet. Stel een dosering en schema in, koppel ze aan je dagelijkse routines en laat Calendula zijn werk doen. + +--- + +Calendula beschikt over: +○ een fijn, eenvoudig en gebruiksvriendelijk uiterlijk +○ medicatiemeldingen en -herinneringen, met volledig instelbare alarmen +○ flexibele medicatieschema's, met specifieke opties voor anticonceptiepillen en andere medicatie met stopperiodes +○ een medicijn-zoekfunctie en bijsluiterweergave, met gegevens van de "Agencia Española de Medicamentos y Productos Sanitarios" (http://www.aemps.gob.es) +○ dagelijks beheer over gebruikte medicatie +○ ondersteuning voor meerdere patiënten + +Bezoek onze website voor meer informatie: https://tec.citius.usc.es/calendula/ + +--- + +Over machtigingen: + +Calendula vereist geen eerdere registratie en verzamelt geen persoonlijke gegevens. Het kan zijn dat Calendula soms vraagt om een machtiging voor toegang tot verschillende bronnen op je apparaat. We leggen uit waarom: + +○ Opslag: we hebben deze machtiging nodig om de medicijndatabanken te kunnen downloden en om toegang te krijgen tot geluiden op je apparaat. Zo kun je kiezen voor je favoriete geluid bij medicatiemeldingen. +○ Camera: het is mogelijk om medicijnen (momenteel alleen AEMPS) toe te voegen aan je overzicht door de barcode van een verpakking te scannen. Daarvoor hebben we toegang nodig tot je camera. +○ Internettoegang: deze machtiging wordt niet expliciet gevraagd en is alleen nodig voor het downloaden van bijsluiters en het instellen van de medicijndatabank. Je medicatiegegevens blijven ten allen tijde op je telefoon. + +--- + +Open source: +Calendula is een open-bronproject. Als je ideëen hebt of wilt bijdragen, dan kun je dit melden via onze website (https://tec.citius.usc.es/calendula/) of via onze GitHub-gemeenschap https://github.com/citiususc/calendula. We waarderen elke bijdrage of suggestie. + +Hartelijke bedankt namens +het Calendula-team. diff --git a/metadata/nl/short_description.txt b/metadata/nl/short_description.txt new file mode 100644 index 000000000..2cbcaae86 --- /dev/null +++ b/metadata/nl/short_description.txt @@ -0,0 +1 @@ +Vereenvoudigd medicatiebeheer From c276ff9bb0990c6d3c8faa48cca1ad804a499b9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Brey?= Date: Wed, 18 Jul 2018 17:58:10 +0200 Subject: [PATCH 15/15] Update version code and name for release 2.5.6 --- Calendula/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Calendula/build.gradle b/Calendula/build.gradle index 7cce0bdaa..9ce921587 100644 --- a/Calendula/build.gradle +++ b/Calendula/build.gradle @@ -77,8 +77,8 @@ android { defaultConfig { minSdkVersion 16 targetSdkVersion 25 - versionCode 36 - versionName "2.5.5" + versionCode 37 + versionName "2.5.6" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" applicationId "es.usc.citius.servando.calendula" multiDexEnabled true