From 697e1ff6cdb888e9b37f35fffb20e33cc3ad92ae Mon Sep 17 00:00:00 2001 From: paolorotolo Date: Sat, 3 Sep 2016 21:32:41 +0200 Subject: [PATCH 01/82] Start working on Reminders. --- app/src/main/AndroidManifest.xml | 19 +++++- .../android/activity/MainActivity.java | 13 +++- .../android/activity/RemindersActivity.java | 61 +++++++++++++++++++ .../android/presenter/RemindersPresenter.java | 12 ++++ .../receivers/BootBroadcastReceiver.java | 13 ++++ .../main/res/drawable/ic_alarm_grey_24dp.xml | 9 +++ .../main/res/layout/activity_reminders.xml | 25 ++++++++ app/src/main/res/values/dimens.xml | 4 ++ app/src/main/res/values/strings.xml | 1 + build.gradle | 2 +- 10 files changed, 154 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/org/glucosio/android/activity/RemindersActivity.java create mode 100644 app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java create mode 100644 app/src/main/java/org/glucosio/android/receivers/BootBroadcastReceiver.java create mode 100644 app/src/main/res/drawable/ic_alarm_grey_24dp.xml create mode 100644 app/src/main/res/layout/activity_reminders.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 51ec1294..79ad93e0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -36,8 +36,12 @@ + + + - + @@ -169,7 +174,7 @@ android:value="org.glucosio.android.activity.MainActivity" /> - + + + + + + + + + + 16dp + 16dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4fbb0a9b..65810898 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -448,4 +448,5 @@ Revert to old graph history save + Reminders diff --git a/build.gradle b/build.gradle index 98a351d5..c4be2f3a 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ buildscript { dependencies { // TODO: Please revert to a stable gradle version before releasing on prod // Alpha is required in devel to use Instant Run and speed up development process - classpath 'com.android.tools.build:gradle:2.2.0-beta3' + classpath 'com.android.tools.build:gradle:2.2.0-rc1' classpath 'com.google.gms:google-services:3.0.0' classpath 'io.realm:realm-gradle-plugin:1.1.1' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' From d9da7e2bd398b3c953c983460cf0afe25bce7690 Mon Sep 17 00:00:00 2001 From: Alexandru Simonescu Date: Sun, 4 Sep 2016 00:18:47 +0200 Subject: [PATCH 02/82] Updated build gradle to 2.2.0-rc1 from beta --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 98a351d5..c4be2f3a 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ buildscript { dependencies { // TODO: Please revert to a stable gradle version before releasing on prod // Alpha is required in devel to use Instant Run and speed up development process - classpath 'com.android.tools.build:gradle:2.2.0-beta3' + classpath 'com.android.tools.build:gradle:2.2.0-rc1' classpath 'com.google.gms:google-services:3.0.0' classpath 'io.realm:realm-gradle-plugin:1.1.1' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' From e47e12c3c8df31eefbfb7f665a2092eeb7eef571 Mon Sep 17 00:00:00 2001 From: paolorotolo Date: Sun, 4 Sep 2016 19:29:24 +0200 Subject: [PATCH 03/82] Add Reminders in Realm. Add migration to schema 4. --- .../android/activity/RemindersActivity.java | 19 ++++--- .../glucosio/android/db/DatabaseHandler.java | 2 +- .../org/glucosio/android/db/Migration.java | 21 +++++-- .../org/glucosio/android/db/Reminder.java | 56 +++++++++++++++++++ .../android/presenter/RemindersPresenter.java | 6 ++ 5 files changed, 89 insertions(+), 15 deletions(-) create mode 100644 app/src/main/java/org/glucosio/android/db/Reminder.java diff --git a/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java b/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java index 1678dc23..a736ea8e 100644 --- a/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java @@ -5,7 +5,6 @@ import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; -import android.widget.TextView; import com.wdullaer.materialdatetimepicker.time.RadialPickerLayout; import com.wdullaer.materialdatetimepicker.time.TimePickerDialog; @@ -14,7 +13,6 @@ import org.glucosio.android.presenter.RemindersPresenter; import org.glucosio.android.tools.FormatDateTime; -import java.text.DecimalFormat; import java.util.Calendar; public class RemindersActivity extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener { @@ -40,22 +38,25 @@ protected void onCreate(Bundle savedInstanceState) { addFab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - + // Open Time Picker on FAB click + boolean is24HourFormat = android.text.format.DateFormat.is24HourFormat(getApplicationContext()); + Calendar cal = presenter.getCalendar(); + + TimePickerDialog tpd = TimePickerDialog.newInstance( + RemindersActivity.this, + cal.get(Calendar.HOUR_OF_DAY), + cal.get(Calendar.MINUTE), + is24HourFormat); + tpd.show(getFragmentManager(), "Timepickerdialog"); } }); - - } @Override public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute, int seconds) { - TextView addTime = (TextView) findViewById(R.id.dialog_add_time); - DecimalFormat df = new DecimalFormat("00"); - Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, hourOfDay); cal.set(Calendar.MINUTE, minute); FormatDateTime formatDateTime = new FormatDateTime(getApplicationContext()); - addTime.setText(formatDateTime.getTime(cal)); } } diff --git a/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java b/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java index 45ced682..e21f1d42 100644 --- a/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java +++ b/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java @@ -55,7 +55,7 @@ public DatabaseHandler(Context context) { public Realm getNewRealmInstance() { if (mRealmConfig == null) { mRealmConfig = new RealmConfiguration.Builder(mContext) - .schemaVersion(3) + .schemaVersion(4) .migration(new Migration()) .build(); } diff --git a/app/src/main/java/org/glucosio/android/db/Migration.java b/app/src/main/java/org/glucosio/android/db/Migration.java index 61f899a6..3c8c4bf4 100644 --- a/app/src/main/java/org/glucosio/android/db/Migration.java +++ b/app/src/main/java/org/glucosio/android/db/Migration.java @@ -53,9 +53,14 @@ class User int custom_range_min; int custom_range_max; - class CholesterolReading + class Reminder @PrimaryKey long id; + Date alarmTime; + boolean oneTime; + String metric; + class CholesterolReading + @PrimaryKey long id; int totalReading; int LDLReading; int HDLReading; @@ -63,7 +68,6 @@ class CholesterolReading class GlucoseReading @PrimaryKey long id; - int reading; String reading_type; String notes; @@ -72,20 +76,17 @@ class GlucoseReading class KetoneReading @PrimaryKey long id; - double reading; Date created; class PressureReading @PrimaryKey long id; - int minReading; int maxReading; Date created; class WeightReading @PrimaryKey long id; - int reading; Date created; @@ -160,5 +161,15 @@ public void apply(DynamicRealmObject obj) { }); oldVersion++; } + + if (oldVersion == 3) { + // Add Reminders + RealmObjectSchema remindersSchema = schema.create("Reminders") + .addField("id", Long.class, FieldAttribute.PRIMARY_KEY, FieldAttribute.REQUIRED) + .addField("metric", String.class, FieldAttribute.REQUIRED) + .addField("alarmTime", Date.class) + .addField("oneTime", Boolean.class); + oldVersion++; + } } } diff --git a/app/src/main/java/org/glucosio/android/db/Reminder.java b/app/src/main/java/org/glucosio/android/db/Reminder.java new file mode 100644 index 00000000..8b5c9b1a --- /dev/null +++ b/app/src/main/java/org/glucosio/android/db/Reminder.java @@ -0,0 +1,56 @@ +package org.glucosio.android.db; + +import java.util.Date; + +import io.realm.RealmObject; +import io.realm.annotations.PrimaryKey; + +public class Reminder extends RealmObject { + @PrimaryKey + private long id; + + private Date alarmTime; + private boolean oneTime; + private String metric; + + public Reminder() { + } + + public Reminder(Date alarmTime, String metric, boolean oneTime) { + this.alarmTime = alarmTime; + this.metric = metric; + this.oneTime = oneTime; + } + + public Date getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(Date alarmTime) { + this.alarmTime = alarmTime; + } + + public boolean isOneTime() { + return oneTime; + } + + public void setOneTime(boolean oneTime) { + this.oneTime = oneTime; + } + + public String getMetric() { + return metric; + } + + public void setMetric(String metric) { + this.metric = metric; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } +} diff --git a/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java b/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java index 4493380b..7dfbee70 100644 --- a/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java @@ -2,6 +2,8 @@ import org.glucosio.android.activity.RemindersActivity; +import java.util.Calendar; + public class RemindersPresenter { RemindersActivity activity; @@ -9,4 +11,8 @@ public class RemindersPresenter { public RemindersPresenter(RemindersActivity activity) { this.activity = activity; } + + public Calendar getCalendar() { + return Calendar.getInstance(); + } } From 06984ab4b96d20cd0b5b6344c5dc3e87c92eda42 Mon Sep 17 00:00:00 2001 From: paolorotolo Date: Mon, 5 Sep 2016 12:49:20 +0200 Subject: [PATCH 04/82] Add ArrayAdapter for reminders. --- .../android/activity/RemindersActivity.java | 12 +++- .../android/adapter/RemindersAdapter.java | 41 +++++++++++++ .../glucosio/android/db/DatabaseHandler.java | 59 +++++++++++++++++++ .../org/glucosio/android/db/Migration.java | 1 + .../org/glucosio/android/db/Reminder.java | 12 +++- .../res/layout/activity_reminder_item.xml | 58 ++++++++++++++++++ .../main/res/layout/activity_reminders.xml | 11 ++-- 7 files changed, 187 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/org/glucosio/android/adapter/RemindersAdapter.java create mode 100644 app/src/main/res/layout/activity_reminder_item.xml diff --git a/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java b/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java index a736ea8e..69e29682 100644 --- a/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java @@ -5,11 +5,14 @@ import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; +import android.widget.ListView; import com.wdullaer.materialdatetimepicker.time.RadialPickerLayout; import com.wdullaer.materialdatetimepicker.time.TimePickerDialog; import org.glucosio.android.R; +import org.glucosio.android.adapter.RemindersAdapter; +import org.glucosio.android.db.DatabaseHandler; import org.glucosio.android.presenter.RemindersPresenter; import org.glucosio.android.tools.FormatDateTime; @@ -17,8 +20,9 @@ public class RemindersActivity extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener { - FloatingActionButton addFab; - RemindersPresenter presenter; + private FloatingActionButton addFab; + private RemindersPresenter presenter; + private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { @@ -50,6 +54,10 @@ public void onClick(View view) { tpd.show(getFragmentManager(), "Timepickerdialog"); } }); + + DatabaseHandler db = new DatabaseHandler(this); + RemindersAdapter adapter = new RemindersAdapter(this, R.layout.activity_reminder_item, db.getReminders()); + listView.setAdapter(adapter); } @Override diff --git a/app/src/main/java/org/glucosio/android/adapter/RemindersAdapter.java b/app/src/main/java/org/glucosio/android/adapter/RemindersAdapter.java new file mode 100644 index 00000000..19c2b3c5 --- /dev/null +++ b/app/src/main/java/org/glucosio/android/adapter/RemindersAdapter.java @@ -0,0 +1,41 @@ +package org.glucosio.android.adapter; + +import android.content.Context; +import android.support.annotation.NonNull; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; + +import org.glucosio.android.R; +import org.glucosio.android.db.Reminder; + +import java.util.List; + +public class RemindersAdapter extends ArrayAdapter { + private Context context; + private List items; + + public RemindersAdapter(Context context, int textViewResourceId) { + super(context, textViewResourceId); + } + + public RemindersAdapter(Context context, int resource, List items) { + super(context, resource, items); + this.context = context; + this.items = items; + } + + @Override + public View getView(int position, View convertView, @NonNull ViewGroup parent) { + View v = convertView; + if (v == null) { + LayoutInflater vi; + vi = LayoutInflater.from(getContext()); + v = vi.inflate(R.layout.activity_reminder_item, parent, false); + } + + + return v; + } +} diff --git a/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java b/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java index e21f1d42..4406d8ad 100644 --- a/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java +++ b/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java @@ -90,6 +90,65 @@ public void updateUser(User user) { realm.commitTransaction(); } + public void addReminder(Reminder reminder) { + realm.beginTransaction(); + realm.copyToRealm(reminder); + realm.commitTransaction(); + } + + public void updateReminder(Reminder reminder) { + realm.beginTransaction(); + realm.copyToRealm(reminder); + realm.commitTransaction(); + } + + public void deleteRemider(Reminder reminder) { + realm.beginTransaction(); + reminder.deleteFromRealm(); + realm.commitTransaction(); + } + + public List getReminders() { + RealmResults results = + realm.where(Reminder.class) + .findAllSorted("alarmTime", Sort.DESCENDING); + ArrayList reminders = new ArrayList<>(); + for (int i = 0; i < results.size(); i++) { + reminders.add(results.get(i)); + } + return reminders; + } + + public ArrayList getRemindersDatesAsArray() { + List readings = getReminders(); + ArrayList datesArray = new ArrayList(); + int i; + + for (i = 0; i < readings.size(); i++) { + Date reading; + Reminder reminder = readings.get(i); + reading = reminder.getAlarmTime(); + datesArray.add(reading); + } + return datesArray; + } + + public ArrayList getRemindersDatesStringAsArray() { + List readings = getReminders(); + ArrayList datesArray = new ArrayList(); + int i; + DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + + for (i = 0; i < readings.size(); i++) { + String reading; + Reminder reminder = readings.get(i); + reading = inputFormat.format(reminder.getAlarmTime()); + datesArray.add(reading); + } + + return datesArray; + } + public boolean addGlucoseReading(GlucoseReading reading) { // generate record Id String id = generateIdFromDate(reading.getCreated(), reading.getReading()); diff --git a/app/src/main/java/org/glucosio/android/db/Migration.java b/app/src/main/java/org/glucosio/android/db/Migration.java index 3c8c4bf4..3809f5fc 100644 --- a/app/src/main/java/org/glucosio/android/db/Migration.java +++ b/app/src/main/java/org/glucosio/android/db/Migration.java @@ -168,6 +168,7 @@ public void apply(DynamicRealmObject obj) { .addField("id", Long.class, FieldAttribute.PRIMARY_KEY, FieldAttribute.REQUIRED) .addField("metric", String.class, FieldAttribute.REQUIRED) .addField("alarmTime", Date.class) + .addField("active", Boolean.class) .addField("oneTime", Boolean.class); oldVersion++; } diff --git a/app/src/main/java/org/glucosio/android/db/Reminder.java b/app/src/main/java/org/glucosio/android/db/Reminder.java index 8b5c9b1a..b3e17b38 100644 --- a/app/src/main/java/org/glucosio/android/db/Reminder.java +++ b/app/src/main/java/org/glucosio/android/db/Reminder.java @@ -11,15 +11,17 @@ public class Reminder extends RealmObject { private Date alarmTime; private boolean oneTime; + private boolean active; private String metric; public Reminder() { } - public Reminder(Date alarmTime, String metric, boolean oneTime) { + public Reminder(Date alarmTime, String metric, boolean oneTime, boolean active) { this.alarmTime = alarmTime; this.metric = metric; this.oneTime = oneTime; + this.active = active; } public Date getAlarmTime() { @@ -53,4 +55,12 @@ public long getId() { public void setId(long id) { this.id = id; } + + public boolean isActive() { + return active; + } + + public void setActive(boolean active) { + this.active = active; + } } diff --git a/app/src/main/res/layout/activity_reminder_item.xml b/app/src/main/res/layout/activity_reminder_item.xml new file mode 100644 index 00000000..dcccf4d7 --- /dev/null +++ b/app/src/main/res/layout/activity_reminder_item.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_reminders.xml b/app/src/main/res/layout/activity_reminders.xml index 3ec4fbc5..55fbd515 100644 --- a/app/src/main/res/layout/activity_reminders.xml +++ b/app/src/main/res/layout/activity_reminders.xml @@ -5,12 +5,14 @@ android:id="@+id/activity_reminders" android:layout_width="match_parent" android:layout_height="match_parent" - android:paddingBottom="@dimen/activity_vertical_margin" - android:paddingLeft="@dimen/activity_horizontal_margin" - android:paddingRight="@dimen/activity_horizontal_margin" - android:paddingTop="@dimen/activity_vertical_margin" + tools:context="org.glucosio.android.activity.RemindersActivity"> + + Date: Mon, 5 Sep 2016 20:39:55 +0200 Subject: [PATCH 05/82] Continue work on Reminders. --- .../android/activity/RemindersActivity.java | 69 +++++++++++++++++-- .../android/adapter/RemindersAdapter.java | 50 ++++++++++++++ .../glucosio/android/db/DatabaseHandler.java | 28 ++++++-- .../org/glucosio/android/db/Reminder.java | 3 +- .../android/presenter/RemindersPresenter.java | 34 ++++++++- .../res/layout/activity_reminder_item.xml | 9 +++ .../main/res/layout/activity_reminders.xml | 20 ++++-- .../fragment_reminders_bottom_sheet.xml | 33 +++++++++ 8 files changed, 227 insertions(+), 19 deletions(-) create mode 100644 app/src/main/res/layout/fragment_reminders_bottom_sheet.xml diff --git a/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java b/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java index 69e29682..5a2ff9d3 100644 --- a/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java @@ -1,20 +1,23 @@ package org.glucosio.android.activity; import android.os.Bundle; +import android.support.design.widget.BottomSheetDialog; import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; +import android.view.MenuItem; import android.view.View; +import android.widget.LinearLayout; import android.widget.ListView; import com.wdullaer.materialdatetimepicker.time.RadialPickerLayout; import com.wdullaer.materialdatetimepicker.time.TimePickerDialog; import org.glucosio.android.R; -import org.glucosio.android.adapter.RemindersAdapter; -import org.glucosio.android.db.DatabaseHandler; +import org.glucosio.android.db.Reminder; import org.glucosio.android.presenter.RemindersPresenter; -import org.glucosio.android.tools.FormatDateTime; +import org.glucosio.android.tools.AnimationTools; import java.util.Calendar; @@ -36,9 +39,11 @@ protected void onCreate(Bundle savedInstanceState) { setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setElevation(2); + getSupportActionBar().setTitle(getResources().getString(R.string.activity_reminders_title)); } addFab = (FloatingActionButton) findViewById(R.id.activity_reminders_fab_add); + addFab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -55,9 +60,23 @@ public void onClick(View view) { } }); - DatabaseHandler db = new DatabaseHandler(this); - RemindersAdapter adapter = new RemindersAdapter(this, R.layout.activity_reminder_item, db.getReminders()); - listView.setAdapter(adapter); + listView = (ListView) findViewById(R.id.activity_reminders_listview); + listView.setAdapter(presenter.getAdapter()); + addFab.postDelayed(new Runnable() { + @Override + public void run() { + AnimationTools.startCircularReveal(addFab); + } + }, 600); + } + + public void updateReminder(Reminder reminder) { + presenter.updateReminder(reminder); + } + + public void updateRemindersList() { + listView.setAdapter(presenter.getAdapter()); + listView.invalidate(); } @Override @@ -65,6 +84,42 @@ public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute, int se Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, hourOfDay); cal.set(Calendar.MINUTE, minute); - FormatDateTime formatDateTime = new FormatDateTime(getApplicationContext()); + // Id is HOURS+MINUTES to avoid duplicates + String concatenatedId = hourOfDay + "" + minute; + // Metric is always glucose until I write support for other metrics so... + // TODO: Add Reminders for other metrics + // Also oneTime is always set to false until I implement one time alarms + // TODO: Implement one time alarms + presenter.addReminder(Long.parseLong(concatenatedId), cal.getTime(), "glucose", false, true); + } + + public void showDuplicateError() { + View parentLayout = findViewById(R.id.activity_reminders_root_view); + Snackbar.make(parentLayout, "This reminder already exists.", Snackbar.LENGTH_SHORT).show(); + } + + public void showBottomSheetDialog(final long id) { + final BottomSheetDialog mBottomSheetDialog = new BottomSheetDialog(this); + View sheetView = getLayoutInflater().inflate(R.layout.fragment_reminders_bottom_sheet, null); + LinearLayout delete = (LinearLayout) sheetView.findViewById(R.id.fragment_history_bottom_sheet_delete); + delete.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + presenter.deleteReminder(id); + updateRemindersList(); + mBottomSheetDialog.dismiss(); + } + }); + + mBottomSheetDialog.setContentView(sheetView); + mBottomSheetDialog.show(); + } + + @Override + public boolean onOptionsItemSelected(MenuItem menuItem) { + if (menuItem.getItemId() == android.R.id.home) { + finish(); + } + return super.onOptionsItemSelected(menuItem); } } diff --git a/app/src/main/java/org/glucosio/android/adapter/RemindersAdapter.java b/app/src/main/java/org/glucosio/android/adapter/RemindersAdapter.java index 19c2b3c5..712c5e05 100644 --- a/app/src/main/java/org/glucosio/android/adapter/RemindersAdapter.java +++ b/app/src/main/java/org/glucosio/android/adapter/RemindersAdapter.java @@ -6,15 +6,24 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; +import android.widget.CompoundButton; +import android.widget.LinearLayout; +import android.widget.Switch; +import android.widget.TextView; import org.glucosio.android.R; +import org.glucosio.android.activity.RemindersActivity; import org.glucosio.android.db.Reminder; +import org.glucosio.android.tools.FormatDateTime; +import java.util.Calendar; import java.util.List; public class RemindersAdapter extends ArrayAdapter { private Context context; private List items; + private Calendar calendar; + private FormatDateTime formatDateTime; public RemindersAdapter(Context context, int textViewResourceId) { super(context, textViewResourceId); @@ -24,6 +33,8 @@ public RemindersAdapter(Context context, int resource, List items) { super(context, resource, items); this.context = context; this.items = items; + calendar = Calendar.getInstance(); + formatDateTime = new FormatDateTime(context); } @Override @@ -35,7 +46,46 @@ public View getView(int position, View convertView, @NonNull ViewGroup parent) { v = vi.inflate(R.layout.activity_reminder_item, parent, false); } + LinearLayout rootView = (LinearLayout) v.findViewById(R.id.activity_reminders_root_view); + TextView timeTextView = (TextView) v.findViewById(R.id.activity_reminders_item_time); + Switch activeSwitch = (Switch) v.findViewById(R.id.activity_reminders_item_enabled); + final Reminder reminder = items.get(position); + final long reminderId = reminder.getId(); + + calendar.setTime(reminder.getAlarmTime()); + timeTextView.setText(formatDateTime.getTime(calendar)); + activeSwitch.setChecked(reminder.isActive()); + + activeSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + Reminder updatedReminder = new Reminder(reminder.getId(), reminder.getAlarmTime(), reminder.getMetric(), + reminder.isOneTime(), reminder.isActive()); + updatedReminder.setActive(b); + updateReminder(updatedReminder); + } + }); + + rootView.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View view) { + showBottomSheetMenu(reminderId); + return true; + } + }); return v; } + + private void showBottomSheetMenu(long id) { + ((RemindersActivity) context).showBottomSheetDialog(id); + } + + private void updateReminder(Reminder reminder) { + // Should be always true. + // I HOPE... + if (context instanceof RemindersActivity) { + ((RemindersActivity) context).updateReminder(reminder); + } + } } diff --git a/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java b/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java index 4406d8ad..0c88f03b 100644 --- a/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java +++ b/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java @@ -90,24 +90,40 @@ public void updateUser(User user) { realm.commitTransaction(); } - public void addReminder(Reminder reminder) { - realm.beginTransaction(); - realm.copyToRealm(reminder); - realm.commitTransaction(); + public boolean addReminder(Reminder reminder) { + // Check for duplicates first + if (getReminder(reminder.getId()) == null) { + realm.beginTransaction(); + realm.copyToRealm(reminder); + realm.commitTransaction(); + return true; + } + + return false; } public void updateReminder(Reminder reminder) { realm.beginTransaction(); - realm.copyToRealm(reminder); + realm.copyToRealmOrUpdate(reminder); realm.commitTransaction(); } - public void deleteRemider(Reminder reminder) { + public void deleteReminder(Reminder reminder) { realm.beginTransaction(); reminder.deleteFromRealm(); realm.commitTransaction(); } + public void deleteReminder(long id) { + deleteReminder(getReminder(id)); + } + + public Reminder getReminder(long id) { + return realm.where(Reminder.class) + .equalTo("id", id) + .findFirst(); + } + public List getReminders() { RealmResults results = realm.where(Reminder.class) diff --git a/app/src/main/java/org/glucosio/android/db/Reminder.java b/app/src/main/java/org/glucosio/android/db/Reminder.java index b3e17b38..3a6cc25b 100644 --- a/app/src/main/java/org/glucosio/android/db/Reminder.java +++ b/app/src/main/java/org/glucosio/android/db/Reminder.java @@ -17,7 +17,8 @@ public class Reminder extends RealmObject { public Reminder() { } - public Reminder(Date alarmTime, String metric, boolean oneTime, boolean active) { + public Reminder(long id, Date alarmTime, String metric, boolean oneTime, boolean active) { + this.id = id; this.alarmTime = alarmTime; this.metric = metric; this.oneTime = oneTime; diff --git a/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java b/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java index 7dfbee70..42cca7d3 100644 --- a/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java @@ -1,18 +1,50 @@ package org.glucosio.android.presenter; +import android.widget.ListAdapter; + +import org.glucosio.android.R; import org.glucosio.android.activity.RemindersActivity; +import org.glucosio.android.adapter.RemindersAdapter; +import org.glucosio.android.db.DatabaseHandler; +import org.glucosio.android.db.Reminder; import java.util.Calendar; +import java.util.Date; public class RemindersPresenter { - RemindersActivity activity; + private RemindersActivity activity; + private DatabaseHandler db; public RemindersPresenter(RemindersActivity activity) { this.activity = activity; + db = new DatabaseHandler(activity); } public Calendar getCalendar() { return Calendar.getInstance(); } + + public void updateReminder(Reminder reminder) { + // Create a new object RealM unattached + db.updateReminder(reminder); + } + + public ListAdapter getAdapter() { + return new RemindersAdapter(activity, R.layout.activity_reminder_item, db.getReminders()); + } + + public void addReminder(long id, Date alarmTime, String metric, boolean oneTime, boolean active) { + Reminder reminder = new Reminder(id, alarmTime, metric, oneTime, active); + boolean added = db.addReminder(reminder); + if (added) { + activity.updateRemindersList(); + } else { + activity.showDuplicateError(); + } + } + + public void deleteReminder(long id) { + db.deleteReminder(id); + } } diff --git a/app/src/main/res/layout/activity_reminder_item.xml b/app/src/main/res/layout/activity_reminder_item.xml index dcccf4d7..1a4269c2 100644 --- a/app/src/main/res/layout/activity_reminder_item.xml +++ b/app/src/main/res/layout/activity_reminder_item.xml @@ -20,9 +20,13 @@ @@ -51,6 +55,11 @@ android:checked="true" /> + + + + android:layout_height="match_parent" + android:layout_below="@id/activity_main_toolbar" /> diff --git a/app/src/main/res/layout/fragment_reminders_bottom_sheet.xml b/app/src/main/res/layout/fragment_reminders_bottom_sheet.xml new file mode 100644 index 00000000..dd9bfc73 --- /dev/null +++ b/app/src/main/res/layout/fragment_reminders_bottom_sheet.xml @@ -0,0 +1,33 @@ + + + + + + + + + + \ No newline at end of file From 89e65430e4bdd1b3868198151a8a6a169e762ea4 Mon Sep 17 00:00:00 2001 From: paolorotolo Date: Thu, 8 Sep 2016 19:43:22 +0200 Subject: [PATCH 06/82] Add method to get all active reminders --- app/src/main/AndroidManifest.xml | 4 +-- .../android/activity/RemindersActivity.java | 9 ++++++ .../glucosio/android/db/DatabaseHandler.java | 14 +++++++++ .../android/presenter/RemindersPresenter.java | 8 +++++ .../receivers/BootBroadcastReceiver.java | 4 ++- app/src/main/res/menu/menu_reminders.xml | 30 +++++++++++++++++++ 6 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 app/src/main/res/menu/menu_reminders.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 79ad93e0..10605035 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -201,8 +201,8 @@ + android:name="org.glucosio.android.receivers.BootBroadcastReceiver" + android:enabled="false"> diff --git a/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java b/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java index 5a2ff9d3..bb2e4c54 100644 --- a/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java @@ -6,6 +6,7 @@ import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; +import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.LinearLayout; @@ -115,10 +116,18 @@ public void onClick(View view) { mBottomSheetDialog.show(); } + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu_reminders, menu); + return true; + } + @Override public boolean onOptionsItemSelected(MenuItem menuItem) { if (menuItem.getItemId() == android.R.id.home) { finish(); + } else if (menuItem.getItemId() == R.id.action_menu_save){ + presenter.saveReminders(); } return super.onOptionsItemSelected(menuItem); } diff --git a/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java b/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java index 0c88f03b..0b0d71d5 100644 --- a/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java +++ b/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java @@ -118,6 +118,20 @@ public void deleteReminder(long id) { deleteReminder(getReminder(id)); } + public List getActiveReminders(){ + ArrayList activeAlarmsDates = new ArrayList<>(); + RealmResults activeRemindersList = + realm.where(Reminder.class) + .equalTo("active", true) + .findAll(); + + for (int i=0; i activeDates = db.getActiveReminders(); + + + activity.finish(); + } } diff --git a/app/src/main/java/org/glucosio/android/receivers/BootBroadcastReceiver.java b/app/src/main/java/org/glucosio/android/receivers/BootBroadcastReceiver.java index 58704565..06484252 100644 --- a/app/src/main/java/org/glucosio/android/receivers/BootBroadcastReceiver.java +++ b/app/src/main/java/org/glucosio/android/receivers/BootBroadcastReceiver.java @@ -7,7 +7,9 @@ public class BootBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - // Set again reminders + if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")){ + // Set alarms here + } } } \ No newline at end of file diff --git a/app/src/main/res/menu/menu_reminders.xml b/app/src/main/res/menu/menu_reminders.xml new file mode 100644 index 00000000..d39ea1ca --- /dev/null +++ b/app/src/main/res/menu/menu_reminders.xml @@ -0,0 +1,30 @@ + + + + + + + \ No newline at end of file From 5114f8a580f2154c91645db6636d8cc01324c46b Mon Sep 17 00:00:00 2001 From: Glucat Date: Thu, 8 Sep 2016 18:00:16 +0000 Subject: [PATCH 07/82] Automatic translation import (build 924). --- app/src/main/res/values-lo-rLA/strings.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/res/values-lo-rLA/strings.xml b/app/src/main/res/values-lo-rLA/strings.xml index 4a9c30a8..e8f60212 100644 --- a/app/src/main/res/values-lo-rLA/strings.xml +++ b/app/src/main/res/values-lo-rLA/strings.xml @@ -29,7 +29,6 @@ ເພີ່ມການອ່ານໃຫມ່ ສະບາຍດີ. ສະບາຍດີ. - ເງື່ອນໄຂການໃຊ້. ພວກເຮົາຕ້ອງການຮູ້ຂໍ້ມູນທົ່ວໄປຂອງທ່ານກ່ອນການເລີມນຳໃຊ້ງານ. ປະເທດ ອາຍຸ From 99b510b281dd92933ba6d212a47f2d5c8d23cc0c Mon Sep 17 00:00:00 2001 From: paolorotolo Date: Fri, 9 Sep 2016 19:35:56 +0200 Subject: [PATCH 08/82] Continue work on Reminders. --- app/src/main/AndroidManifest.xml | 2 +- .../glucosio/android/db/DatabaseHandler.java | 4 +- .../org/glucosio/android/db/Migration.java | 2 +- .../android/presenter/RemindersPresenter.java | 7 +- .../receivers/BootBroadcastReceiver.java | 15 ---- .../receivers/GlucosioBroadcastReceiver.java | 22 ++++++ .../android/tools/GlucosioAlarmManager.java | 68 +++++++++++++++++++ 7 files changed, 97 insertions(+), 23 deletions(-) delete mode 100644 app/src/main/java/org/glucosio/android/receivers/BootBroadcastReceiver.java create mode 100644 app/src/main/java/org/glucosio/android/receivers/GlucosioBroadcastReceiver.java create mode 100644 app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 10605035..2d41c0b4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -201,7 +201,7 @@ diff --git a/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java b/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java index 0b0d71d5..5b6fb681 100644 --- a/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java +++ b/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java @@ -118,7 +118,7 @@ public void deleteReminder(long id) { deleteReminder(getReminder(id)); } - public List getActiveReminders(){ + public boolean areRemindersActive() { ArrayList activeAlarmsDates = new ArrayList<>(); RealmResults activeRemindersList = realm.where(Reminder.class) @@ -129,7 +129,7 @@ public List getActiveReminders(){ activeAlarmsDates.add(activeRemindersList.get(i).getAlarmTime()); } - return activeAlarmsDates; + return activeAlarmsDates.size() > 0; } public Reminder getReminder(long id) { diff --git a/app/src/main/java/org/glucosio/android/db/Migration.java b/app/src/main/java/org/glucosio/android/db/Migration.java index 3809f5fc..0808da88 100644 --- a/app/src/main/java/org/glucosio/android/db/Migration.java +++ b/app/src/main/java/org/glucosio/android/db/Migration.java @@ -164,7 +164,7 @@ public void apply(DynamicRealmObject obj) { if (oldVersion == 3) { // Add Reminders - RealmObjectSchema remindersSchema = schema.create("Reminders") + RealmObjectSchema remindersSchema = schema.create("Reminder") .addField("id", Long.class, FieldAttribute.PRIMARY_KEY, FieldAttribute.REQUIRED) .addField("metric", String.class, FieldAttribute.REQUIRED) .addField("alarmTime", Date.class) diff --git a/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java b/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java index 4ed12fb7..104e8a18 100644 --- a/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java @@ -7,10 +7,10 @@ import org.glucosio.android.adapter.RemindersAdapter; import org.glucosio.android.db.DatabaseHandler; import org.glucosio.android.db.Reminder; +import org.glucosio.android.tools.GlucosioAlarmManager; import java.util.Calendar; import java.util.Date; -import java.util.List; public class RemindersPresenter { @@ -50,9 +50,8 @@ public void deleteReminder(long id) { } public void saveReminders() { - List activeDates = db.getActiveReminders(); - - + GlucosioAlarmManager alarmManager = new GlucosioAlarmManager(activity.getApplicationContext()); + alarmManager.setAlarms(); activity.finish(); } } diff --git a/app/src/main/java/org/glucosio/android/receivers/BootBroadcastReceiver.java b/app/src/main/java/org/glucosio/android/receivers/BootBroadcastReceiver.java deleted file mode 100644 index 06484252..00000000 --- a/app/src/main/java/org/glucosio/android/receivers/BootBroadcastReceiver.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.glucosio.android.receivers; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; - -public class BootBroadcastReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")){ - // Set alarms here - - } - } -} \ No newline at end of file diff --git a/app/src/main/java/org/glucosio/android/receivers/GlucosioBroadcastReceiver.java b/app/src/main/java/org/glucosio/android/receivers/GlucosioBroadcastReceiver.java new file mode 100644 index 00000000..30249aee --- /dev/null +++ b/app/src/main/java/org/glucosio/android/receivers/GlucosioBroadcastReceiver.java @@ -0,0 +1,22 @@ +package org.glucosio.android.receivers; + +import android.content.Context; +import android.content.Intent; +import android.widget.Toast; + +import org.glucosio.android.tools.GlucosioAlarmManager; + +public class GlucosioBroadcastReceiver extends android.content.BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")){ + // Set alarms at boot + GlucosioAlarmManager alarmManager = new GlucosioAlarmManager(context); + alarmManager.setAlarms(); + + Toast.makeText(context, "Setting alarms...", Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(context, "Test!", Toast.LENGTH_SHORT).show(); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java b/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java new file mode 100644 index 00000000..8a14dcb9 --- /dev/null +++ b/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java @@ -0,0 +1,68 @@ +package org.glucosio.android.tools; + +import android.app.AlarmManager; +import android.app.PendingIntent; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.widget.Toast; + +import org.glucosio.android.db.DatabaseHandler; +import org.glucosio.android.db.Reminder; +import org.glucosio.android.receivers.GlucosioBroadcastReceiver; + +import java.util.Calendar; +import java.util.List; + +public class GlucosioAlarmManager { + List reminders; + Context context; + AlarmManager alarmMgr; + DatabaseHandler db; + + public GlucosioAlarmManager(Context context) { + this.context = context; + this.db = new DatabaseHandler(context); + this.alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + } + + public void setAlarms() { + reminders = db.getReminders(); + + // if there are some active alarms, start receiver to set them at boot + enableBootReceiver(db.areRemindersActive()); + + // Set an alarm for each date + for (int i = 0; i < reminders.size(); i++) { + Reminder reminder = reminders.get(i); + + Intent intent = new Intent(context, GlucosioBroadcastReceiver.class); + intent.putExtra("metric", reminder.getMetric()); + + PendingIntent alarmIntent = PendingIntent.getBroadcast(context, (int) reminder.getId(), intent, 0); + + if (reminder.isActive()) { + Calendar cal = Calendar.getInstance(); + cal.setTime(reminder.getAlarmTime()); + alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), + AlarmManager.INTERVAL_DAY, alarmIntent); + + Toast.makeText(context, "Setting alarm" + reminder.getId(), Toast.LENGTH_LONG).show(); + } else { + alarmMgr.cancel(alarmIntent); + } + } + } + + private void enableBootReceiver(boolean value) { + ComponentName receiver = new ComponentName(context, GlucosioBroadcastReceiver.class); + PackageManager pm = context.getPackageManager(); + + int componentState = value ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED; + + pm.setComponentEnabledSetting(receiver, + componentState, + PackageManager.DONT_KILL_APP); + } +} From 7a305cc4caa4595aac7b87233fa9c00c450a6e8c Mon Sep 17 00:00:00 2001 From: paolorotolo Date: Sat, 10 Sep 2016 18:28:38 +0200 Subject: [PATCH 09/82] Fix migration. --- app/src/main/java/org/glucosio/android/db/Migration.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/db/Migration.java b/app/src/main/java/org/glucosio/android/db/Migration.java index 0808da88..aa472573 100644 --- a/app/src/main/java/org/glucosio/android/db/Migration.java +++ b/app/src/main/java/org/glucosio/android/db/Migration.java @@ -166,10 +166,10 @@ public void apply(DynamicRealmObject obj) { // Add Reminders RealmObjectSchema remindersSchema = schema.create("Reminder") .addField("id", Long.class, FieldAttribute.PRIMARY_KEY, FieldAttribute.REQUIRED) - .addField("metric", String.class, FieldAttribute.REQUIRED) + .addField("metric", String.class) .addField("alarmTime", Date.class) - .addField("active", Boolean.class) - .addField("oneTime", Boolean.class); + .addField("active", Boolean.class, FieldAttribute.REQUIRED) + .addField("oneTime", Boolean.class, FieldAttribute.REQUIRED); oldVersion++; } } From 7556aa9aea1034def38e520893f15d65867c54ff Mon Sep 17 00:00:00 2001 From: paolorotolo Date: Sun, 11 Sep 2016 12:10:22 +0200 Subject: [PATCH 10/82] Add reminders notification. --- app/src/main/AndroidManifest.xml | 1 + .../android/activity/RemindersActivity.java | 1 + .../receivers/GlucosioBroadcastReceiver.java | 12 +-- .../android/tools/GlucosioAlarmManager.java | 3 - .../tools/GlucosioNotificationManager.java | 81 +++++++++++++++++++ .../main/res/layout/activity_reminders.xml | 7 ++ app/src/main/res/values/strings.xml | 3 + 7 files changed, 99 insertions(+), 9 deletions(-) create mode 100644 app/src/main/java/org/glucosio/android/tools/GlucosioNotificationManager.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2d41c0b4..7503dcdb 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -205,6 +205,7 @@ android:enabled="false"> + diff --git a/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java b/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java index bb2e4c54..a1a8265e 100644 --- a/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java @@ -62,6 +62,7 @@ public void onClick(View view) { }); listView = (ListView) findViewById(R.id.activity_reminders_listview); + listView.setEmptyView(findViewById(R.id.activity_reminders_listview_empty)); listView.setAdapter(presenter.getAdapter()); addFab.postDelayed(new Runnable() { @Override diff --git a/app/src/main/java/org/glucosio/android/receivers/GlucosioBroadcastReceiver.java b/app/src/main/java/org/glucosio/android/receivers/GlucosioBroadcastReceiver.java index 30249aee..ab24ad5d 100644 --- a/app/src/main/java/org/glucosio/android/receivers/GlucosioBroadcastReceiver.java +++ b/app/src/main/java/org/glucosio/android/receivers/GlucosioBroadcastReceiver.java @@ -2,21 +2,21 @@ import android.content.Context; import android.content.Intent; -import android.widget.Toast; import org.glucosio.android.tools.GlucosioAlarmManager; +import org.glucosio.android.tools.GlucosioNotificationManager; public class GlucosioBroadcastReceiver extends android.content.BroadcastReceiver { + @Override public void onReceive(Context context, Intent intent) { - if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")){ - // Set alarms at boot + if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { GlucosioAlarmManager alarmManager = new GlucosioAlarmManager(context); alarmManager.setAlarms(); - - Toast.makeText(context, "Setting alarms...", Toast.LENGTH_SHORT).show(); } else { - Toast.makeText(context, "Test!", Toast.LENGTH_SHORT).show(); + GlucosioNotificationManager notificationManager = new GlucosioNotificationManager(context); + notificationManager.sendReminderNotification(); } } + } \ No newline at end of file diff --git a/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java b/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java index 8a14dcb9..b1ef00b4 100644 --- a/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java +++ b/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java @@ -6,7 +6,6 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.widget.Toast; import org.glucosio.android.db.DatabaseHandler; import org.glucosio.android.db.Reminder; @@ -47,8 +46,6 @@ public void setAlarms() { cal.setTime(reminder.getAlarmTime()); alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent); - - Toast.makeText(context, "Setting alarm" + reminder.getId(), Toast.LENGTH_LONG).show(); } else { alarmMgr.cancel(alarmIntent); } diff --git a/app/src/main/java/org/glucosio/android/tools/GlucosioNotificationManager.java b/app/src/main/java/org/glucosio/android/tools/GlucosioNotificationManager.java new file mode 100644 index 00000000..3ccb2309 --- /dev/null +++ b/app/src/main/java/org/glucosio/android/tools/GlucosioNotificationManager.java @@ -0,0 +1,81 @@ +package org.glucosio.android.tools; + +import android.app.Notification; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.media.RingtoneManager; +import android.os.Build; +import android.support.v4.app.NotificationManagerCompat; + +import org.glucosio.android.R; +import org.glucosio.android.activity.AddGlucoseActivity; + +public class GlucosioNotificationManager { + private static final String REMOTE_INPUT_KEY = "glucosio_remote_key"; + private static final int NOTIFICATION_ID = 011; + private Context context; + + public GlucosioNotificationManager(Context context) { + this.context = context; + } + + public void sendReminderNotification() { + String NOTIFICATION_TITLE = "\u23f0"; + String NOTIFICATION_TEXT = context.getString(R.string.reminders_notification_text); + String NOTIFICATION_ACTION = context.getString(R.string.reminders_notification_action); + + Intent intent = new Intent(context, AddGlucoseActivity.class); + intent.putExtra("glucose_reminder_notification", true); + PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); + + Notification notification; +/* + // ADD LATER TO SUPPORT NOUGAT DIRECT REPLY + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + RemoteInput remoteInput = new RemoteInput.Builder(REMOTE_INPUT_KEY) + .setLabel(NOTIFICATION_ACTION) + .build(); + + Notification.Action actionNotification = new Notification.Action.Builder( + R.drawable.ic_stat_glucosio, + NOTIFICATION_ACTION, pendingIntent) + .addRemoteInput(remoteInput) + .build(); + + notification = new Notification.Builder(context) + .setContentTitle("\u23f0") + .setContentText(NOTIFICATION_TEXT) + .setSmallIcon(R.drawable.ic_stat_glucosio) + .setColor(context.getColor(R.color.glucosio_pink)) + .setActions(actionNotification) + .build(); + } else {*/ + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + notification = new Notification.Builder(context) + .setContentTitle(NOTIFICATION_TITLE) + .setContentText(NOTIFICATION_TEXT) + .setAutoCancel(true) + .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) + .setVibrate(new long[]{1000, 1000}) + .setColor(context.getColor(R.color.glucosio_pink)) + .setContentIntent(pendingIntent) + .setSmallIcon(R.drawable.ic_stat_glucosio) + .build(); + } else { + notification = new Notification.Builder(context) + .setContentTitle(NOTIFICATION_TITLE) + .setContentText(NOTIFICATION_TEXT) + .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) + .setVibrate(new long[]{1000, 1000}) + .setAutoCancel(true) + .setContentIntent(pendingIntent) + .setSmallIcon(R.drawable.ic_stat_glucosio) + .build(); + } + + NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context); + notificationManagerCompat.notify(NOTIFICATION_ID, notification); + } +} diff --git a/app/src/main/res/layout/activity_reminders.xml b/app/src/main/res/layout/activity_reminders.xml index c7239856..820f04ef 100644 --- a/app/src/main/res/layout/activity_reminders.xml +++ b/app/src/main/res/layout/activity_reminders.xml @@ -25,6 +25,13 @@ android:layout_height="match_parent" android:layout_below="@id/activity_main_toolbar" /> + + history save Reminders + Time to log your glucose level! + Add reading + No reminders set. Add a new reminder here. From 8b51d7252f85594cd0b6130f22e7fcac89de638f Mon Sep 17 00:00:00 2001 From: paolorotolo Date: Mon, 12 Sep 2016 16:47:52 +0200 Subject: [PATCH 11/82] Fix some issues. --- .../android/activity/RemindersActivity.java | 12 ++----- .../glucosio/android/db/DatabaseHandler.java | 9 ++--- .../android/presenter/RemindersPresenter.java | 2 +- .../receivers/GlucosioBroadcastReceiver.java | 16 ++++++--- .../android/tools/GlucosioAlarmManager.java | 8 +++-- .../tools/GlucosioNotificationManager.java | 34 +++++++------------ app/src/main/res/menu/menu_reminders.xml | 30 ---------------- app/src/main/res/values/strings.xml | 1 + 8 files changed, 36 insertions(+), 76 deletions(-) delete mode 100644 app/src/main/res/menu/menu_reminders.xml diff --git a/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java b/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java index a1a8265e..34a4b082 100644 --- a/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java @@ -74,6 +74,7 @@ public void run() { public void updateReminder(Reminder reminder) { presenter.updateReminder(reminder); + presenter.saveReminders(); } public void updateRemindersList() { @@ -97,7 +98,7 @@ public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute, int se public void showDuplicateError() { View parentLayout = findViewById(R.id.activity_reminders_root_view); - Snackbar.make(parentLayout, "This reminder already exists.", Snackbar.LENGTH_SHORT).show(); + Snackbar.make(parentLayout, R.string.activitiy_reminders_error_duplicate, Snackbar.LENGTH_SHORT).show(); } public void showBottomSheetDialog(final long id) { @@ -117,18 +118,11 @@ public void onClick(View view) { mBottomSheetDialog.show(); } - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.menu_reminders, menu); - return true; - } - @Override public boolean onOptionsItemSelected(MenuItem menuItem) { if (menuItem.getItemId() == android.R.id.home) { - finish(); - } else if (menuItem.getItemId() == R.id.action_menu_save){ presenter.saveReminders(); + finish(); } return super.onOptionsItemSelected(menuItem); } diff --git a/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java b/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java index 5b6fb681..acb87cf6 100644 --- a/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java +++ b/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java @@ -119,17 +119,12 @@ public void deleteReminder(long id) { } public boolean areRemindersActive() { - ArrayList activeAlarmsDates = new ArrayList<>(); RealmResults activeRemindersList = realm.where(Reminder.class) .equalTo("active", true) .findAll(); - for (int i=0; i 0; + return activeRemindersList.size() > 0; } public Reminder getReminder(long id) { @@ -142,7 +137,7 @@ public List getReminders() { RealmResults results = realm.where(Reminder.class) .findAllSorted("alarmTime", Sort.DESCENDING); - ArrayList reminders = new ArrayList<>(); + List reminders = new ArrayList<>(results.size()); for (int i = 0; i < results.size(); i++) { reminders.add(results.get(i)); } diff --git a/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java b/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java index 104e8a18..3d88cfc7 100644 --- a/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java @@ -40,6 +40,7 @@ public void addReminder(long id, Date alarmTime, String metric, boolean oneTime, boolean added = db.addReminder(reminder); if (added) { activity.updateRemindersList(); + saveReminders(); } else { activity.showDuplicateError(); } @@ -52,6 +53,5 @@ public void deleteReminder(long id) { public void saveReminders() { GlucosioAlarmManager alarmManager = new GlucosioAlarmManager(activity.getApplicationContext()); alarmManager.setAlarms(); - activity.finish(); } } diff --git a/app/src/main/java/org/glucosio/android/receivers/GlucosioBroadcastReceiver.java b/app/src/main/java/org/glucosio/android/receivers/GlucosioBroadcastReceiver.java index ab24ad5d..ce6d413d 100644 --- a/app/src/main/java/org/glucosio/android/receivers/GlucosioBroadcastReceiver.java +++ b/app/src/main/java/org/glucosio/android/receivers/GlucosioBroadcastReceiver.java @@ -2,6 +2,7 @@ import android.content.Context; import android.content.Intent; +import android.widget.Toast; import org.glucosio.android.tools.GlucosioAlarmManager; import org.glucosio.android.tools.GlucosioNotificationManager; @@ -11,12 +12,19 @@ public class GlucosioBroadcastReceiver extends android.content.BroadcastReceiver @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { - GlucosioAlarmManager alarmManager = new GlucosioAlarmManager(context); - alarmManager.setAlarms(); + setAlarms(context); } else { - GlucosioNotificationManager notificationManager = new GlucosioNotificationManager(context); - notificationManager.sendReminderNotification(); + if (intent.getBooleanExtra("glucosio_reminder", false)) { + GlucosioNotificationManager notificationManager = new GlucosioNotificationManager(context); + notificationManager.sendReminderNotification(); + } else { + setAlarms(context); + } } } + private void setAlarms(Context context) { + GlucosioAlarmManager alarmManager = new GlucosioAlarmManager(context); + alarmManager.setAlarms(); + } } \ No newline at end of file diff --git a/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java b/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java index b1ef00b4..377ae756 100644 --- a/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java +++ b/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java @@ -28,9 +28,7 @@ public GlucosioAlarmManager(Context context) { public void setAlarms() { reminders = db.getReminders(); - - // if there are some active alarms, start receiver to set them at boot - enableBootReceiver(db.areRemindersActive()); + int activeRemindersCount = 0; // Set an alarm for each date for (int i = 0; i < reminders.size(); i++) { @@ -38,10 +36,12 @@ public void setAlarms() { Intent intent = new Intent(context, GlucosioBroadcastReceiver.class); intent.putExtra("metric", reminder.getMetric()); + intent.putExtra("glucosio_reminder", true); PendingIntent alarmIntent = PendingIntent.getBroadcast(context, (int) reminder.getId(), intent, 0); if (reminder.isActive()) { + activeRemindersCount++; Calendar cal = Calendar.getInstance(); cal.setTime(reminder.getAlarmTime()); alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), @@ -50,6 +50,8 @@ public void setAlarms() { alarmMgr.cancel(alarmIntent); } } + + enableBootReceiver(activeRemindersCount > 0); } private void enableBootReceiver(boolean value) { diff --git a/app/src/main/java/org/glucosio/android/tools/GlucosioNotificationManager.java b/app/src/main/java/org/glucosio/android/tools/GlucosioNotificationManager.java index 3ccb2309..917c7dd0 100644 --- a/app/src/main/java/org/glucosio/android/tools/GlucosioNotificationManager.java +++ b/app/src/main/java/org/glucosio/android/tools/GlucosioNotificationManager.java @@ -29,7 +29,7 @@ public void sendReminderNotification() { intent.putExtra("glucose_reminder_notification", true); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); - Notification notification; + Notification.Builder notificationBuilder; /* // ADD LATER TO SUPPORT NOUGAT DIRECT REPLY if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { @@ -51,30 +51,20 @@ public void sendReminderNotification() { .setActions(actionNotification) .build(); } else {*/ + notificationBuilder = new Notification.Builder(context) + .setContentTitle(NOTIFICATION_TITLE) + .setContentText(NOTIFICATION_TEXT) + .setAutoCancel(true) + .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) + .setVibrate(new long[]{1000, 1000}) + .setContentIntent(pendingIntent) + .setSmallIcon(R.drawable.ic_stat_glucosio); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - notification = new Notification.Builder(context) - .setContentTitle(NOTIFICATION_TITLE) - .setContentText(NOTIFICATION_TEXT) - .setAutoCancel(true) - .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) - .setVibrate(new long[]{1000, 1000}) - .setColor(context.getColor(R.color.glucosio_pink)) - .setContentIntent(pendingIntent) - .setSmallIcon(R.drawable.ic_stat_glucosio) - .build(); - } else { - notification = new Notification.Builder(context) - .setContentTitle(NOTIFICATION_TITLE) - .setContentText(NOTIFICATION_TEXT) - .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) - .setVibrate(new long[]{1000, 1000}) - .setAutoCancel(true) - .setContentIntent(pendingIntent) - .setSmallIcon(R.drawable.ic_stat_glucosio) - .build(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + notificationBuilder.setColor(context.getColor(R.color.glucosio_pink)); } + Notification notification = notificationBuilder.build(); NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context); notificationManagerCompat.notify(NOTIFICATION_ID, notification); } diff --git a/app/src/main/res/menu/menu_reminders.xml b/app/src/main/res/menu/menu_reminders.xml deleted file mode 100644 index d39ea1ca..00000000 --- a/app/src/main/res/menu/menu_reminders.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - \ 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 9aca2f5d..92dd858c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -452,4 +452,5 @@ Time to log your glucose level! Add reading No reminders set. Add a new reminder here. + This reminder already exists. From b5eb81da4671169ab7458940447aba749c98b014 Mon Sep 17 00:00:00 2001 From: Eugen Martynov Date: Mon, 12 Sep 2016 21:09:13 +0200 Subject: [PATCH 12/82] Codacy warnings fixed --- .../android/activity/RemindersActivity.java | 1 - .../java/org/glucosio/android/db/Migration.java | 14 +++++++------- .../receivers/GlucosioBroadcastReceiver.java | 1 - .../android/tools/GlucosioAlarmManager.java | 9 ++++----- .../android/tools/GlucosioNotificationManager.java | 6 +++--- 5 files changed, 14 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java b/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java index 34a4b082..9833a07f 100644 --- a/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java @@ -6,7 +6,6 @@ import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; -import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.LinearLayout; diff --git a/app/src/main/java/org/glucosio/android/db/Migration.java b/app/src/main/java/org/glucosio/android/db/Migration.java index aa472573..420a056a 100644 --- a/app/src/main/java/org/glucosio/android/db/Migration.java +++ b/app/src/main/java/org/glucosio/android/db/Migration.java @@ -29,7 +29,7 @@ import io.realm.RealmObjectSchema; import io.realm.RealmSchema; -public class Migration implements RealmMigration { +class Migration implements RealmMigration { @Override public void migrate(final DynamicRealm realm, long oldVersion, long newVersion) { @@ -97,28 +97,28 @@ class HB1ACReading ************************************************/ if (oldVersion == 0) { - RealmObjectSchema weightSchema = schema.create("WeightReading") + schema.create("WeightReading") .addField("id", Long.class, FieldAttribute.PRIMARY_KEY, FieldAttribute.REQUIRED) .addField("created", Date.class) .addField("reading", Integer.class, FieldAttribute.REQUIRED); - RealmObjectSchema pressureSchema = schema.create("PressureReading") + schema.create("PressureReading") .addField("id", Long.class, FieldAttribute.PRIMARY_KEY, FieldAttribute.REQUIRED) .addField("created", Date.class) .addField("minReading", Integer.class, FieldAttribute.REQUIRED) .addField("maxReading", Integer.class, FieldAttribute.REQUIRED); - RealmObjectSchema ketoneSchema = schema.create("KetoneReading") + schema.create("KetoneReading") .addField("id", Long.class, FieldAttribute.PRIMARY_KEY, FieldAttribute.REQUIRED) .addField("created", Date.class) .addField("reading", Double.class, FieldAttribute.REQUIRED); - RealmObjectSchema HB1ACSchema = schema.create("HB1ACReading") + schema.create("HB1ACReading") .addField("id", Long.class, FieldAttribute.PRIMARY_KEY, FieldAttribute.REQUIRED) .addField("created", Date.class) .addField("reading", Integer.class, FieldAttribute.REQUIRED); - RealmObjectSchema cholesterolSchema = schema.create("CholesterolReading") + schema.create("CholesterolReading") .addField("id", Long.class, FieldAttribute.PRIMARY_KEY, FieldAttribute.REQUIRED) .addField("created", Date.class) .addField("totalReading", Integer.class, FieldAttribute.REQUIRED) @@ -164,7 +164,7 @@ public void apply(DynamicRealmObject obj) { if (oldVersion == 3) { // Add Reminders - RealmObjectSchema remindersSchema = schema.create("Reminder") + schema.create("Reminder") .addField("id", Long.class, FieldAttribute.PRIMARY_KEY, FieldAttribute.REQUIRED) .addField("metric", String.class) .addField("alarmTime", Date.class) diff --git a/app/src/main/java/org/glucosio/android/receivers/GlucosioBroadcastReceiver.java b/app/src/main/java/org/glucosio/android/receivers/GlucosioBroadcastReceiver.java index ce6d413d..07b826e1 100644 --- a/app/src/main/java/org/glucosio/android/receivers/GlucosioBroadcastReceiver.java +++ b/app/src/main/java/org/glucosio/android/receivers/GlucosioBroadcastReceiver.java @@ -2,7 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.widget.Toast; import org.glucosio.android.tools.GlucosioAlarmManager; import org.glucosio.android.tools.GlucosioNotificationManager; diff --git a/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java b/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java index 377ae756..e217c0af 100644 --- a/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java +++ b/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java @@ -15,10 +15,9 @@ import java.util.List; public class GlucosioAlarmManager { - List reminders; - Context context; - AlarmManager alarmMgr; - DatabaseHandler db; + private Context context; + private AlarmManager alarmMgr; + private DatabaseHandler db; public GlucosioAlarmManager(Context context) { this.context = context; @@ -27,7 +26,7 @@ public GlucosioAlarmManager(Context context) { } public void setAlarms() { - reminders = db.getReminders(); + List reminders = db.getReminders(); int activeRemindersCount = 0; // Set an alarm for each date diff --git a/app/src/main/java/org/glucosio/android/tools/GlucosioNotificationManager.java b/app/src/main/java/org/glucosio/android/tools/GlucosioNotificationManager.java index 917c7dd0..38bc0aec 100644 --- a/app/src/main/java/org/glucosio/android/tools/GlucosioNotificationManager.java +++ b/app/src/main/java/org/glucosio/android/tools/GlucosioNotificationManager.java @@ -12,8 +12,8 @@ import org.glucosio.android.activity.AddGlucoseActivity; public class GlucosioNotificationManager { - private static final String REMOTE_INPUT_KEY = "glucosio_remote_key"; - private static final int NOTIFICATION_ID = 011; + //private static final String REMOTE_INPUT_KEY = "glucosio_remote_key"; + private static final int NOTIFICATION_ID = 11; private Context context; public GlucosioNotificationManager(Context context) { @@ -23,7 +23,7 @@ public GlucosioNotificationManager(Context context) { public void sendReminderNotification() { String NOTIFICATION_TITLE = "\u23f0"; String NOTIFICATION_TEXT = context.getString(R.string.reminders_notification_text); - String NOTIFICATION_ACTION = context.getString(R.string.reminders_notification_action); + //String NOTIFICATION_ACTION = context.getString(R.string.reminders_notification_action); Intent intent = new Intent(context, AddGlucoseActivity.class); intent.putExtra("glucose_reminder_notification", true); From 10d731dfe3ef732f772f784814b7c5080d6e2506 Mon Sep 17 00:00:00 2001 From: Glucat Date: Mon, 12 Sep 2016 19:28:13 +0000 Subject: [PATCH 13/82] Automatic translation import (build 937). --- app/src/main/res/values-ae-rIR/strings.xml | 2 +- app/src/main/res/values-bg-rBG/strings.xml | 1 + app/src/main/res/values-cs-rCZ/strings.xml | 3 ++- app/src/main/res/values-eo-rUY/strings.xml | 1 + app/src/main/res/values-es-rCO/strings.xml | 2 +- app/src/main/res/values-es-rDO/strings.xml | 2 +- app/src/main/res/values-fr-rQC/strings.xml | 2 +- app/src/main/res/values-hi-rIN/strings.xml | 2 +- app/src/main/res/values-it-rIT/strings.xml | 7 +++++++ app/src/main/res/values-iw-rIL/strings.xml | 1 + app/src/main/res/values-ka-rGE/strings.xml | 2 +- app/src/main/res/values-ko-rKR/strings.xml | 2 +- app/src/main/res/values-sk-rSK/strings.xml | 2 +- app/src/main/res/values-sv-rFI/strings.xml | 1 + app/src/main/res/values-sv-rSE/strings.xml | 1 + app/src/main/res/values-sw-rKE/strings.xml | 2 +- app/src/main/res/values-tl-rPH/strings.xml | 2 +- app/src/main/res/values-uk-rUA/strings.xml | 2 +- 18 files changed, 25 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/values-ae-rIR/strings.xml b/app/src/main/res/values-ae-rIR/strings.xml index 477575dd..8e1c8646 100644 --- a/app/src/main/res/values-ae-rIR/strings.xml +++ b/app/src/main/res/values-ae-rIR/strings.xml @@ -81,7 +81,7 @@ Sugar free doesn’t really mean sugar free. It means 0.5 grams (g) of sugar per serving, so be careful to not indulge in too many sugar free items. Moving toward a healthy weight helps control blood sugars. Your doctor, a dietitian, and a fitness trainer can get you started on a plan that will work for you. Checking your blood level and tracking it in an app like Glucosio twice a day will help you be aware of outcomes from food and lifestyle choices. - Get A1c blood tests to find out your average blood sugar for the past 2 to 3 months. Your doctor should tell you how frequently this test will be needed to be performed. + Get HbA1c blood tests to find out your average blood sugar for the past 2 to 3 months. Your doctor should tell you how frequently this test will be needed to be performed. Tracking how many carbohydrates you consume can be just as important as checking blood levels since carbohydrates influence blood glucose levels. Talk to your doctor or a dietician about carbohydrate intake. Controlling blood pressure, cholesterol, and triglyceride levels is important since diabetics are susceptible to heart disease. There are several diet approaches you can take to eating healthier and helping improve your diabetes outcomes. Seek advice from a dietician on what will work best for you and your budget. diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index 74737c41..46665504 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -225,6 +225,7 @@ Грешка при отваряне на NFC връзка! Недостатъчно данни за изчисляване на HBA1C HBA1C: + HBA1C ЗАПАЗИ Поддръжка Как можем да Ви помогнем? diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index a510f946..ddaad7f4 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -95,7 +95,7 @@ \"Bez cukru\" opravdu neznamená bez cukru. To znamená 0,5 gramů (g) cukru na jednu porci, dejte si tedy pozor, abyste nekonzumovali tolik jídel \"bez cukru\". Zdravá tělesná váha pomáhá držet krevní cukr pod kontrolou. Váš lékař, dietolog nebo fitness trenér vám může pomoci vytvořit plán, který vám s udržením nebo snížením tělesné váhy pomůže. Kontrola a sledování hladiny krevního tlaku dvakrát denně v aplikaci jako je Glucosio vám pomůže znát výsledky z volby stravování a životního stylu. - Get A1c blood tests to find out your average blood sugar for the past 2 to 3 months. Your doctor should tell you how frequently this test will be needed to be performed. + Get HbA1c blood tests to find out your average blood sugar for the past 2 to 3 months. Your doctor should tell you how frequently this test will be needed to be performed. Tracking how many carbohydrates you consume can be just as important as checking blood levels since carbohydrates influence blood glucose levels. Talk to your doctor or a dietician about carbohydrate intake. Kontroly krevního tlaku, hladiny cholesterolu a hladiny triglyceridů, jsou důležité, neboť diabetici jsou náchylní k srdečním onemocněním. Existuje několik typů diet, které můžete zvolit proto, abyste jedli zdravě a zároveň zlepšili výsledky cukrovky. Vyhledejte dietologa pro radu o nejvhodnější dietě pro vás a váš rozpočet. @@ -205,4 +205,5 @@ Hladina cholesterolu Hodnota HB1AC Hladina glukózy v krvi + HB1AC diff --git a/app/src/main/res/values-eo-rUY/strings.xml b/app/src/main/res/values-eo-rUY/strings.xml index d7d2ea37..a5c30d1f 100644 --- a/app/src/main/res/values-eo-rUY/strings.xml +++ b/app/src/main/res/values-eo-rUY/strings.xml @@ -147,4 +147,5 @@ Kolesterolnivelo HB1AC-legado Sangoglukozonivelo + HB1AC diff --git a/app/src/main/res/values-es-rCO/strings.xml b/app/src/main/res/values-es-rCO/strings.xml index bab4ca71..11db78d9 100644 --- a/app/src/main/res/values-es-rCO/strings.xml +++ b/app/src/main/res/values-es-rCO/strings.xml @@ -260,7 +260,7 @@ HBA1C: Añadido desde tu FreeStyle Libre® NIVEL MEDIO DE GLUCOSA - A1C + HB1AC Calculador de A1C GUARDAR Asistencia técnica diff --git a/app/src/main/res/values-es-rDO/strings.xml b/app/src/main/res/values-es-rDO/strings.xml index cc4b281f..ccfdfad7 100644 --- a/app/src/main/res/values-es-rDO/strings.xml +++ b/app/src/main/res/values-es-rDO/strings.xml @@ -260,7 +260,7 @@ HBA1C: Añadido desde tu FreeStyle Libre® NIVEL MEDIO DE GLUCOSA - A1C + HB1AC Calculador de A1C GUARDAR Asistencia técnica diff --git a/app/src/main/res/values-fr-rQC/strings.xml b/app/src/main/res/values-fr-rQC/strings.xml index 6d2b6fe3..143323af 100644 --- a/app/src/main/res/values-fr-rQC/strings.xml +++ b/app/src/main/res/values-fr-rQC/strings.xml @@ -266,7 +266,7 @@ Hb1AC : Ajoutées depuis votre compte FreeStyle Libre® GLYCÉMIE MOYENNE - Taux D’Hba1C + HbA1c Convertisseur HbA1C ENREGISTRER Support diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index d825102f..3dd49f6a 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -93,7 +93,7 @@ Sugar free doesn’t really mean sugar free. It means 0.5 grams (g) of sugar per serving, so be careful to not indulge in too many sugar free items. Moving toward a healthy weight helps control blood sugars. Your doctor, a dietitian, and a fitness trainer can get you started on a plan that will work for you. Checking your blood level and tracking it in an app like Glucosio twice a day will help you be aware of outcomes from food and lifestyle choices. - Get A1c blood tests to find out your average blood sugar for the past 2 to 3 months. Your doctor should tell you how frequently this test will be needed to be performed. + Get HbA1c blood tests to find out your average blood sugar for the past 2 to 3 months. Your doctor should tell you how frequently this test will be needed to be performed. Tracking how many carbohydrates you consume can be just as important as checking blood levels since carbohydrates influence blood glucose levels. Talk to your doctor or a dietician about carbohydrate intake. Controlling blood pressure, cholesterol, and triglyceride levels is important since diabetics are susceptible to heart disease. There are several diet approaches you can take to eating healthier and helping improve your diabetes outcomes. Seek advice from a dietician on what will work best for you and your budget. diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index ae6dbee7..5057973a 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -227,6 +227,7 @@ Screenshot salvato nella galleria Errore durante il salvataggio nella galleria Esporta intervallo di date + Si è verificato un problema nell\'esportazione delle letture. Per favore prova di nuovo. Nessuna lettura da esportare. Nuova lettura aggiunta Peso @@ -309,4 +310,10 @@ mmol/mol mmol/L Ritorna al vecchio grafico + cronologia + salva + Promemoria + È ora di aggiungere la tua glicemia! + Aggiungi lettura + Nessun promemoria impostato. Aggiungine uno qui. diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 3cb48af0..8a696a0c 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -238,6 +238,7 @@ רמת סוכר בדם NFC מנוטרל. שגיאה בפתיחת חיבור NFC! + HB1AC שמירה תמיכה איך נוכל לעזור לך? diff --git a/app/src/main/res/values-ka-rGE/strings.xml b/app/src/main/res/values-ka-rGE/strings.xml index ff7c6bc0..127a87ef 100644 --- a/app/src/main/res/values-ka-rGE/strings.xml +++ b/app/src/main/res/values-ka-rGE/strings.xml @@ -90,7 +90,7 @@ Sugar free doesn’t really mean sugar free. It means 0.5 grams (g) of sugar per serving, so be careful to not indulge in too many sugar free items. Moving toward a healthy weight helps control blood sugars. Your doctor, a dietitian, and a fitness trainer can get you started on a plan that will work for you. Checking your blood level and tracking it in an app like Glucosio twice a day will help you be aware of outcomes from food and lifestyle choices. - Get A1c blood tests to find out your average blood sugar for the past 2 to 3 months. Your doctor should tell you how frequently this test will be needed to be performed. + Get HbA1c blood tests to find out your average blood sugar for the past 2 to 3 months. Your doctor should tell you how frequently this test will be needed to be performed. Tracking how many carbohydrates you consume can be just as important as checking blood levels since carbohydrates influence blood glucose levels. Talk to your doctor or a dietician about carbohydrate intake. Controlling blood pressure, cholesterol, and triglyceride levels is important since diabetics are susceptible to heart disease. There are several diet approaches you can take to eating healthier and helping improve your diabetes outcomes. Seek advice from a dietician on what will work best for you and your budget. diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 01f3edf9..0085f60a 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -106,7 +106,7 @@ Sugar free doesn’t really mean sugar free. It means 0.5 grams (g) of sugar per serving, so be careful to not indulge in too many sugar free items. Moving toward a healthy weight helps control blood sugars. Your doctor, a dietitian, and a fitness trainer can get you started on a plan that will work for you. Checking your blood level and tracking it in an app like Glucosio twice a day will help you be aware of outcomes from food and lifestyle choices. - Get A1c blood tests to find out your average blood sugar for the past 2 to 3 months. Your doctor should tell you how frequently this test will be needed to be performed. + Get HbA1c blood tests to find out your average blood sugar for the past 2 to 3 months. Your doctor should tell you how frequently this test will be needed to be performed. 탄수화물은 혈당 레벨에 영향을 미치므로 얼마나 많은 탄수화물을 소비하는지를 추적하는 것은 혈액 레벨을 확인하는 것 만큼 중요하다고 할 수 있습니다. 탄수화물 섭취에 관해 의사 또는 영양학자와 이야기해 보세요. Controlling blood pressure, cholesterol, and triglyceride levels is important since diabetics are susceptible to heart disease. There are several diet approaches you can take to eating healthier and helping improve your diabetes outcomes. Seek advice from a dietician on what will work best for you and your budget. diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index 2f4d4048..0fc59a01 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -89,7 +89,7 @@ Sugar free doesn’t really mean sugar free. It means 0.5 grams (g) of sugar per serving, so be careful to not indulge in too many sugar free items. Moving toward a healthy weight helps control blood sugars. Your doctor, a dietitian, and a fitness trainer can get you started on a plan that will work for you. Checking your blood level and tracking it in an app like Glucosio twice a day will help you be aware of outcomes from food and lifestyle choices. - Get A1c blood tests to find out your average blood sugar for the past 2 to 3 months. Your doctor should tell you how frequently this test will be needed to be performed. + Get HbA1c blood tests to find out your average blood sugar for the past 2 to 3 months. Your doctor should tell you how frequently this test will be needed to be performed. Tracking how many carbohydrates you consume can be just as important as checking blood levels since carbohydrates influence blood glucose levels. Talk to your doctor or a dietician about carbohydrate intake. Controlling blood pressure, cholesterol, and triglyceride levels is important since diabetics are susceptible to heart disease. There are several diet approaches you can take to eating healthier and helping improve your diabetes outcomes. Seek advice from a dietician on what will work best for you and your budget. diff --git a/app/src/main/res/values-sv-rFI/strings.xml b/app/src/main/res/values-sv-rFI/strings.xml index 59950526..81bf925a 100644 --- a/app/src/main/res/values-sv-rFI/strings.xml +++ b/app/src/main/res/values-sv-rFI/strings.xml @@ -229,4 +229,5 @@ Enheter stöder inte NFC. NFC är inaktiverat. Ett fel uppstod när NFC-anslutning skulle öppnas! + HB1AC diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 3cc26a90..690f6796 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -228,4 +228,5 @@ Enheter stöder inte NFC. NFC är inaktiverat. Ett fel uppstod när NFC-anslutning skulle öppnas! + HB1AC diff --git a/app/src/main/res/values-sw-rKE/strings.xml b/app/src/main/res/values-sw-rKE/strings.xml index a0f6f63c..abc4fe12 100644 --- a/app/src/main/res/values-sw-rKE/strings.xml +++ b/app/src/main/res/values-sw-rKE/strings.xml @@ -92,7 +92,7 @@ Sugar free doesn’t really mean sugar free. It means 0.5 grams (g) of sugar per serving, so be careful to not indulge in too many sugar free items. Moving toward a healthy weight helps control blood sugars. Your doctor, a dietitian, and a fitness trainer can get you started on a plan that will work for you. Checking your blood level and tracking it in an app like Glucosio twice a day will help you be aware of outcomes from food and lifestyle choices. - Get A1c blood tests to find out your average blood sugar for the past 2 to 3 months. Your doctor should tell you how frequently this test will be needed to be performed. + Get HbA1c blood tests to find out your average blood sugar for the past 2 to 3 months. Your doctor should tell you how frequently this test will be needed to be performed. Tracking how many carbohydrates you consume can be just as important as checking blood levels since carbohydrates influence blood glucose levels. Talk to your doctor or a dietician about carbohydrate intake. Controlling blood pressure, cholesterol, and triglyceride levels is important since diabetics are susceptible to heart disease. There are several diet approaches you can take to eating healthier and helping improve your diabetes outcomes. Seek advice from a dietician on what will work best for you and your budget. diff --git a/app/src/main/res/values-tl-rPH/strings.xml b/app/src/main/res/values-tl-rPH/strings.xml index 6c7ac660..703722e8 100644 --- a/app/src/main/res/values-tl-rPH/strings.xml +++ b/app/src/main/res/values-tl-rPH/strings.xml @@ -85,7 +85,7 @@ Sugar free doesn’t really mean sugar free. It means 0.5 grams (g) of sugar per serving, so be careful to not indulge in too many sugar free items. Moving toward a healthy weight helps control blood sugars. Your doctor, a dietitian, and a fitness trainer can get you started on a plan that will work for you. Checking your blood level and tracking it in an app like Glucosio twice a day will help you be aware of outcomes from food and lifestyle choices. - Get A1c blood tests to find out your average blood sugar for the past 2 to 3 months. Your doctor should tell you how frequently this test will be needed to be performed. + Get HbA1c blood tests to find out your average blood sugar for the past 2 to 3 months. Your doctor should tell you how frequently this test will be needed to be performed. Tracking how many carbohydrates you consume can be just as important as checking blood levels since carbohydrates influence blood glucose levels. Talk to your doctor or a dietician about carbohydrate intake. Controlling blood pressure, cholesterol, and triglyceride levels is important since diabetics are susceptible to heart disease. There are several diet approaches you can take to eating healthier and helping improve your diabetes outcomes. Seek advice from a dietician on what will work best for you and your budget. diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index e9a6ff70..ac0ba740 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -100,7 +100,7 @@ Sugar free doesn’t really mean sugar free. It means 0.5 grams (g) of sugar per serving, so be careful to not indulge in too many sugar free items. Moving toward a healthy weight helps control blood sugars. Your doctor, a dietitian, and a fitness trainer can get you started on a plan that will work for you. Checking your blood level and tracking it in an app like Glucosio twice a day will help you be aware of outcomes from food and lifestyle choices. - Get A1c blood tests to find out your average blood sugar for the past 2 to 3 months. Your doctor should tell you how frequently this test will be needed to be performed. + Get HbA1c blood tests to find out your average blood sugar for the past 2 to 3 months. Your doctor should tell you how frequently this test will be needed to be performed. Tracking how many carbohydrates you consume can be just as important as checking blood levels since carbohydrates influence blood glucose levels. Talk to your doctor or a dietician about carbohydrate intake. Controlling blood pressure, cholesterol, and triglyceride levels is important since diabetics are susceptible to heart disease. There are several diet approaches you can take to eating healthier and helping improve your diabetes outcomes. Seek advice from a dietician on what will work best for you and your budget. From 6c1895bb91551fcf828fee3f75b888aa64a09e40 Mon Sep 17 00:00:00 2001 From: paolorotolo Date: Mon, 19 Sep 2016 22:28:40 +0200 Subject: [PATCH 14/82] Fix reminder triggered on boot, update Gradle version to stable. --- .../android/presenter/RemindersPresenter.java | 1 + .../android/tools/GlucosioAlarmManager.java | 21 ++++++++++++++++--- build.gradle | 2 +- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java b/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java index 3d88cfc7..35c5e463 100644 --- a/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java @@ -48,6 +48,7 @@ public void addReminder(long id, Date alarmTime, String metric, boolean oneTime, public void deleteReminder(long id) { db.deleteReminder(id); + saveReminders(); } public void saveReminders() { diff --git a/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java b/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java index e217c0af..bac706b0 100644 --- a/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java +++ b/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java @@ -6,10 +6,12 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; +import android.util.Log; import org.glucosio.android.db.DatabaseHandler; import org.glucosio.android.db.Reminder; import org.glucosio.android.receivers.GlucosioBroadcastReceiver; +import org.joda.time.DateTime; import java.util.Calendar; import java.util.List; @@ -41,9 +43,22 @@ public void setAlarms() { if (reminder.isActive()) { activeRemindersCount++; - Calendar cal = Calendar.getInstance(); - cal.setTime(reminder.getAlarmTime()); - alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), + Calendar calNow = Calendar.getInstance(); + Calendar calAlarm = Calendar.getInstance(); + calAlarm.setTime(reminder.getAlarmTime()); + calAlarm.set(Calendar.SECOND, 0); + + DateTime now = new DateTime(calNow.getTime()); + DateTime reminderDate = new DateTime(calAlarm); + + if (reminderDate.isBefore(now)) { + calAlarm.set(Calendar.DATE, calNow.get(Calendar.DATE)); + calAlarm.add(Calendar.DATE, 1); + } + + Log.d("Glucosio", "Added reminder on " + calAlarm.get(Calendar.DAY_OF_MONTH) + " at " + calAlarm.get(Calendar.HOUR) + ":" + calAlarm.get(Calendar.MINUTE)); + + alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calAlarm.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent); } else { alarmMgr.cancel(alarmIntent); diff --git a/build.gradle b/build.gradle index c4be2f3a..b7792e9d 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ buildscript { dependencies { // TODO: Please revert to a stable gradle version before releasing on prod // Alpha is required in devel to use Instant Run and speed up development process - classpath 'com.android.tools.build:gradle:2.2.0-rc1' + classpath 'com.android.tools.build:gradle:2.2.0' classpath 'com.google.gms:google-services:3.0.0' classpath 'io.realm:realm-gradle-plugin:1.1.1' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' From 976f522531ce2405abb35a1c16adc4d8f1992d43 Mon Sep 17 00:00:00 2001 From: paolorotolo Date: Tue, 20 Sep 2016 15:33:08 +0200 Subject: [PATCH 15/82] Update dependencies. --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index b7792e9d..4d737c8a 100644 --- a/build.gradle +++ b/build.gradle @@ -48,8 +48,8 @@ allprojects { ext.buildToolsVer = '24.0.0' - ext.androidSupportVer = '24.1.1' - ext.googlePlayServicesVer = '9.0.2' + ext.androidSupportVer = '24.2.1' + ext.googlePlayServicesVer = '9.4.0' ext.butterKnifeVer = '8.0.1' From a1d7e9978c332d2070db3ab5a7fef9de66933740 Mon Sep 17 00:00:00 2001 From: Joaquim Ley Date: Wed, 21 Sep 2016 07:41:43 +0100 Subject: [PATCH 16/82] Fix #285 (#295) * Start working on Reminders. * Add Reminders in Realm. Add migration to schema 4. * Add ArrayAdapter for reminders. * Continue work on Reminders. * Add method to get all active reminders * Fix notes export, abstract to a pseudo MVP architecture * Continue work on Reminders. * Simple note tests * Fix notes export, abstract to a pseudo MVP architecture * Simple note tests * Improve quality from codacy report * Fix migration. * Class ReadingToCSV is not final, removed the redundant Sys.currentTMls, added todo to tests * Add reminders notification. * Improvements #2 on PR comments * Fix some issues. * Codacy warnings fixed * Automatic translation import (build 937). * Fix reminder triggered on boot, update Gradle version to stable. * Update dependencies. * Fix notes export, abstract to a pseudo MVP architecture * Simple note tests * Improve quality from codacy report * Class ReadingToCSV is not final, removed the redundant Sys.currentTMls, added todo to tests * Improvements #2 on PR comments --- .../glucosio/android/MainActivityTest.java | 2 + .../glucosio/android/GlucosioApplication.java | 12 +- .../android/activity/MainActivity.java | 40 +++++- .../android/activity/PreferencesActivity.java | 1 - .../android/presenter/ExportPresenter.java | 136 +++++++++--------- .../glucosio/android/tools/ReadingToCSV.java | 20 +-- .../org/glucosio/android/view/ExportView.java | 17 +++ .../presenter/ExportPresenterTest.java | 54 +++++++ build.gradle | 8 +- gradle.properties | 6 +- 10 files changed, 194 insertions(+), 102 deletions(-) create mode 100644 app/src/main/java/org/glucosio/android/view/ExportView.java create mode 100644 app/src/test/java/org/glucosio/android/presenter/ExportPresenterTest.java diff --git a/app/src/androidTest/java/org/glucosio/android/MainActivityTest.java b/app/src/androidTest/java/org/glucosio/android/MainActivityTest.java index 3e0ddcad..0d677cc9 100644 --- a/app/src/androidTest/java/org/glucosio/android/MainActivityTest.java +++ b/app/src/androidTest/java/org/glucosio/android/MainActivityTest.java @@ -57,4 +57,6 @@ public void check_001_checkIfToolbarIsDisplayed() throws InterruptedException { goThroughHelloActivity(); onView(withId(R.id.activity_main_toolbar)).check(matches(isDisplayed())); } + + // TODO: 09/09/16 Test the responses in UI -> Show ui notice when export started, is empty or error } \ No newline at end of file diff --git a/app/src/main/java/org/glucosio/android/GlucosioApplication.java b/app/src/main/java/org/glucosio/android/GlucosioApplication.java index 62541d83..c2c64e31 100644 --- a/app/src/main/java/org/glucosio/android/GlucosioApplication.java +++ b/app/src/main/java/org/glucosio/android/GlucosioApplication.java @@ -43,6 +43,9 @@ import uk.co.chrisjenx.calligraphy.CalligraphyConfig; public class GlucosioApplication extends Application { + + private static GlucosioApplication sInstance; + @Nullable private Analytics analytics; @@ -55,7 +58,7 @@ public class GlucosioApplication extends Application { @Override public void onCreate() { super.onCreate(); - + sInstance = this; initFont(); initLanguage(); } @@ -153,6 +156,13 @@ public Preferences getPreferences() { return preferences; } + public static GlucosioApplication getInstance() { + if (sInstance == null) { + sInstance = new GlucosioApplication(); + } + return sInstance; + } + @NonNull public HelloPresenter createHelloPresenter(@NonNull final HelloActivity activity) { return new HelloPresenter(activity, getDBHandler()); diff --git a/app/src/main/java/org/glucosio/android/activity/MainActivity.java b/app/src/main/java/org/glucosio/android/activity/MainActivity.java index 4dd39016..7d7b37fb 100644 --- a/app/src/main/java/org/glucosio/android/activity/MainActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/MainActivity.java @@ -70,13 +70,14 @@ import org.glucosio.android.db.DatabaseHandler; import org.glucosio.android.presenter.ExportPresenter; import org.glucosio.android.presenter.MainPresenter; +import org.glucosio.android.view.ExportView; import java.util.Calendar; import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper; -public class MainActivity extends AppCompatActivity implements DatePickerDialog.OnDateSetListener { +public class MainActivity extends AppCompatActivity implements DatePickerDialog.OnDateSetListener, ExportView { private static final int REQUEST_INVITE = 1; private static final String INTENT_EXTRA_PAGER = "pager"; @@ -270,6 +271,36 @@ private void initPresenters(GlucosioApplication application) { exportPresenter = new ExportPresenter(this, dbHandler); } + @Override + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); + } + + + @Override + public void onExportStarted(int numberOfItemsToExport) { + showExportedSnackBar(numberOfItemsToExport); // TODO: 09/09/16 Instead of calling this method, move logic to this callback ? + Log.d("Activity", "onExportStarted(): you might want to track this event"); + } + + @Override + public void onNoItemsToExport() { + showNoReadingsSnackBar(); // TODO: 09/09/16 Instead of calling this method, move logic to this callback ? + Log.e("Activity", "onNoItemsToExport(): you might want to track this event"); + } + + @Override + public void onExportFinish(Uri uri) { + showShareDialog(uri); // TODO: 09/09/16 Instead of calling this method, move logic to this callback ? + Log.e("Activity", "onExportFinish(): you might want to track this event"); + } + + @Override + public void onExportError() { + showExportError(); // TODO: 09/09/16 Instead of calling this method, move logic to this callback ? + Log.e("Activity", "onExportError(): you might want to track this event"); + } + private void openA1CCalculator() { Intent calculatorIntent = new Intent(this, A1cCalculatorActivity.class); startActivity(calculatorIntent); @@ -301,7 +332,7 @@ public void openPreferences() { finishActivity(); } - public void finishActivity(){ + public void finishActivity() { // dismiss dialog if still expanded bottomSheetAddDialog.dismiss(); // then close activity @@ -720,9 +751,4 @@ private boolean checkPlayServices() { private void showErrorDialogPlayServices() { Toast.makeText(getApplicationContext(), R.string.activity_main_error_play_services, Toast.LENGTH_SHORT).show(); } - - @Override - protected void attachBaseContext(Context newBase) { - super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); - } } diff --git a/app/src/main/java/org/glucosio/android/activity/PreferencesActivity.java b/app/src/main/java/org/glucosio/android/activity/PreferencesActivity.java index ede67ccb..a5b18ceb 100644 --- a/app/src/main/java/org/glucosio/android/activity/PreferencesActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/PreferencesActivity.java @@ -70,7 +70,6 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.preferences); - getFragmentManager().beginTransaction() .replace(R.id.preferencesFrame, new MyPreferenceFragment()).commit(); diff --git a/app/src/main/java/org/glucosio/android/presenter/ExportPresenter.java b/app/src/main/java/org/glucosio/android/presenter/ExportPresenter.java index 44c5e71e..1a5120ff 100644 --- a/app/src/main/java/org/glucosio/android/presenter/ExportPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/ExportPresenter.java @@ -30,13 +30,12 @@ import android.support.v4.content.FileProvider; import android.util.Log; -import org.glucosio.android.activity.MainActivity; import org.glucosio.android.db.DatabaseHandler; import org.glucosio.android.db.GlucoseReading; import org.glucosio.android.tools.ReadingToCSV; +import org.glucosio.android.view.ExportView; import java.io.File; -import java.util.ArrayList; import java.util.Calendar; import java.util.List; @@ -56,84 +55,77 @@ public class ExportPresenter { private int toDay; private int toMonth; private int toYear; - private DatabaseHandler dB; - private MainActivity activity; - - public ExportPresenter(MainActivity exportActivity, DatabaseHandler dbHandler) { - this.activity = exportActivity; - dB = dbHandler; - } - public void onExportClicked(final Boolean all) { - final List readings; + private Activity mActivity; + private ExportView mExportView; + private DatabaseHandler dB; - if (all) { - readings = dB.getGlucoseReadings(); + public ExportPresenter(Activity activity, DatabaseHandler databaseHandler) { + mActivity = activity; + if (activity instanceof ExportView) { + mExportView = (ExportView) activity; } else { - Calendar fromDate = Calendar.getInstance(); - fromDate.set(Calendar.YEAR, fromYear); - fromDate.set(Calendar.MONTH, fromMonth); - fromDate.set(Calendar.DAY_OF_MONTH, fromDay); - - Calendar toDate = Calendar.getInstance(); - toDate.set(Calendar.YEAR, toYear); - toDate.set(Calendar.MONTH, toMonth); - toDate.set(Calendar.DAY_OF_MONTH, toDay); - readings = dB.getGlucoseReadings(fromDate.getTime(), toDate.getTime()); + throw new RuntimeException("ExportPresenter Activity must implement ExportView interface"); } + dB = databaseHandler; + } + + public void onExportClicked(final boolean isExportAll) { + + if (hasStoragePermissions(mActivity)) { + final String preferredUnit = dB.getUser(1).getPreferred_unit(); + final boolean[] isEmpty = {false}; + + new AsyncTask() { + @Override + protected String doInBackground(Void... params) { + + Realm realm = dB.getNewRealmInstance(); + final List readings; + if (isExportAll) { + readings = dB.getGlucoseReadings(realm); + } else { + Calendar fromDate = Calendar.getInstance(); + fromDate.set(Calendar.YEAR, fromYear); + fromDate.set(Calendar.MONTH, fromMonth); + fromDate.set(Calendar.DAY_OF_MONTH, fromDay); + + Calendar toDate = Calendar.getInstance(); + toDate.set(Calendar.YEAR, toYear); + toDate.set(Calendar.MONTH, toMonth); + toDate.set(Calendar.DAY_OF_MONTH, toDay); + readings = dB.getGlucoseReadings(realm, fromDate.getTime(), toDate.getTime()); + } - if (readings.size() != 0) { - if (hasStoragePermissions(activity)) { - activity.showExportedSnackBar(readings.size()); - final ReadingToCSV csv = new ReadingToCSV(activity.getApplicationContext()); - final String preferredUnit = dB.getUser(1).getPreferred_unit(); - - new AsyncTask() { - @Override - protected String doInBackground(Void... params) { - final ArrayList readingsToExport; - Realm realm = dB.getNewRealmInstance(); - - if (all) { - readingsToExport = dB.getGlucoseReadings(realm); - } else { - Calendar fromDate = Calendar.getInstance(); - fromDate.set(Calendar.YEAR, fromYear); - fromDate.set(Calendar.MONTH, fromMonth); - fromDate.set(Calendar.DAY_OF_MONTH, fromDay); - - Calendar toDate = Calendar.getInstance(); - toDate.set(Calendar.YEAR, toYear); - toDate.set(Calendar.MONTH, toMonth); - toDate.set(Calendar.DAY_OF_MONTH, toDay); - readingsToExport = dB.getGlucoseReadings(realm, fromDate.getTime(), toDate.getTime()); - } - - if (dirExists()) { - Log.i("glucosio", "Dir exists"); - return csv.createCSVFile(realm, readingsToExport, preferredUnit); - } else { - Log.i("glucosio", "Dir NOT exists"); - return null; - } + mExportView.onExportStarted(readings.size()); + if (readings.isEmpty()) { + isEmpty[0] = true; + return null; } - @Override - protected void onPostExecute(String filename) { - super.onPostExecute(filename); - if (filename != null) { - Uri uri = FileProvider.getUriForFile(activity.getApplicationContext(), - activity.getApplicationContext().getPackageName() + ".provider.fileprovider", new File(filename)); - activity.showShareDialog(uri); - } else { - //TODO: Show error SnackBar - activity.showExportError(); - } + if (dirExists()) { + Log.i("glucosio", "Dir exists"); + return ReadingToCSV.createCSVFile(mActivity, realm, readings, preferredUnit); + } else { + Log.i("glucosio", "Dir NOT exists"); + return null; } - }.execute(); - } - } else { - activity.showNoReadingsSnackBar(); + } + + @Override + protected void onPostExecute(String filename) { + super.onPostExecute(filename); + if (filename != null) { + Uri uri = FileProvider.getUriForFile(mActivity.getApplicationContext(), + mActivity.getApplicationContext().getPackageName() + ".provider.fileprovider", new File(filename)); + mExportView.onExportFinish(uri); + } else if (isEmpty[0]) { + mExportView.onNoItemsToExport(); + } else { + mExportView.onExportError(); + } + } + }.execute(); } } diff --git a/app/src/main/java/org/glucosio/android/tools/ReadingToCSV.java b/app/src/main/java/org/glucosio/android/tools/ReadingToCSV.java index 6da22e62..958bcbe3 100644 --- a/app/src/main/java/org/glucosio/android/tools/ReadingToCSV.java +++ b/app/src/main/java/org/glucosio/android/tools/ReadingToCSV.java @@ -30,22 +30,15 @@ import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; -import java.util.ArrayList; +import java.util.List; import io.realm.Realm; -public class ReadingToCSV { +public final class ReadingToCSV { - private Context context; - - public ReadingToCSV(Context mContext) { - this.context = mContext; - } - - - public String createCSVFile(Realm realm, final ArrayList readings, String um) { + public static String createCSVFile(Context context, Realm realm, final List readings, String um) { try { - final File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/glucosio", "glucosio_export_ " + System.currentTimeMillis()/1000 + ".csv"); + final File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/glucosio", "glucosio_export_ " + System.currentTimeMillis() / 1000 + ".csv"); final File sd = Environment.getExternalStorageDirectory(); if (sd.canWrite()) { FileOutputStream fileOutputStream = new FileOutputStream(file); @@ -84,13 +77,13 @@ public String createCSVFile(Realm realm, final ArrayList reading osw.append(dateTool.convertRawTime(reading.getCreated() + "")); osw.append(','); - osw.append(reading.getReading() + ""); + osw.append(String.valueOf(reading.getReading())); osw.append(','); osw.append("mg/dL"); osw.append(','); - osw.append(reading.getReading_type() + ""); + osw.append(String.valueOf(reading.getReading_type())); osw.append(','); osw.append(reading.getNotes()); @@ -122,7 +115,6 @@ public String createCSVFile(Realm realm, final ArrayList reading } } - osw.flush(); osw.close(); Log.i("Glucosio", "Done exporting readings"); diff --git a/app/src/main/java/org/glucosio/android/view/ExportView.java b/app/src/main/java/org/glucosio/android/view/ExportView.java new file mode 100644 index 00000000..2216988d --- /dev/null +++ b/app/src/main/java/org/glucosio/android/view/ExportView.java @@ -0,0 +1,17 @@ +package org.glucosio.android.view; + +import android.net.Uri; + +/** + * Created by joaquimley on 08/09/16. + */ +public interface ExportView { + + void onExportStarted(int numberOfItemsToExport); + + void onNoItemsToExport(); + + void onExportFinish(Uri fileUri); + + void onExportError(); +} diff --git a/app/src/test/java/org/glucosio/android/presenter/ExportPresenterTest.java b/app/src/test/java/org/glucosio/android/presenter/ExportPresenterTest.java new file mode 100644 index 00000000..b4203b7c --- /dev/null +++ b/app/src/test/java/org/glucosio/android/presenter/ExportPresenterTest.java @@ -0,0 +1,54 @@ +package org.glucosio.android.presenter; + +import org.glucosio.android.RobolectricTest; +import org.glucosio.android.db.DatabaseHandler; +import org.glucosio.android.db.GlucoseReading; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; + +import java.util.Date; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Matchers.anyLong; +import static org.mockito.Mockito.when; +import static org.mockito.MockitoAnnotations.initMocks; + +@RunWith(MockitoJUnitRunner.class) +public class ExportPresenterTest extends RobolectricTest { + + private static final String MOCK_NOTE_FOR_TEST = "Note for testing, this should be exported"; + private static final Integer TEST_READING_VALUE = 55; + + @Mock + private DatabaseHandler dbHandlerMock; + + @Mock + private GlucoseReading glucoseReadingMock; + + @Before + public void setUp() throws Exception { + initMocks(this); + when(dbHandlerMock.getGlucoseReading(anyLong())).thenReturn(glucoseReadingMock); + when(glucoseReadingMock.getNotes()).thenReturn(MOCK_NOTE_FOR_TEST); + when(glucoseReadingMock.getCreated()).thenReturn(new Date()); + when(glucoseReadingMock.getReading()).thenReturn(TEST_READING_VALUE); + } + + + @Test + public void shouldReturnNoteFromReadingWhenReadingHasNote() throws Exception { + // TODO: 10/09/16 + assertThat(glucoseReadingMock.getNotes()).matches(MOCK_NOTE_FOR_TEST); + } + + @Test + public void shouldReturnNotReturnNoteFromReadingWhenReadingHasNoNote() throws Exception { + // TODO: 10/09/16 + when(glucoseReadingMock.getNotes()).thenReturn(""); + assertThat(glucoseReadingMock.getNotes()).doesNotMatch(MOCK_NOTE_FOR_TEST); + assertThat(glucoseReadingMock.getNotes()).isEmpty(); + } +} \ No newline at end of file diff --git a/build.gradle b/build.gradle index 4d737c8a..74346849 100644 --- a/build.gradle +++ b/build.gradle @@ -17,9 +17,7 @@ * * */ - // Top-level build file where you can add configuration options common to all sub-projects/modules. - buildscript { repositories { @@ -40,7 +38,6 @@ buildscript { // in the individual module build.gradle files } } - allprojects { repositories { jcenter() @@ -60,7 +57,6 @@ allprojects { apply plugin: 'com.github.ben-manes.versions' } - -task wrapper( type: Wrapper ) { +task wrapper(type: Wrapper) { gradleVersion = '2.13' -} +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 7ae04449..f177b34e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -35,4 +35,8 @@ # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true \ No newline at end of file +# org.gradle.parallel=true +org.gradle.daemon=true +org.gradle.parallel=true +org.gradle.configureondemand=true +org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError \ No newline at end of file From 2f90b8ecee64ba78f73c20440a373a86c9f347a0 Mon Sep 17 00:00:00 2001 From: paolorotolo Date: Wed, 21 Sep 2016 09:29:27 +0200 Subject: [PATCH 17/82] Add labels on reminders. --- .../android/activity/RemindersActivity.java | 70 +++++++++++++++---- .../android/adapter/RemindersAdapter.java | 4 +- .../org/glucosio/android/db/Migration.java | 3 +- .../org/glucosio/android/db/Reminder.java | 12 +++- .../android/presenter/RemindersPresenter.java | 4 +- .../res/layout/activity_reminder_item.xml | 26 +++++-- app/src/main/res/values/strings.xml | 2 + 7 files changed, 96 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java b/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java index 9833a07f..faf18056 100644 --- a/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java @@ -1,13 +1,18 @@ package org.glucosio.android.activity; +import android.app.Activity; +import android.content.DialogInterface; import android.os.Bundle; import android.support.design.widget.BottomSheetDialog; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; +import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; +import android.text.InputType; import android.view.MenuItem; import android.view.View; +import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ListView; @@ -26,11 +31,13 @@ public class RemindersActivity extends AppCompatActivity implements TimePickerDi private FloatingActionButton addFab; private RemindersPresenter presenter; private ListView listView; + private String label; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_reminders); + final Activity ReminderActivity = this; presenter = new RemindersPresenter(this); Toolbar toolbar = (Toolbar) findViewById(R.id.activity_main_toolbar); @@ -46,18 +53,38 @@ protected void onCreate(Bundle savedInstanceState) { addFab.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - // Open Time Picker on FAB click - boolean is24HourFormat = android.text.format.DateFormat.is24HourFormat(getApplicationContext()); - Calendar cal = presenter.getCalendar(); - - TimePickerDialog tpd = TimePickerDialog.newInstance( - RemindersActivity.this, - cal.get(Calendar.HOUR_OF_DAY), - cal.get(Calendar.MINUTE), - is24HourFormat); - tpd.show(getFragmentManager(), "Timepickerdialog"); - } + public void onClick(final View view) { + + AlertDialog.Builder builder = new AlertDialog.Builder(ReminderActivity); + builder.setTitle(R.string.activity_reminder_add_label); + + // Set up the input + final EditText input = new EditText(ReminderActivity); + // Specify the type of input expected; this, for example, sets the input as a password, and will mask the text + input.setInputType(InputType.TYPE_CLASS_TEXT); + builder.setView(input); + + // Set up the buttons + builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + label = input.getText().toString(); + if (label.isEmpty()){ + showEmptyErrorMessage(view); + } else { + openTimePicker(); + } + } + }); + builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.cancel(); + } + }); + + builder.show(); + } }); listView = (ListView) findViewById(R.id.activity_reminders_listview); @@ -71,6 +98,19 @@ public void run() { }, 600); } + private void openTimePicker(){ + // Open Time Picker on FAB click + boolean is24HourFormat = android.text.format.DateFormat.is24HourFormat(getApplicationContext()); + Calendar cal = presenter.getCalendar(); + + TimePickerDialog tpd = TimePickerDialog.newInstance( + RemindersActivity.this, + cal.get(Calendar.HOUR_OF_DAY), + cal.get(Calendar.MINUTE), + is24HourFormat); + tpd.show(getFragmentManager(), "Timepickerdialog"); + } + public void updateReminder(Reminder reminder) { presenter.updateReminder(reminder); presenter.saveReminders(); @@ -81,6 +121,10 @@ public void updateRemindersList() { listView.invalidate(); } + private void showEmptyErrorMessage(View view){ + Snackbar.make(view, R.string.activity_reminder_error_empty, Snackbar.LENGTH_SHORT).show(); + } + @Override public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute, int seconds) { Calendar cal = Calendar.getInstance(); @@ -92,7 +136,7 @@ public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute, int se // TODO: Add Reminders for other metrics // Also oneTime is always set to false until I implement one time alarms // TODO: Implement one time alarms - presenter.addReminder(Long.parseLong(concatenatedId), cal.getTime(), "glucose", false, true); + presenter.addReminder(Long.parseLong(concatenatedId), cal.getTime(), label, "glucose", false, true); } public void showDuplicateError() { diff --git a/app/src/main/java/org/glucosio/android/adapter/RemindersAdapter.java b/app/src/main/java/org/glucosio/android/adapter/RemindersAdapter.java index 712c5e05..54ffe7ce 100644 --- a/app/src/main/java/org/glucosio/android/adapter/RemindersAdapter.java +++ b/app/src/main/java/org/glucosio/android/adapter/RemindersAdapter.java @@ -48,18 +48,20 @@ public View getView(int position, View convertView, @NonNull ViewGroup parent) { LinearLayout rootView = (LinearLayout) v.findViewById(R.id.activity_reminders_root_view); TextView timeTextView = (TextView) v.findViewById(R.id.activity_reminders_item_time); + TextView labelTextView = (TextView) v.findViewById(R.id.activity_reminders_label); Switch activeSwitch = (Switch) v.findViewById(R.id.activity_reminders_item_enabled); final Reminder reminder = items.get(position); final long reminderId = reminder.getId(); calendar.setTime(reminder.getAlarmTime()); timeTextView.setText(formatDateTime.getTime(calendar)); + labelTextView.setText(reminder.getLabel()); activeSwitch.setChecked(reminder.isActive()); activeSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { - Reminder updatedReminder = new Reminder(reminder.getId(), reminder.getAlarmTime(), reminder.getMetric(), + Reminder updatedReminder = new Reminder(reminder.getId(), reminder.getAlarmTime(), reminder.getLabel(), reminder.getMetric(), reminder.isOneTime(), reminder.isActive()); updatedReminder.setActive(b); updateReminder(updatedReminder); diff --git a/app/src/main/java/org/glucosio/android/db/Migration.java b/app/src/main/java/org/glucosio/android/db/Migration.java index 420a056a..07059a60 100644 --- a/app/src/main/java/org/glucosio/android/db/Migration.java +++ b/app/src/main/java/org/glucosio/android/db/Migration.java @@ -169,7 +169,8 @@ public void apply(DynamicRealmObject obj) { .addField("metric", String.class) .addField("alarmTime", Date.class) .addField("active", Boolean.class, FieldAttribute.REQUIRED) - .addField("oneTime", Boolean.class, FieldAttribute.REQUIRED); + .addField("oneTime", Boolean.class, FieldAttribute.REQUIRED) + .addField("label", String.class); oldVersion++; } } diff --git a/app/src/main/java/org/glucosio/android/db/Reminder.java b/app/src/main/java/org/glucosio/android/db/Reminder.java index 3a6cc25b..c63e3b36 100644 --- a/app/src/main/java/org/glucosio/android/db/Reminder.java +++ b/app/src/main/java/org/glucosio/android/db/Reminder.java @@ -12,13 +12,15 @@ public class Reminder extends RealmObject { private Date alarmTime; private boolean oneTime; private boolean active; + private String label; private String metric; public Reminder() { } - public Reminder(long id, Date alarmTime, String metric, boolean oneTime, boolean active) { + public Reminder(long id, Date alarmTime, String label, String metric, boolean oneTime, boolean active) { this.id = id; + this.label = label; this.alarmTime = alarmTime; this.metric = metric; this.oneTime = oneTime; @@ -64,4 +66,12 @@ public boolean isActive() { public void setActive(boolean active) { this.active = active; } + + public void setLabel(String label){ + this.label = label; + } + + public String getLabel(){ + return label; + } } diff --git a/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java b/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java index 35c5e463..12ecbfe4 100644 --- a/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/RemindersPresenter.java @@ -35,8 +35,8 @@ public ListAdapter getAdapter() { return new RemindersAdapter(activity, R.layout.activity_reminder_item, db.getReminders()); } - public void addReminder(long id, Date alarmTime, String metric, boolean oneTime, boolean active) { - Reminder reminder = new Reminder(id, alarmTime, metric, oneTime, active); + public void addReminder(long id, Date alarmTime, String label, String metric, boolean oneTime, boolean active) { + Reminder reminder = new Reminder(id, alarmTime, label, metric, oneTime, active); boolean added = db.addReminder(reminder); if (added) { activity.updateRemindersList(); diff --git a/app/src/main/res/layout/activity_reminder_item.xml b/app/src/main/res/layout/activity_reminder_item.xml index 1a4269c2..b3bf7bbc 100644 --- a/app/src/main/res/layout/activity_reminder_item.xml +++ b/app/src/main/res/layout/activity_reminder_item.xml @@ -36,15 +36,27 @@ android:orientation="horizontal" android:padding="16dp"> - + android:orientation="vertical"> + + + Add reading No reminders set. Add a new reminder here. This reminder already exists. + Please enter a valid label. + Set reminder Label From 13dd3039a8700d52cb50525d14b95e6685f13827 Mon Sep 17 00:00:00 2001 From: paolorotolo Date: Wed, 21 Sep 2016 15:18:23 +0200 Subject: [PATCH 18/82] Add label on reminder notification. --- .../org/glucosio/android/activity/RemindersActivity.java | 7 ++++--- .../android/receivers/GlucosioBroadcastReceiver.java | 3 ++- .../org/glucosio/android/tools/GlucosioAlarmManager.java | 1 + .../android/tools/GlucosioNotificationManager.java | 4 ++-- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java b/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java index faf18056..ebca3ce3 100644 --- a/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java @@ -37,7 +37,7 @@ public class RemindersActivity extends AppCompatActivity implements TimePickerDi protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_reminders); - final Activity ReminderActivity = this; + final Activity reminderActivity = this; presenter = new RemindersPresenter(this); Toolbar toolbar = (Toolbar) findViewById(R.id.activity_main_toolbar); @@ -55,13 +55,14 @@ protected void onCreate(Bundle savedInstanceState) { @Override public void onClick(final View view) { - AlertDialog.Builder builder = new AlertDialog.Builder(ReminderActivity); + AlertDialog.Builder builder = new AlertDialog.Builder(reminderActivity); builder.setTitle(R.string.activity_reminder_add_label); // Set up the input - final EditText input = new EditText(ReminderActivity); + final EditText input = new EditText(reminderActivity); // Specify the type of input expected; this, for example, sets the input as a password, and will mask the text input.setInputType(InputType.TYPE_CLASS_TEXT); + input.setPadding(16,0,16,0); builder.setView(input); // Set up the buttons diff --git a/app/src/main/java/org/glucosio/android/receivers/GlucosioBroadcastReceiver.java b/app/src/main/java/org/glucosio/android/receivers/GlucosioBroadcastReceiver.java index 07b826e1..49fedf2e 100644 --- a/app/src/main/java/org/glucosio/android/receivers/GlucosioBroadcastReceiver.java +++ b/app/src/main/java/org/glucosio/android/receivers/GlucosioBroadcastReceiver.java @@ -15,7 +15,8 @@ public void onReceive(Context context, Intent intent) { } else { if (intent.getBooleanExtra("glucosio_reminder", false)) { GlucosioNotificationManager notificationManager = new GlucosioNotificationManager(context); - notificationManager.sendReminderNotification(); + String reminderLabel = intent.getStringExtra("reminder_label"); + notificationManager.sendReminderNotification(reminderLabel); } else { setAlarms(context); } diff --git a/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java b/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java index bac706b0..33033578 100644 --- a/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java +++ b/app/src/main/java/org/glucosio/android/tools/GlucosioAlarmManager.java @@ -38,6 +38,7 @@ public void setAlarms() { Intent intent = new Intent(context, GlucosioBroadcastReceiver.class); intent.putExtra("metric", reminder.getMetric()); intent.putExtra("glucosio_reminder", true); + intent.putExtra("reminder_label", reminder.getLabel()); PendingIntent alarmIntent = PendingIntent.getBroadcast(context, (int) reminder.getId(), intent, 0); diff --git a/app/src/main/java/org/glucosio/android/tools/GlucosioNotificationManager.java b/app/src/main/java/org/glucosio/android/tools/GlucosioNotificationManager.java index 38bc0aec..caf59e21 100644 --- a/app/src/main/java/org/glucosio/android/tools/GlucosioNotificationManager.java +++ b/app/src/main/java/org/glucosio/android/tools/GlucosioNotificationManager.java @@ -20,8 +20,8 @@ public GlucosioNotificationManager(Context context) { this.context = context; } - public void sendReminderNotification() { - String NOTIFICATION_TITLE = "\u23f0"; + public void sendReminderNotification(String label) { + String NOTIFICATION_TITLE = label + " " + "\u23f0"; String NOTIFICATION_TEXT = context.getString(R.string.reminders_notification_text); //String NOTIFICATION_ACTION = context.getString(R.string.reminders_notification_action); From 9c40622428bdad73bdad27c476014c2223f51766 Mon Sep 17 00:00:00 2001 From: Alexandru Simonescu Date: Fri, 23 Sep 2016 18:45:06 +0200 Subject: [PATCH 19/82] Updated deprecated comment from WebviewClient --- .../java/org/glucosio/android/activity/LicenceActivity.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/glucosio/android/activity/LicenceActivity.java b/app/src/main/java/org/glucosio/android/activity/LicenceActivity.java index b35f884e..dd538ecd 100644 --- a/app/src/main/java/org/glucosio/android/activity/LicenceActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/LicenceActivity.java @@ -23,6 +23,7 @@ import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.MenuItem; +import android.webkit.WebResourceRequest; import android.webkit.WebView; import android.webkit.WebViewClient; @@ -62,7 +63,7 @@ protected void onCreate(Bundle savedInstanceState) { } webView.setWebViewClient(new WebViewClient() { - public boolean shouldOverrideUrlLoading(WebView view, String url) { + public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { return true; } }); From f9dbb115c15f40a1a5e51439560a2b487ebfbecf Mon Sep 17 00:00:00 2001 From: Alexandru Simonescu Date: Fri, 23 Sep 2016 18:47:25 +0200 Subject: [PATCH 20/82] Moved URLs as fields --- .../glucosio/android/activity/LicenceActivity.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/activity/LicenceActivity.java b/app/src/main/java/org/glucosio/android/activity/LicenceActivity.java index dd538ecd..2ce64622 100644 --- a/app/src/main/java/org/glucosio/android/activity/LicenceActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/LicenceActivity.java @@ -26,12 +26,14 @@ import android.webkit.WebResourceRequest; import android.webkit.WebView; import android.webkit.WebViewClient; - import org.glucosio.android.R; public class LicenceActivity extends AppCompatActivity { + private final String GLUCOSIO_TERMS = "http://www.glucosio.org/terms/"; + private final String GLUCOSIO_LICENSES = "http://www.glucosio.org/third-party-licenses/"; + private final String GLUCOSIO_PRIVACY = "http://www.glucosio.org/privacy/"; @Override protected void onCreate(Bundle savedInstanceState) { @@ -52,13 +54,13 @@ protected void onCreate(Bundle savedInstanceState) { if (url != null && url.equals("privacy")) { - webView.loadUrl("http://www.glucosio.org/privacy/"); + webView.loadUrl(GLUCOSIO_PRIVACY); getSupportActionBar().setTitle(getResources().getString(R.string.preferences_privacy)); } else if (url != null && url.equals("open_source")) { - webView.loadUrl("http://www.glucosio.org/third-party-licenses/"); + webView.loadUrl(GLUCOSIO_LICENSES); getSupportActionBar().setTitle(getResources().getString(R.string.preferences_licences_open)); } else { - webView.loadUrl("http://www.glucosio.org/terms/"); + webView.loadUrl(GLUCOSIO_TERMS); getSupportActionBar().setTitle(getResources().getString(R.string.preferences_terms)); } @@ -66,6 +68,7 @@ protected void onCreate(Bundle savedInstanceState) { public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { return true; } + }); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); From 31183c571ce62df0f74a0f215f98b3ff48714485 Mon Sep 17 00:00:00 2001 From: Alexandru Simonescu Date: Fri, 23 Sep 2016 18:54:50 +0200 Subject: [PATCH 21/82] Extracted some methods and leaved the code cleaner --- .../android/activity/LicenceActivity.java | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/activity/LicenceActivity.java b/app/src/main/java/org/glucosio/android/activity/LicenceActivity.java index 2ce64622..426ef1a3 100644 --- a/app/src/main/java/org/glucosio/android/activity/LicenceActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/LicenceActivity.java @@ -41,27 +41,19 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_licence); WebView webView = (WebView) findViewById(R.id.webview_licence); - Bundle p; - String url; // Check if extras are available. If not, show terms by default - if (getIntent().getExtras() != null) { - p = getIntent().getExtras(); - url = p.getString("key"); - } else { - url = "terms"; - } - + String url = extractUrl(); if (url != null && url.equals("privacy")) { webView.loadUrl(GLUCOSIO_PRIVACY); - getSupportActionBar().setTitle(getResources().getString(R.string.preferences_privacy)); + setToolbarTitle(getResources().getString(R.string.preferences_privacy)); } else if (url != null && url.equals("open_source")) { webView.loadUrl(GLUCOSIO_LICENSES); - getSupportActionBar().setTitle(getResources().getString(R.string.preferences_licences_open)); + setToolbarTitle(getResources().getString(R.string.preferences_licences_open)); } else { webView.loadUrl(GLUCOSIO_TERMS); - getSupportActionBar().setTitle(getResources().getString(R.string.preferences_terms)); + setToolbarTitle(getResources().getString(R.string.preferences_terms)); } webView.setWebViewClient(new WebViewClient() { @@ -76,6 +68,23 @@ public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request } + private String extractUrl() { + Bundle p; + String url; + if (getIntent().getExtras() != null) { + p = getIntent().getExtras(); + url = p.getString("key"); + } else { + url = "terms"; + } + return url; + } + + private void setToolbarTitle(String string) { + if (getSupportActionBar() != null) { + getSupportActionBar().setTitle(string); + } + } public boolean onOptionsItemSelected(MenuItem item) { finish(); From 5585641d4f778e517b78c8e026a73526b58d7a5d Mon Sep 17 00:00:00 2001 From: Alexandru Simonescu Date: Fri, 23 Sep 2016 18:59:23 +0200 Subject: [PATCH 22/82] Created basic network connectivity --- .../network/BasicNetworkConnectivity.java | 38 +++++++++++++++++++ .../tools/network/NetworkConnectivity.java | 7 ++++ 2 files changed, 45 insertions(+) create mode 100644 app/src/main/java/org/glucosio/android/tools/network/BasicNetworkConnectivity.java create mode 100644 app/src/main/java/org/glucosio/android/tools/network/NetworkConnectivity.java diff --git a/app/src/main/java/org/glucosio/android/tools/network/BasicNetworkConnectivity.java b/app/src/main/java/org/glucosio/android/tools/network/BasicNetworkConnectivity.java new file mode 100644 index 00000000..86568596 --- /dev/null +++ b/app/src/main/java/org/glucosio/android/tools/network/BasicNetworkConnectivity.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2016 Glucosio Foundation + * + * This file is part of Glucosio. + * + * Glucosio 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, version 3. + * + * Glucosio 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 Glucosio. If not, see . + * + * + */ + +package org.glucosio.android.tools.network; + +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; + +public class BasicNetworkConnectivity implements NetworkConnectivity { + + public boolean isConnected(Context context) { + ConnectivityManager cm = provideConnectivityService(context); + NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); + return activeNetwork != null && activeNetwork.isConnectedOrConnecting(); + } + + private static ConnectivityManager provideConnectivityService(Context context) { + return (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + } +} diff --git a/app/src/main/java/org/glucosio/android/tools/network/NetworkConnectivity.java b/app/src/main/java/org/glucosio/android/tools/network/NetworkConnectivity.java new file mode 100644 index 00000000..78262c0c --- /dev/null +++ b/app/src/main/java/org/glucosio/android/tools/network/NetworkConnectivity.java @@ -0,0 +1,7 @@ +package org.glucosio.android.tools.network; + +/** + * Created by alexsimo on 9/23/16. + */ +public interface NetworkConnectivity { +} From ff56ba567ed003ff4736896217d04a242496441c Mon Sep 17 00:00:00 2001 From: Alexandru Simonescu Date: Fri, 23 Sep 2016 22:28:12 +0200 Subject: [PATCH 23/82] Extracted external glucosio links to separate class --- .../android/tools/network/GlucosioExternalLinks.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 app/src/main/java/org/glucosio/android/tools/network/GlucosioExternalLinks.java diff --git a/app/src/main/java/org/glucosio/android/tools/network/GlucosioExternalLinks.java b/app/src/main/java/org/glucosio/android/tools/network/GlucosioExternalLinks.java new file mode 100644 index 00000000..ede0e95a --- /dev/null +++ b/app/src/main/java/org/glucosio/android/tools/network/GlucosioExternalLinks.java @@ -0,0 +1,7 @@ +package org.glucosio.android.tools.network; + +public class GlucosioExternalLinks { + public static final String TERMS = "http://www.glucosio.org/terms/"; + public static final String LICENSES = "http://www.glucosio.org/third-party-licenses/"; + public static final String PRIVACY = "http://www.glucosio.org/privacy/"; +} \ No newline at end of file From 8c95fa13ec78721571f15919c7ea30176922f87f Mon Sep 17 00:00:00 2001 From: Alexandru Simonescu Date: Fri, 23 Sep 2016 22:28:47 +0200 Subject: [PATCH 24/82] Create and improved the basic network availability implementation --- .../tools/network/BasicNetworkConnectivity.java | 11 +++++++++-- .../android/tools/network/NetworkConnectivity.java | 4 +--- build.gradle | 2 +- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/tools/network/BasicNetworkConnectivity.java b/app/src/main/java/org/glucosio/android/tools/network/BasicNetworkConnectivity.java index 86568596..e8cb19f6 100644 --- a/app/src/main/java/org/glucosio/android/tools/network/BasicNetworkConnectivity.java +++ b/app/src/main/java/org/glucosio/android/tools/network/BasicNetworkConnectivity.java @@ -23,11 +23,18 @@ import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; +import java.lang.ref.WeakReference; public class BasicNetworkConnectivity implements NetworkConnectivity { - public boolean isConnected(Context context) { - ConnectivityManager cm = provideConnectivityService(context); + private WeakReference context; + + public BasicNetworkConnectivity(Context context) { + this.context = new WeakReference<>(context); + } + + public boolean isConnected() { + ConnectivityManager cm = provideConnectivityService(context.get()); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); return activeNetwork != null && activeNetwork.isConnectedOrConnecting(); } diff --git a/app/src/main/java/org/glucosio/android/tools/network/NetworkConnectivity.java b/app/src/main/java/org/glucosio/android/tools/network/NetworkConnectivity.java index 78262c0c..6440fc3d 100644 --- a/app/src/main/java/org/glucosio/android/tools/network/NetworkConnectivity.java +++ b/app/src/main/java/org/glucosio/android/tools/network/NetworkConnectivity.java @@ -1,7 +1,5 @@ package org.glucosio.android.tools.network; -/** - * Created by alexsimo on 9/23/16. - */ public interface NetworkConnectivity { + boolean isConnected(); } diff --git a/build.gradle b/build.gradle index c4be2f3a..b7792e9d 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ buildscript { dependencies { // TODO: Please revert to a stable gradle version before releasing on prod // Alpha is required in devel to use Instant Run and speed up development process - classpath 'com.android.tools.build:gradle:2.2.0-rc1' + classpath 'com.android.tools.build:gradle:2.2.0' classpath 'com.google.gms:google-services:3.0.0' classpath 'io.realm:realm-gradle-plugin:1.1.1' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' From 790645ea4cf5c40d8c1cecfb5f6868d9687a8444 Mon Sep 17 00:00:00 2001 From: Alexandru Simonescu Date: Fri, 23 Sep 2016 22:29:29 +0200 Subject: [PATCH 25/82] Refactored the LicenseActivity: - Made a presenter - Some basic interaction tests --- .../android/activity/LicenceActivity.java | 93 +++++++++++++------ .../presenter/ExternalViewPresenter.java | 77 +++++++++++++++ app/src/main/res/values/strings.xml | 1 + .../presenter/ExternalViewPresenterTest.java | 71 ++++++++++++++ 4 files changed, 214 insertions(+), 28 deletions(-) create mode 100644 app/src/main/java/org/glucosio/android/presenter/ExternalViewPresenter.java create mode 100644 app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java diff --git a/app/src/main/java/org/glucosio/android/activity/LicenceActivity.java b/app/src/main/java/org/glucosio/android/activity/LicenceActivity.java index 426ef1a3..309a2e41 100644 --- a/app/src/main/java/org/glucosio/android/activity/LicenceActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/LicenceActivity.java @@ -20,64 +20,101 @@ package org.glucosio.android.activity; +import android.content.DialogInterface; import android.os.Bundle; +import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.view.MenuItem; import android.webkit.WebResourceRequest; import android.webkit.WebView; import android.webkit.WebViewClient; +import java.util.HashMap; +import java.util.Map; import org.glucosio.android.R; +import org.glucosio.android.presenter.ExternalViewPresenter; +import org.glucosio.android.tools.network.BasicNetworkConnectivity; +import org.glucosio.android.tools.network.GlucosioExternalLinks; +public class LicenceActivity extends AppCompatActivity implements ExternalViewPresenter.View { -public class LicenceActivity extends AppCompatActivity { - - private final String GLUCOSIO_TERMS = "http://www.glucosio.org/terms/"; - private final String GLUCOSIO_LICENSES = "http://www.glucosio.org/third-party-licenses/"; - private final String GLUCOSIO_PRIVACY = "http://www.glucosio.org/privacy/"; + private ExternalViewPresenter presenter; + private WebView webView; + private Map toolbarTitle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_licence); - WebView webView = (WebView) findViewById(R.id.webview_licence); - - - // Check if extras are available. If not, show terms by default - String url = extractUrl(); + webView = (WebView) findViewById(R.id.webview_licence); + init(); + } - if (url != null && url.equals("privacy")) { - webView.loadUrl(GLUCOSIO_PRIVACY); - setToolbarTitle(getResources().getString(R.string.preferences_privacy)); - } else if (url != null && url.equals("open_source")) { - webView.loadUrl(GLUCOSIO_LICENSES); - setToolbarTitle(getResources().getString(R.string.preferences_licences_open)); - } else { - webView.loadUrl(GLUCOSIO_TERMS); - setToolbarTitle(getResources().getString(R.string.preferences_terms)); - } + private void init() { + initTitles(); + initPresenter(); + initView(); + } + private void initView() { webView.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { return true; } }); - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getSupportActionBar().setDisplayShowHomeEnabled(true); + setupToolbar(); + } + private void initPresenter() { + presenter = new ExternalViewPresenter(this, new BasicNetworkConnectivity(this)); + presenter.onViewCreated(); + } + @Override + public void setupToolbarTitle(String link) { + if (toolbarTitle.containsKey(link)) { + setToolbarTitle(getString(toolbarTitle.get(link))); + } } - private String extractUrl() { + @Override public String extractAction() { Bundle p; - String url; if (getIntent().getExtras() != null) { p = getIntent().getExtras(); - url = p.getString("key"); - } else { - url = "terms"; + return p.getString("key"); } - return url; + return null; + } + + @Override + public void loadExternalUrl(String url) { + webView.loadUrl(url); + } + + @Override public void showNoConnectionWarning() { + AlertDialog dialog = new AlertDialog.Builder(this) + .setMessage(R.string.warning_internet_connection_required) + .setPositiveButton(R.string.mdtp_ok, new DialogInterface.OnClickListener() { + @Override public void onClick(DialogInterface dialog, int which) { + LicenceActivity.this.finish(); + } + }) + .create(); + dialog.show(); + } + + private void setupToolbar() { + if (getSupportActionBar() != null) { + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setDisplayShowHomeEnabled(true); + } + } + + private void initTitles() { + toolbarTitle = new HashMap<>(); + toolbarTitle.put(GlucosioExternalLinks.PRIVACY, R.string.preferences_privacy); + toolbarTitle.put(GlucosioExternalLinks.LICENSES, R.string.preferences_licences_open); + toolbarTitle.put(GlucosioExternalLinks.TERMS, R.string.preferences_licences_open); } private void setToolbarTitle(String string) { diff --git a/app/src/main/java/org/glucosio/android/presenter/ExternalViewPresenter.java b/app/src/main/java/org/glucosio/android/presenter/ExternalViewPresenter.java new file mode 100644 index 00000000..cb6eee62 --- /dev/null +++ b/app/src/main/java/org/glucosio/android/presenter/ExternalViewPresenter.java @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2016 Glucosio Foundation + * + * This file is part of Glucosio. + * + * Glucosio 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, version 3. + * + * Glucosio 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 Glucosio. If not, see . + * + * + */ + +package org.glucosio.android.presenter; + +import java.util.HashMap; +import java.util.Map; +import org.glucosio.android.tools.network.GlucosioExternalLinks; +import org.glucosio.android.tools.network.NetworkConnectivity; + +public class ExternalViewPresenter { + private final String TERMS = "terms"; + private final String OPEN_SOURCE = "open_source"; + private final String PRIVACY = "privacy"; + private ExternalViewPresenter.View view; + private NetworkConnectivity network; + private Map urlMatchings; + + public ExternalViewPresenter(View view, NetworkConnectivity network) { + this.view = view; + this.network = network; + initUrls(); + } + + private void initUrls() { + urlMatchings = new HashMap<>(); + urlMatchings.put(PRIVACY, GlucosioExternalLinks.PRIVACY); + urlMatchings.put(OPEN_SOURCE, GlucosioExternalLinks.LICENSES); + urlMatchings.put(TERMS, GlucosioExternalLinks.TERMS); + } + + public void onViewCreated() { + if (network.isConnected()) { + String action = view.extractAction(); + String url = matchUrlToAction(action); + view.setupToolbarTitle(url); + view.loadExternalUrl(url); + } else { + view.showNoConnectionWarning(); + } + } + + private String matchUrlToAction(String action) { + String url = GlucosioExternalLinks.TERMS; + if (action != null && urlMatchings.containsKey(action)) { + url = urlMatchings.get(action); + } + return url; + } + + public interface View { + void setupToolbarTitle(String link); + + String extractAction(); + + void loadExternalUrl(String url); + + void showNoConnectionWarning(); + } +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4fbb0a9b..0f108974 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -448,4 +448,5 @@ Revert to old graph history save + Sorry but you need internet for this feature diff --git a/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java b/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java new file mode 100644 index 00000000..bbac6608 --- /dev/null +++ b/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java @@ -0,0 +1,71 @@ +package org.glucosio.android.presenter; + +import org.glucosio.android.tools.network.GlucosioExternalLinks; +import org.glucosio.android.tools.network.NetworkConnectivity; +import org.junit.Before; +import org.junit.Test; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class ExternalViewPresenterTest { + + private ExternalViewPresenter.View view; + private ExternalViewPresenter presenter; + private NetworkConnectivity network; + + @Before public void setUp() throws Exception { + view = mock(ExternalViewPresenter.View.class); + network = mock(NetworkConnectivity.class); + presenter = new ExternalViewPresenter(view, network); + } + + @Test + public void ShouldLoadTerms_WhenNoExtras() throws Exception { + when(network.isConnected()).thenReturn(true); + when(view.extractAction()).thenReturn(null); + + presenter.onViewCreated(); + + verify(view).loadExternalUrl(GlucosioExternalLinks.TERMS); + } + + @Test + public void ShouldLoadOpenSourceLicenses_WhenLicenseAction() throws Exception { + when(view.extractAction()).thenReturn("open_source"); + when(network.isConnected()).thenReturn(true); + + presenter.onViewCreated(); + + verify(view).loadExternalUrl(GlucosioExternalLinks.LICENSES); + } + + @Test + public void ShouldLoadPrivacy_WhenPrivacyAction() throws Exception { + when(view.extractAction()).thenReturn("privacy"); + when(network.isConnected()).thenReturn(true); + + presenter.onViewCreated(); + + verify(view).loadExternalUrl(GlucosioExternalLinks.PRIVACY); + } + + @Test public void ShouldLoadAlwaysTerms_WhenUnknownAction() throws Exception { + when(view.extractAction()).thenReturn("unknown"); + when(network.isConnected()).thenReturn(true); + + presenter.onViewCreated(); + + verify(view).loadExternalUrl(GlucosioExternalLinks.TERMS); + } + + @Test public void ShouldDisplayTermsToolbarTitle_WhenDefaultAction() throws Exception { + when(view.extractAction()).thenReturn("unknown"); + when(network.isConnected()).thenReturn(true); + + presenter.onViewCreated(); + + verify(view).setupToolbarTitle(GlucosioExternalLinks.TERMS); + } +} \ No newline at end of file From 41649108ae3e5e2da2918ac6ae03f4e574843476 Mon Sep 17 00:00:00 2001 From: Alexandru Simonescu Date: Fri, 23 Sep 2016 22:30:20 +0200 Subject: [PATCH 26/82] Applied some format --- .../java/org/glucosio/android/activity/LicenceActivity.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/activity/LicenceActivity.java b/app/src/main/java/org/glucosio/android/activity/LicenceActivity.java index 309a2e41..54ea3816 100644 --- a/app/src/main/java/org/glucosio/android/activity/LicenceActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/LicenceActivity.java @@ -77,7 +77,8 @@ public void setupToolbarTitle(String link) { } } - @Override public String extractAction() { + @Override + public String extractAction() { Bundle p; if (getIntent().getExtras() != null) { p = getIntent().getExtras(); @@ -91,7 +92,8 @@ public void loadExternalUrl(String url) { webView.loadUrl(url); } - @Override public void showNoConnectionWarning() { + @Override + public void showNoConnectionWarning() { AlertDialog dialog = new AlertDialog.Builder(this) .setMessage(R.string.warning_internet_connection_required) .setPositiveButton(R.string.mdtp_ok, new DialogInterface.OnClickListener() { From 22dafe537bb14b6d5e393acfef9a9ed4e1ebfd4d Mon Sep 17 00:00:00 2001 From: Alexandru Simonescu Date: Fri, 23 Sep 2016 22:35:34 +0200 Subject: [PATCH 27/82] Renamed to ExternalLinkActivity --- app/src/main/AndroidManifest.xml | 2 +- .../android/activity/AboutActivity.java | 11 ++++------- ...ctivity.java => ExternalLinkActivity.java} | 4 ++-- .../android/activity/HelloActivity.java | 19 ++++++++----------- 4 files changed, 15 insertions(+), 21 deletions(-) rename app/src/main/java/org/glucosio/android/activity/{LicenceActivity.java => ExternalLinkActivity.java} (96%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 51ec1294..bc3d4a80 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -66,7 +66,7 @@ android:name=".activity.PreferencesActivity" android:theme="@style/GlucosioSettings" /> Date: Sat, 24 Sep 2016 10:02:21 +0200 Subject: [PATCH 28/82] Dialog made not cancelable --- .../java/org/glucosio/android/activity/ExternalLinkActivity.java | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/org/glucosio/android/activity/ExternalLinkActivity.java b/app/src/main/java/org/glucosio/android/activity/ExternalLinkActivity.java index 79daba25..4672b35b 100644 --- a/app/src/main/java/org/glucosio/android/activity/ExternalLinkActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/ExternalLinkActivity.java @@ -96,6 +96,7 @@ public void loadExternalUrl(String url) { public void showNoConnectionWarning() { AlertDialog dialog = new AlertDialog.Builder(this) .setMessage(R.string.warning_internet_connection_required) + .setCancelable(false) .setPositiveButton(R.string.mdtp_ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ExternalLinkActivity.this.finish(); From 8f9cab08431f7b9942ab500f6cea32ea831aaf46 Mon Sep 17 00:00:00 2001 From: Alexandru Simonescu Date: Sat, 24 Sep 2016 23:17:23 +0200 Subject: [PATCH 29/82] Typo fix for preferences terms --- .../org/glucosio/android/activity/ExternalLinkActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/glucosio/android/activity/ExternalLinkActivity.java b/app/src/main/java/org/glucosio/android/activity/ExternalLinkActivity.java index 4672b35b..613b1f88 100644 --- a/app/src/main/java/org/glucosio/android/activity/ExternalLinkActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/ExternalLinkActivity.java @@ -117,7 +117,7 @@ private void initTitles() { toolbarTitle = new HashMap<>(); toolbarTitle.put(GlucosioExternalLinks.PRIVACY, R.string.preferences_privacy); toolbarTitle.put(GlucosioExternalLinks.LICENSES, R.string.preferences_licences_open); - toolbarTitle.put(GlucosioExternalLinks.TERMS, R.string.preferences_licences_open); + toolbarTitle.put(GlucosioExternalLinks.TERMS, R.string.preferences_terms); } private void setToolbarTitle(String string) { From 4ddf4edc96f68e501316691fa282a77837b5d4b2 Mon Sep 17 00:00:00 2001 From: Alexandru Simonescu Date: Sat, 24 Sep 2016 23:18:38 +0200 Subject: [PATCH 30/82] Initialized map with predefined 3 elements --- .../org/glucosio/android/presenter/ExternalViewPresenter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/glucosio/android/presenter/ExternalViewPresenter.java b/app/src/main/java/org/glucosio/android/presenter/ExternalViewPresenter.java index cb6eee62..5e84b8af 100644 --- a/app/src/main/java/org/glucosio/android/presenter/ExternalViewPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/ExternalViewPresenter.java @@ -40,7 +40,7 @@ public ExternalViewPresenter(View view, NetworkConnectivity network) { } private void initUrls() { - urlMatchings = new HashMap<>(); + urlMatchings = new HashMap<>(3); urlMatchings.put(PRIVACY, GlucosioExternalLinks.PRIVACY); urlMatchings.put(OPEN_SOURCE, GlucosioExternalLinks.LICENSES); urlMatchings.put(TERMS, GlucosioExternalLinks.TERMS); From d563dde38e4ff443e8eb15536cbe3fd70ed8fb2f Mon Sep 17 00:00:00 2001 From: Alexandru Simonescu Date: Tue, 27 Sep 2016 23:13:57 +0200 Subject: [PATCH 31/82] =?UTF-8?q?Created=20launcher=20method=CB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../android/activity/ExternalLinkActivity.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/src/main/java/org/glucosio/android/activity/ExternalLinkActivity.java b/app/src/main/java/org/glucosio/android/activity/ExternalLinkActivity.java index 613b1f88..9ceb8087 100644 --- a/app/src/main/java/org/glucosio/android/activity/ExternalLinkActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/ExternalLinkActivity.java @@ -20,7 +20,9 @@ package org.glucosio.android.activity; +import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; @@ -37,10 +39,19 @@ public class ExternalLinkActivity extends AppCompatActivity implements ExternalViewPresenter.View { + private static final String TITLE_KEY = "TITLE_KEY"; + private static final String URL_KEY = "URL_KEY"; private ExternalViewPresenter presenter; private WebView webView; private Map toolbarTitle; + public static void launch(Context context, String title, String url) { + Intent intent = new Intent(context, ExternalLinkActivity.class); + intent.putExtra(TITLE_KEY, title); + intent.putExtra(URL_KEY, url); + context.startActivity(intent); + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); From 2891655b5feac048e6ea6787b79b7ef18403c7ff Mon Sep 17 00:00:00 2001 From: Alexandru Simonescu Date: Tue, 27 Sep 2016 23:19:43 +0200 Subject: [PATCH 32/82] Replaced old call to Terms --- .../org/glucosio/android/activity/AboutActivity.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/activity/AboutActivity.java b/app/src/main/java/org/glucosio/android/activity/AboutActivity.java index 1970d85b..8bde5cdf 100644 --- a/app/src/main/java/org/glucosio/android/activity/AboutActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/AboutActivity.java @@ -33,6 +33,7 @@ import org.glucosio.android.GlucosioApplication; import org.glucosio.android.R; import org.glucosio.android.analytics.Analytics; +import org.glucosio.android.tools.network.GlucosioExternalLinks; import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper; public class AboutActivity extends AppCompatActivity { @@ -77,14 +78,11 @@ public void onCreate(final Bundle savedInstanceState) { termsPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { - Intent intent = new Intent(getActivity(), ExternalLinkActivity.class); - Bundle bundle = new Bundle(); - bundle.putString("key", "terms"); - intent.putExtras(bundle); - startActivity(intent); - + ExternalLinkActivity.launch( + getActivity(), + getString(R.string.preferences_terms), + GlucosioExternalLinks.TERMS); addTermsAnalyticsEvent("Glucosio Terms opened"); - return false; } }); From 268c8a111443ac6ab0eacb117c3db1dcaac8dcd5 Mon Sep 17 00:00:00 2001 From: Alexandru Simonescu Date: Tue, 27 Sep 2016 23:20:32 +0200 Subject: [PATCH 33/82] Replaced old call to Terms on HelloActivity --- .../java/org/glucosio/android/activity/HelloActivity.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/activity/HelloActivity.java b/app/src/main/java/org/glucosio/android/activity/HelloActivity.java index 68880e10..6a47bb39 100644 --- a/app/src/main/java/org/glucosio/android/activity/HelloActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/HelloActivity.java @@ -45,6 +45,7 @@ import org.glucosio.android.presenter.HelloPresenter; import org.glucosio.android.tools.LabelledSpinner; import org.glucosio.android.tools.LocaleHelper; +import org.glucosio.android.tools.network.GlucosioExternalLinks; import org.glucosio.android.view.HelloView; import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper; @@ -174,8 +175,10 @@ void onStartClicked() { @OnClick(R.id.helloactivity_textview_terms) void onTermsAndConditionClick() { - Intent intent = new Intent(HelloActivity.this, ExternalLinkActivity.class); - startActivity(intent); + ExternalLinkActivity.launch( + this, + getString(R.string.preferences_terms), + GlucosioExternalLinks.TERMS); } public void displayErrorWrongAge() { From 0330111f9fbe6b471856fe7230e05fda517c1adb Mon Sep 17 00:00:00 2001 From: Alexandru Simonescu Date: Tue, 27 Sep 2016 23:23:30 +0200 Subject: [PATCH 34/82] Replaced all old called with the new launch method --- .../android/activity/AboutActivity.java | 21 +++++++------------ 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/activity/AboutActivity.java b/app/src/main/java/org/glucosio/android/activity/AboutActivity.java index 8bde5cdf..5295c72c 100644 --- a/app/src/main/java/org/glucosio/android/activity/AboutActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/AboutActivity.java @@ -90,12 +90,10 @@ public boolean onPreferenceClick(Preference preference) { licencesPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { - Intent intent = new Intent(getActivity(), ExternalLinkActivity.class); - Bundle bundle = new Bundle(); - bundle.putString("key", "open_source"); - intent.putExtras(bundle); - startActivity(intent); - + ExternalLinkActivity.launch( + getActivity(), + getString(R.string.preferences_licences_open), + GlucosioExternalLinks.LICENSES); addTermsAnalyticsEvent("Glucosio Licence opened"); return false; } @@ -131,14 +129,11 @@ public boolean onPreferenceClick(Preference preference) { privacyPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { - Intent intent = new Intent(getActivity(), ExternalLinkActivity.class); - Bundle bundle = new Bundle(); - bundle.putString("key", "privacy"); - intent.putExtras(bundle); - startActivity(intent); - + ExternalLinkActivity.launch( + getActivity(), + getString(R.string.preferences_privacy), + GlucosioExternalLinks.PRIVACY); addTermsAnalyticsEvent("Glucosio Privacy opened"); - return false; } }); From d62b47db488dedb57b4bdb871345b5f13d1e44af Mon Sep 17 00:00:00 2001 From: Alexandru Simonescu Date: Tue, 27 Sep 2016 23:29:52 +0200 Subject: [PATCH 35/82] Created extractor method for extracting title and url from intent extra --- .../activity/ExternalLinkActivity.java | 17 +++++++--- .../presenter/ExternalViewPresenter.java | 34 ++++--------------- .../presenter/ExternalViewPresenterTest.java | 10 +++--- 3 files changed, 24 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/activity/ExternalLinkActivity.java b/app/src/main/java/org/glucosio/android/activity/ExternalLinkActivity.java index 9ceb8087..32b8c8a2 100644 --- a/app/src/main/java/org/glucosio/android/activity/ExternalLinkActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/ExternalLinkActivity.java @@ -89,13 +89,20 @@ public void setupToolbarTitle(String link) { } @Override - public String extractAction() { - Bundle p; + public String extractTitle() { + String title = ""; if (getIntent().getExtras() != null) { - p = getIntent().getExtras(); - return p.getString("key"); + title = getIntent().getStringExtra(TITLE_KEY); } - return null; + return title; + } + + @Override public String extractUrl() { + String url = ""; + if (getIntent().getExtras() != null) { + url = getIntent().getStringExtra(URL_KEY); + } + return url; } @Override diff --git a/app/src/main/java/org/glucosio/android/presenter/ExternalViewPresenter.java b/app/src/main/java/org/glucosio/android/presenter/ExternalViewPresenter.java index 5e84b8af..7a82f82b 100644 --- a/app/src/main/java/org/glucosio/android/presenter/ExternalViewPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/ExternalViewPresenter.java @@ -20,55 +20,35 @@ package org.glucosio.android.presenter; -import java.util.HashMap; -import java.util.Map; -import org.glucosio.android.tools.network.GlucosioExternalLinks; import org.glucosio.android.tools.network.NetworkConnectivity; public class ExternalViewPresenter { - private final String TERMS = "terms"; - private final String OPEN_SOURCE = "open_source"; - private final String PRIVACY = "privacy"; + private ExternalViewPresenter.View view; private NetworkConnectivity network; - private Map urlMatchings; public ExternalViewPresenter(View view, NetworkConnectivity network) { this.view = view; this.network = network; - initUrls(); - } - - private void initUrls() { - urlMatchings = new HashMap<>(3); - urlMatchings.put(PRIVACY, GlucosioExternalLinks.PRIVACY); - urlMatchings.put(OPEN_SOURCE, GlucosioExternalLinks.LICENSES); - urlMatchings.put(TERMS, GlucosioExternalLinks.TERMS); } public void onViewCreated() { if (network.isConnected()) { - String action = view.extractAction(); - String url = matchUrlToAction(action); - view.setupToolbarTitle(url); + String title = view.extractTitle(); + String url = view.extractUrl(); + view.setupToolbarTitle(title); view.loadExternalUrl(url); } else { view.showNoConnectionWarning(); } } - private String matchUrlToAction(String action) { - String url = GlucosioExternalLinks.TERMS; - if (action != null && urlMatchings.containsKey(action)) { - url = urlMatchings.get(action); - } - return url; - } - public interface View { void setupToolbarTitle(String link); - String extractAction(); + String extractTitle(); + + String extractUrl(); void loadExternalUrl(String url); diff --git a/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java b/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java index bbac6608..ccc3fa81 100644 --- a/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java +++ b/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java @@ -24,7 +24,7 @@ public class ExternalViewPresenterTest { @Test public void ShouldLoadTerms_WhenNoExtras() throws Exception { when(network.isConnected()).thenReturn(true); - when(view.extractAction()).thenReturn(null); + when(view.extractTitle()).thenReturn(null); presenter.onViewCreated(); @@ -33,7 +33,7 @@ public void ShouldLoadTerms_WhenNoExtras() throws Exception { @Test public void ShouldLoadOpenSourceLicenses_WhenLicenseAction() throws Exception { - when(view.extractAction()).thenReturn("open_source"); + when(view.extractTitle()).thenReturn("open_source"); when(network.isConnected()).thenReturn(true); presenter.onViewCreated(); @@ -43,7 +43,7 @@ public void ShouldLoadOpenSourceLicenses_WhenLicenseAction() throws Exception { @Test public void ShouldLoadPrivacy_WhenPrivacyAction() throws Exception { - when(view.extractAction()).thenReturn("privacy"); + when(view.extractTitle()).thenReturn("privacy"); when(network.isConnected()).thenReturn(true); presenter.onViewCreated(); @@ -52,7 +52,7 @@ public void ShouldLoadPrivacy_WhenPrivacyAction() throws Exception { } @Test public void ShouldLoadAlwaysTerms_WhenUnknownAction() throws Exception { - when(view.extractAction()).thenReturn("unknown"); + when(view.extractTitle()).thenReturn("unknown"); when(network.isConnected()).thenReturn(true); presenter.onViewCreated(); @@ -61,7 +61,7 @@ public void ShouldLoadPrivacy_WhenPrivacyAction() throws Exception { } @Test public void ShouldDisplayTermsToolbarTitle_WhenDefaultAction() throws Exception { - when(view.extractAction()).thenReturn("unknown"); + when(view.extractTitle()).thenReturn("unknown"); when(network.isConnected()).thenReturn(true); presenter.onViewCreated(); From 147ac00b2c4a423c56f435041a0ace27c6154cc8 Mon Sep 17 00:00:00 2001 From: Alexandru Simonescu Date: Tue, 27 Sep 2016 23:38:52 +0200 Subject: [PATCH 36/82] Removed obsolete tests and changed behaviour for presenter --- .../presenter/ExternalViewPresenter.java | 11 +++++ .../presenter/ExternalViewPresenterTest.java | 41 ++++--------------- 2 files changed, 18 insertions(+), 34 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/presenter/ExternalViewPresenter.java b/app/src/main/java/org/glucosio/android/presenter/ExternalViewPresenter.java index 7a82f82b..4c6a4e4b 100644 --- a/app/src/main/java/org/glucosio/android/presenter/ExternalViewPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/ExternalViewPresenter.java @@ -36,6 +36,7 @@ public void onViewCreated() { if (network.isConnected()) { String title = view.extractTitle(); String url = view.extractUrl(); + parametersPrecondition(title, url); view.setupToolbarTitle(title); view.loadExternalUrl(url); } else { @@ -43,6 +44,16 @@ public void onViewCreated() { } } + private void parametersPrecondition(String title, String url) { + if ((invalidParam(title)) || invalidParam(url)) { + throw new RuntimeException("Invalid arguments: need URL and TITLE"); + } + } + + private boolean invalidParam(String url) { + return url == null || url.length() == 0; + } + public interface View { void setupToolbarTitle(String link); diff --git a/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java b/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java index ccc3fa81..1c984459 100644 --- a/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java +++ b/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java @@ -21,51 +21,24 @@ public class ExternalViewPresenterTest { presenter = new ExternalViewPresenter(view, network); } - @Test - public void ShouldLoadTerms_WhenNoExtras() throws Exception { + @Test(expected = RuntimeException.class) + public void ShouldThrowException_WhenNoParameters() throws Exception { when(network.isConnected()).thenReturn(true); when(view.extractTitle()).thenReturn(null); presenter.onViewCreated(); - verify(view).loadExternalUrl(GlucosioExternalLinks.TERMS); } - @Test - public void ShouldLoadOpenSourceLicenses_WhenLicenseAction() throws Exception { - when(view.extractTitle()).thenReturn("open_source"); + @Test public void ShouldLoadOpenSourceLicenses_WhenLicenseParameters() throws Exception { + String LICENSES = "licenses"; + when(view.extractUrl()).thenReturn(GlucosioExternalLinks.LICENSES); + when(view.extractTitle()).thenReturn(LICENSES); when(network.isConnected()).thenReturn(true); presenter.onViewCreated(); verify(view).loadExternalUrl(GlucosioExternalLinks.LICENSES); - } - - @Test - public void ShouldLoadPrivacy_WhenPrivacyAction() throws Exception { - when(view.extractTitle()).thenReturn("privacy"); - when(network.isConnected()).thenReturn(true); - - presenter.onViewCreated(); - - verify(view).loadExternalUrl(GlucosioExternalLinks.PRIVACY); - } - - @Test public void ShouldLoadAlwaysTerms_WhenUnknownAction() throws Exception { - when(view.extractTitle()).thenReturn("unknown"); - when(network.isConnected()).thenReturn(true); - - presenter.onViewCreated(); - - verify(view).loadExternalUrl(GlucosioExternalLinks.TERMS); - } - - @Test public void ShouldDisplayTermsToolbarTitle_WhenDefaultAction() throws Exception { - when(view.extractTitle()).thenReturn("unknown"); - when(network.isConnected()).thenReturn(true); - - presenter.onViewCreated(); - - verify(view).setupToolbarTitle(GlucosioExternalLinks.TERMS); + verify(view).setupToolbarTitle(LICENSES); } } \ No newline at end of file From d5c8d396a15a71a60415fe27b417e6b7dcd4fc67 Mon Sep 17 00:00:00 2001 From: paolorotolo Date: Thu, 29 Sep 2016 14:16:33 +0200 Subject: [PATCH 37/82] Added new strings. Fix label layout. --- .../android/activity/RemindersActivity.java | 6 +++++- .../tools/GlucosioNotificationManager.java | 18 +++++++++++++----- app/src/main/res/values/strings.xml | 11 ++++++++++- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java b/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java index ebca3ce3..437be51e 100644 --- a/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java @@ -15,6 +15,7 @@ import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ListView; +import android.widget.TableLayout; import com.wdullaer.materialdatetimepicker.time.RadialPickerLayout; import com.wdullaer.materialdatetimepicker.time.TimePickerDialog; @@ -62,7 +63,10 @@ public void onClick(final View view) { final EditText input = new EditText(reminderActivity); // Specify the type of input expected; this, for example, sets the input as a password, and will mask the text input.setInputType(InputType.TYPE_CLASS_TEXT); - input.setPadding(16,0,16,0); + // Set EditText margin + TableLayout.LayoutParams params = new TableLayout.LayoutParams(); + params.setMargins(16, 16, 16, 16); + input.setLayoutParams(params); builder.setView(input); // Set up the buttons diff --git a/app/src/main/java/org/glucosio/android/tools/GlucosioNotificationManager.java b/app/src/main/java/org/glucosio/android/tools/GlucosioNotificationManager.java index caf59e21..4f07c4d8 100644 --- a/app/src/main/java/org/glucosio/android/tools/GlucosioNotificationManager.java +++ b/app/src/main/java/org/glucosio/android/tools/GlucosioNotificationManager.java @@ -11,6 +11,8 @@ import org.glucosio.android.R; import org.glucosio.android.activity.AddGlucoseActivity; +import java.util.Random; + public class GlucosioNotificationManager { //private static final String REMOTE_INPUT_KEY = "glucosio_remote_key"; private static final int NOTIFICATION_ID = 11; @@ -21,8 +23,9 @@ public GlucosioNotificationManager(Context context) { } public void sendReminderNotification(String label) { - String NOTIFICATION_TITLE = label + " " + "\u23f0"; - String NOTIFICATION_TEXT = context.getString(R.string.reminders_notification_text); + String notificationTitle = label + " " + "\u23f0"; + String[] arrayString = context.getResources().getStringArray(R.array.reminder_title_array); + String notificationText = arrayString[generateRandomNumber(0, 1)]; //String NOTIFICATION_ACTION = context.getString(R.string.reminders_notification_action); Intent intent = new Intent(context, AddGlucoseActivity.class); @@ -46,14 +49,14 @@ public void sendReminderNotification(String label) { notification = new Notification.Builder(context) .setContentTitle("\u23f0") .setContentText(NOTIFICATION_TEXT) - .setSmallIcon(R.drawable.ic_stat_glucosio) + .setSmallIcon(R.drawable.ic_stat_glucfosio) .setColor(context.getColor(R.color.glucosio_pink)) .setActions(actionNotification) .build(); } else {*/ notificationBuilder = new Notification.Builder(context) - .setContentTitle(NOTIFICATION_TITLE) - .setContentText(NOTIFICATION_TEXT) + .setContentTitle(notificationTitle) + .setContentText(notificationText) .setAutoCancel(true) .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) .setVibrate(new long[]{1000, 1000}) @@ -68,4 +71,9 @@ public void sendReminderNotification(String label) { NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context); notificationManagerCompat.notify(NOTIFICATION_ID, notification); } + + private int generateRandomNumber(int min, int max) { + Random r = new Random(); + return r.nextInt(max - min) + min; + } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dccf6303..7a568269 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -449,10 +449,19 @@ history save Reminders - Time to log your glucose level! Add reading No reminders set. Add a new reminder here. This reminder already exists. Please enter a valid label. Set reminder Label + Good Morning, It is time to do an entry in Glucosio! + Good Afternoon, It is time to do an entry in Glucosio! + Good Morning, It is time to do an entry in Glucosio! + It is time to do an entry in Glucosio! + Time to log your glucose level! + + + @string/reminder_item_title_generic + @string/reminder_item_title_generic2 + From 20ca8ed0b3b7254ad81e34f45d3abaf98ef81d73 Mon Sep 17 00:00:00 2001 From: Glucat Date: Thu, 29 Sep 2016 12:36:09 +0000 Subject: [PATCH 38/82] Automatic translation import (build 957). --- app/src/main/res/values-ast-rES/strings.xml | 5 ++++ app/src/main/res/values-ca-rES/strings.xml | 7 ++++++ app/src/main/res/values-de-rDE/strings.xml | 24 ++++++++++++++++++- app/src/main/res/values-en-rGB/strings.xml | 5 ++++ app/src/main/res/values-fr-rFR/strings.xml | 5 ++++ app/src/main/res/values-fr-rQC/strings.xml | 5 ++++ app/src/main/res/values-gl-rES/strings.xml | 14 +++++++++++ app/src/main/res/values-ja-rJP/strings.xml | 7 ++++++ app/src/main/res/values-lo-rLA/strings.xml | 26 ++++++++++++++------- app/src/main/res/values-ml-rIN/strings.xml | 6 +++++ app/src/main/res/values-mr-rIN/strings.xml | 3 +++ app/src/main/res/values-nl-rNL/strings.xml | 7 ++++++ app/src/main/res/values-ru-rRU/strings.xml | 7 ++++++ app/src/main/res/values-sl-rSI/strings.xml | 7 ++++++ 14 files changed, 119 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/values-ast-rES/strings.xml b/app/src/main/res/values-ast-rES/strings.xml index 9efa3d4c..5cc62b63 100644 --- a/app/src/main/res/values-ast-rES/strings.xml +++ b/app/src/main/res/values-ast-rES/strings.xml @@ -235,8 +235,13 @@ ¡Ye hora de rexistrar el to nivel sanguineu de glucosa! ¡Ye hora de tomar les tos melecines! Notes + Reaniciando p\'aplicar camudancies... Sedrás a restaurar toles tos llectures si pierdes o camudes de teléfonu o sincronizar datos de Glucosio ente los tos preseos. Daqué foi mal. Volvi tentalo, por favor :/ + Encaboxar mmol/mol mmol/L + Recordatorios + ¡Hora de rexistrar el to nivel de glucosa! + Nun s\'afitaron recordatorios. Amiesta nuevos equí. diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index ff6d5b97..6f2823f9 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -226,6 +226,7 @@ S\'ha desat la captura a la galeria S\'ha produït un error en desar la captura a la galeria Rang d\'exportació + Hi ha hagut un error en exportar la configuració. Torneu a provar. No hi ha lectures per a exportar. S\'ha afegit una lectura nova Pes @@ -308,4 +309,10 @@ mmol/mol mmol/L Torna al gràfic antic + historial + desa + Recordatoris + Ara és l\'hora de mesurar el nivell de glucosa! + Afegeix una lectura + No s\'ha trobat cap recordatori, Afegiu un nou. diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 548816f4..9531e6c6 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -26,6 +26,7 @@ Übersicht Verlauf Tipps + Neuen Wert eintragen Hallo. Hallo. Nutzungsbedingungen. @@ -40,7 +41,11 @@ Diabetes Typ Typ 1 Typ 2 + Schwangerschaftsdiabetes + LADA + Bevorzugte Glukoseeinheit mmol/L + Bevorzugte HbA1c-Einheit prozentualer Anteil Gewünschte Gewichtseinheit Kilogramm @@ -103,7 +108,7 @@ Ein gesundes Körpergewicht hilft den Blutzucker zu stabilisieren. Ihr Arzt, ein Ernährungsberater oder Fitnesstrainer kann ihnen helfen. Ihren Blutzucker mittels einer App wie Glucosio zwei Mal täglich zu überprüfen und zu verfolgen, wird ihnen dabei helfen, den Ergebnissen von Ernährung und des Lebensstils bewusst zu werden. Verwenden sie A1c Tests um ihren durchschnittlichen Blutzucker der vergangenen 2 bis 3 Monate zu bestimmen. Ihr Arzt sollte ihnen mitteilen, wie oft sie diesen durchführen müssen. - Tracking how many carbohydrates you consume can be just as important as checking blood levels since carbohydrates influence blood glucose levels. Talk to your doctor or a dietician about carbohydrate intake. + Der Überblick über die aufgenommenen Kohlenhydrate kann genauso wichtig sein, wie die Kontrolle der Blutwerte, da die Kohlenhydrate den Blutzucker beeinflussen. Sprechen Sie mit Ihrem Arzt oder Ernährungsberater über den Kohlenhydratanteil Ihrer Ernährung. Kontrolle von Blutdruck, Cholesterin und Triglyzeride ist wichtig, da Diabetiker anfälliger für Herzerkrankungen sind. Es gibt mehrere Diät-Ansätze um gesünder zu essen und Ihnen zu helfen, Ihre Diabetes-Ergebnisse zu verbessern. Konsultieren Sie einen Ernährungsberater um rauszufinden, was am besten für Sie und Ihren Geldbeutel ist. Eine regelmäßige sportliche Aktivität ist besonders für Diabetiker wichtig um ein gesundes Gewicht zu halten. Sprechen Sie mit Ihrem Arzt über für sie passende Übungen. @@ -138,6 +143,7 @@ Daten exportieren Teilen sie ihre Daten mit Ihrem Arzt oder sichern sie diese auf Google Drive mit der Exportfunktion. Berechne A1C + Glucosios integrierter HbA1c-Rechner ist jetzt im Navigationsmenü verfügbar. Geben Sie Ihren durchschnittlichen Blutzuckerwert ein und speichern Sie den berechneten HbA1c-Wert direkt ab. Empfohlener Bereich Individueller Bereich Minimumwert @@ -148,11 +154,13 @@ Teste Glucosio, ein Open Source Programm für Diabetes-Managment und Forschung. Teste Glucosio Google Drive Backup + Backup & Export Datenschutz Durch die Verwendung von Glucosio akzeptierst du die Google Drive Über Glucosio Bewerte Glucosio + Open-Source-Lizenzen Aktiviere FreeStyle Libre® Unterstützung EXPERIMENTELL: Aktiviere FreeStyle Libre® Unterstützung EXPERIMENTELL: Erhöht die Lesbarkeit für Benutzer mit Dyslexie @@ -229,11 +237,17 @@ HDL Cholesterin HBA1C Blutzuckermessung hinzufügen + Blutzuckerwert bearbeiten Gewicht hinzufügen + Körpergewicht bearbeiten Cholesterinwert hinzufügen + Cholesterinwert bearbeiten HBA1C hinzufügen + HbA1c-Wert bearbeiten Kotonin hinzufügen + Ketonwert bearbeiten Blutdruckmessung hinzufügen + Blutdruckwert bearbeiten Körpergewicht Ketonin Blutdruck @@ -263,17 +277,21 @@ Es ist Zeit ihre Medikamente zu nehmen! Dies ist nur eine Schätzung und errechnet sich aus dem Durchschnitt des letzten Monats der Messungen. Während diese Schätzung eine weithin akzeptierte Formel für die Abschätzung des HbA1C ist, appellieren wir an die User dies nur als Schätzung zu verwenden. Anmerkungen + Backup & Export Backup auf Google Drive Wiederherstellen CSV-Export Automatische Sicherung Das Sichern Ihrer Daten auf Google Drive ermöglicht es Ihnen, Ihre Messwerte wiederherzustellen, wenn Sie Ihr Gerät verlieren oder durch ein anderes ersetzen. Neustart um die Änderungen anzuwenden... + Glucosio-Datenbank mit Google Drive synchronisieren. + Sie können alle Ihre Werte wiederherstellen, wenn Sie Ihr Telefon verlieren oder wechseln, oder Ihre Daten zwischen mehreren Geräten synchronisieren. Datenbank erfolgreich gesichert Datenbank erfolgreich wiederhergestellt Etwas ist schiefgelaufen. Bitte erneut versuchen :/ Letzte Sicherung: Backup Ordner + Nicht angegeben Jetzt sichern Letzte Sicherungen Weitere Sicherungen anzeigen @@ -284,6 +302,10 @@ Sicherung wiederherstellen Wiederherstellung von Laufwerk Es konnte keine gültige Sicherung auf dem Laufwerk gefunden werden + Glucosio benötigt Google Play-Dienste um Google Drive Backup verwenden zu können. In ein CSV-File exportieren + In Google Drive öffnen + mmol/mol mmol/L + Alte Graph-Darstellung verwenden diff --git a/app/src/main/res/values-en-rGB/strings.xml b/app/src/main/res/values-en-rGB/strings.xml index cb093947..dc3dc778 100644 --- a/app/src/main/res/values-en-rGB/strings.xml +++ b/app/src/main/res/values-en-rGB/strings.xml @@ -196,7 +196,9 @@ From: Weight Ketones + HbA1c Add Glucose reading + Edit HbA1c Edit Ketones Add Blood Pressure Edit Blood Pressure @@ -248,5 +250,8 @@ Recent backups See more Backups Cancel + mmol/mol mmol/L + history + save diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index d98c7f3b..20d38e9d 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -309,4 +309,9 @@ mmol/mol mmol/L Revenir à l’ancien graphique + historique + enregistrer + Rappels + Il est temps de mesurer votre glycémie ! + Aucun rappel de la valeur. Ajouter un nouveau rappel ici. diff --git a/app/src/main/res/values-fr-rQC/strings.xml b/app/src/main/res/values-fr-rQC/strings.xml index 143323af..4c2e01e2 100644 --- a/app/src/main/res/values-fr-rQC/strings.xml +++ b/app/src/main/res/values-fr-rQC/strings.xml @@ -308,4 +308,9 @@ Gérer les fichiers mmol/L Revenir à l’ancien graphique + historique + enregistrer + Rappels + Il est temps de mesurer votre glycémie ! + Aucun rappel de la valeur. Ajouter un nouveau rappel ici. diff --git a/app/src/main/res/values-gl-rES/strings.xml b/app/src/main/res/values-gl-rES/strings.xml index 3dbd85ef..16137e33 100644 --- a/app/src/main/res/values-gl-rES/strings.xml +++ b/app/src/main/res/values-gl-rES/strings.xml @@ -26,6 +26,7 @@ Vista xeral Historial Consellos + Engadir nova lectura Ola! Ola! Condicións de uso @@ -225,6 +226,7 @@ Captura de pantalla gardada na galería Erro ao gardar a captura de pantalla na galería Intervalo de exportación + Produciuse un erro ao exportar as lecturas. Por favor, téntao de novo. Ningún rexistro para exportar. Novo rexistro engadido Peso @@ -238,10 +240,15 @@ Engadir rexistro de glicosa Editar rexistro de glicosa Engadir peso corporal + Editar o peso corporal Engadir nivel de colesterol + Editar o nivel de colesterol Engadir HB1AC + Editar HbA1c Engadir cetonas + Editar as cetonas Engadir presión arterial + Editar presión arterial Peso corporal Cetonas Presión arterial @@ -285,6 +292,7 @@ Algo foi mal. Téntao de novo, por favor :/ Última copia de seguranza: Cartafol das copias de seguranza + Sen definir Facer copia de seguranza Copias de seguranza recentes Ver máis copias de seguranza @@ -301,4 +309,10 @@ mmol/mol mmol/L Volver ao gráfico antigo + historial + gardar + Recordatorios + É hora de rexistrar o nivel de glucosa! + Engadir unha lectura + Recordatorios non definidos. Engadir aquí un novo. diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index d2fdb192..cfdae498 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -226,6 +226,7 @@ スクリーン ショットをギャラリーに保存しました スクリーン ショットをギャラリーに保存中にエラー エクスポート範囲 + 測定値のエクスポート時に問題が発生しました。もう一度やり直してください。 エクスポートする測定値はありません。 新しい測定値が追加されました 体重 @@ -308,4 +309,10 @@ mmol/mol mmol/L 古いグラフに戻す + 履歴 + 保存 + アラーム + 血糖値を記録する時間です! + 測定値を追加 + アラームは設定されていません。ここで新しいアラームを追加します。 diff --git a/app/src/main/res/values-lo-rLA/strings.xml b/app/src/main/res/values-lo-rLA/strings.xml index e8f60212..77b8a559 100644 --- a/app/src/main/res/values-lo-rLA/strings.xml +++ b/app/src/main/res/values-lo-rLA/strings.xml @@ -29,6 +29,7 @@ ເພີ່ມການອ່ານໃຫມ່ ສະບາຍດີ. ສະບາຍດີ. + ເງື່ອນໄຂການນຳໃຊ້. ພວກເຮົາຕ້ອງການຮູ້ຂໍ້ມູນທົ່ວໄປຂອງທ່ານກ່ອນການເລີມນຳໃຊ້ງານ. ປະເທດ ອາຍຸ @@ -102,22 +103,22 @@ ເມື່ອຮັບປະທານອາຫານນອກບ້ານ, ໃຫ້ເລືອກອາຫານປະເພດທີມີແຄລໍຮີຕໍ່າ ເຊັ່ນວ່າສະລັດຜັກ ເຖິງແມ່ນວ່າມັນຈະບໍ່ມີຢູ່ໃນເມນູກໍ່ຕາມ. ເມື່ອຮັບປະທານອາຫານນອກບ້ານຂໍໃຫ້ເລືອກອາຫານປະເພດອື່ນແທນທີ່ຈະເປັນຈືນມັນຟະລັງ ໃຫ້ສັ່ງເປັນປະເພດສະລັດຜັກ, ຖົ່ວລັນເຕົາ ຫລື ບຣອກໂຄລີ່. ເມື່ອຮັບປະທານອາຫານນອກບ້ານ ສັ່ງອາຫານທີ່ບໍ່ແມ່ນຂະຫນົມປັງ ຫລື ອາຫານປະເພດຈືນ. - When eating out ask for sauces, gravy and salad dressings "on the side." + ເມື່ອອອກໄປຮັບປະທານອາຫານນອກບ້ານ ຂໍແຍກຊອສ໌, ນໍ້າເກຣວີ ແລະ ນໍ້າສະລັດ \"ອອກຕ່າງຫາກ.\" ປາສະຈາກນ້ຳຕານກໍ່ບໍ່ໄດ້ຫມາຍຄວາມວ່າຈະປາສະຈາກນໍ້າຕານ 100%. ຫາກແຕ່ມັນຈະມີນ້ຳຕານຢູ່ປະມານ 0.5 ກຼາມ (g) ຕໍ່ຫນຶ່ງຫນ່ວຍການບໍລິໂພກ ດັ່ງນ້ນຈົ່ງຢ່າລົງເຊື່ອໄປກັບສິນຄ້າບໍ່ປາສະຈາກນ້ຳຕານ. - Moving toward a healthy weight helps control blood sugars. Your doctor, a dietitian, and a fitness trainer can get you started on a plan that will work for you. + ການລົດຫນໍ້າຫນັກໃນລະດັບທີ່ເຫມາະສົມກັບສົມຂະພາບຈະຊ່ວຍຄວບຄຸມລະດັບນໍ້າຕານໃນເລືອດຂອງທ່ານ. ແພດປະຈຳຕົວຂອງທ່ານ, ນັກໂພຊະນາການ ແລະ ຄູຝຶກອອກກຳລັງກາຍສາມາດຊ່ວຍທ່ານວາງແຜນທີ່ເຫມາະສົມກັບທ່ານ. ການກວດເບິງລະດັບເລືອດຂອງທ່ານ ແລະ ຕິດຕາມມັນໃນແອັບແບບ Glucosio 2 ຄັ້ງຕໍ່ມື້ຈະຊ່ວຍໃຫ້ທ່ານຮູ້ເຖິງຜົນໄດ້ຮັບຈາກສະບຽງອາຫານ ແລະ ວິຖີການດຳລົງຊີວິດ. ນຳເອົາຜົນທົດສອບເລືອດ A1c ໄປຊອກຫາຄ່ານ້ຳຕານສະເລ່ຍໃນເລືອດຂອງທ່ານສຳລັບ 2 ຫາ 3 ເດືອນທີ່ຜ່ານມາ. ທ່ານຫມໍຂອງທ່ານຈະບອກທ່ານວ່າການທົດສອບນີ້ຈຳເປັນຕ້ອງໄດ້ປະຕິບັດຈັກເທື່ອ. - Tracking how many carbohydrates you consume can be just as important as checking blood levels since carbohydrates influence blood glucose levels. Talk to your doctor or a dietician about carbohydrate intake. + ການຕິດຕາມປະລິມານການບໍລິໂພກ carbohydrates ຂອງທ່ານສາມາດເຮັດໃຫ້ສາມາດກວດສອບລະດັບນໍ້ຕານໃນເລືອດໄດ້ເພາະວ່າ carbohydrates ມີຜົນຕໍ່ລະດັບນໍ້າຕານໃນເລືອດ. ປຶກສາກັບແພດປະຈຳຕົວ ຫລື ນັກໂພຊະນາການຂອງທ່ານກ່ຽວກັບປະລິມານທີ່ຄວນບໍລິໂພກ carbohydrates. ການຄວບຄຸມລະດັບເລືອດ, cholesterol ແລະ ລະດັບ triglyceride ແມ່ນມີຄວາມສຳຄັນເນື່ອງຈາກວ່າພະຍາດເບົາຫວານມີຄວາມອ່ອນໄຫວຕໍ່ການເກີດພະຍາດຫົວໃຈ. - There are several diet approaches you can take to eating healthier and helping improve your diabetes outcomes. Seek advice from a dietician on what will work best for you and your budget. + ມັນມີຫລາຍວິທີສຳລັບການລົດອາຫານທີ່ທ່ານສາມາດນຳໄປໃຊ້ໃນການຮັບປະທານອາຫານເພື່ອໃຫ້ເກີດປະໂຫຍດຕໍ່ສຸຂະພາບ ແລະ ສາມາດບັນເທົາພະຍາດເບົາຫວານຂອງທ່ານໄດ້. ຊອກຫາຄຳແນະນຳເພີ່ມເຕີ່ມໄດ້ຈາກນັກໂພຊະນາການກ່ຽວກັບການລົດອາຫານທີ່ເຫມາະສົມກັບທ່ານທີ່ສຸດ ແລະ ງົບປະມານຂອງທ່ານ. ການອອກກຳລັງກາຍຢ່າງເປັນປະຈຳແມ່ນມີຄວາມສຳຄັນຢ່າງຍິງສຳລັບຜູ້ທີ່ເປັນພະຍາດເບົາຫວານ ແລະ ສາມາດຄວບຄຸມນຳຫນັກໄດ້. ປຶກສາກັບທ່ານຫມໍຂອງທ່ານກ່ຽວກັບການອອກກຳລັງກາຍທີ່ເຫມະສົມກັບທ່ານ. - Being sleep-deprived can make you eat more especially things like junk food and as a result can negatively impact your health. Be sure to get a good night sleep and consult a sleep specialist if you are having difficulty. + ການນອນບໍ່ພຽງພໍສາມາດເຮັດໃຫ້ທ່ານຮັບປະທານຫລາຍຂື້ນ ເປັນຕົ້ນແມ່ນອາຫານວ່າງ ແລະ ອາດເປັນຜົນທາງລົບຕໍ່ສຸຂະພາບຂອງທ່ານ. ຈົ່ງແນ່ໃຈວ່າໄດ້ນອນພຽງພໍ ແລະ ໄປປຶກສາກັບຜູ້ຊ່ຽວຊານຖ້າຫາກວ່າທ່ານພົບຂໍ້ຍຸ້ງຍາກ. ຄວາມຄຽດສາມາດເຮັດໃຫ້ມີຜົນກະທົບທາງລົບຕໍ່ໂລກເບົາຫວານ. ປຶກສາກັບທ່ານຫມໍຂອງທ່ານ ຫລື ຜູ້ຊ່ຽວຊານດ້ານສຸຂະພາບກ່ຽວກັບການພະເຊີນຫນ້າກັບຄວາມຄຽດ. - Visiting your doctor once a year and having regular communication throughout the year is important for diabetics to prevent any sudden onset of associated health problems. - Take your medicine as prescribed by your doctor even small lapses in your medicine can impact your blood glucose level and cause other side effects. If having difficulty remembering ask your doctor about medication management and reminder options. + ໄປຫາແພດປະຈຳຕົວຂອງທ່ານຫນຶ່ງຄັ້ງຕໍ່ປີ ແລະ ໄປຫາຢ່າງເປັນປະຈຳໃນຫນຶ່ງປີແມ່ນມີຄວາມສຳຄັນສຳລັບການປ້ອງກັນບັນຫາຕ່າງໆຂອງສຸຂະພາບທີ່ຈະກໍ່ໃຫ້ເກີດເປັນໂລກເບົາຫວານໄດ້. + ນຳເອົາຢາຮັກສາໂລກຕາມໃບ່ສັງຈ່າຍຢາໂດຍແພດປະຈຳຕົວຂອງທ່ານ ຖ້າຫາກວ່າມີການຮັບຢາຜິດພາດພຽງເຫລັກນ້ອຍສາມາດສົ່ງຜົນກະທົບຮ້າຍແຮງຕໍ່ລະດັບນໍ້າຕານໃນເລືອດຂອງທ່ານ ແລະ ຈະສົ່ງຜົນກະທົບໃຫ້ພະຍາດອື່ນໆນຳ. ຖ້າຫາກວ່າທ່ານປະສົບຄວາມຫຍຸ້ງຍາກໃນການຈືຢາຂອງທ່ານໃຫ້ຖາມແພດປະຈຳຕົວຂອງທ່ານກ່ຽວກັບການຈັດການກັບຢາຂອງທ່ານ ແລະ ວິທີການແຈ້ງເຕືອນ. - Older diabetics may be at higher risk for health issues associated with diabetes. Talk to your doctor about how your age plays a role in your diabetes and what to watch for. + ຜູ້ທີ່ມີອາຍຸສູງເປັນພະຍາດເບົາຫວານອາດຈະມີຄວາມສ່ຽງສູງສໍາລັບບັນຫາສຸຂະພາບທີ່ກ່ຽວຂ້ອງກັບພະຍາດເບົາຫວານ. ປຶກສາກັບແພດປະຈຳຕົວຂອງທ່ານກ່ຽວກັບອາຍຸທີ່ມີຜົນຕໍ່ພະຍາດເບົາຫວານຂອງທ່ານ ແລະ ສິ່ງທີທ່ານຕ້ອງໄດ້ຕິດຕາມ. ຈຳກັດປະລິມານເກືອທີ່ນຳໃຊ້ເຂົ້າໃນການປຸ່ງແຕ່ງອາຫານ ແລະ ປະລິມານເກືອທີ່ທ່ານຕື່ມໃສ່ຫລັງຈາກແຕ່ງແລ້ວ. ຜູ້ຊ່ວຍ @@ -142,6 +143,7 @@ ນຳເອົາຂໍ້ມູນຂອງທ່ານອອກໄປ ແບ່ງປັນຂໍ້ມູນກັບທ່ານຫມໍຂອງທ່ານ ຫລື ສຳຮອງຂໍ້ມູນຂອງທ່ານໄວ້ໃນ Google Drive ໂດຍການໃຊ້ຄູນສົມບັດການນຳອອກ. ຄິດໄລ່ A1C + ຕົວຄິດໄລ່ HbA1c ທີມີ່ຢູ່ໃນ Glucosio ແມ່ນມີໃຫ້ນຳໃຊ້ຢູ່ໃນ navigation drawer. ປ້ອນຄ່າສະເລຍນໍ້າຕານໃນເລືອດໃສ່ ແລະ ບັນທຶກຜົນການຄິດໄລ່ HbA1c ໄວ້. ຊ່ວງທີ່ຕ້ອງການ ຊ່ວງທີ່ກຳນົດເອງ ຄ່າຕຳສຸດ @@ -224,6 +226,7 @@ ພາບຫນ້າຈໍໄດ້ຖືກບັນທຶກໄປໄວ້ຢູ່ໃນຄັງຮູບພາບ ພາບຫນ້າຈໍທີ່ມີຂໍ້ຜິດພາດໄດ້ຖືກບັນທຶກໄປໄວ້ຢູ່ໃນຄັງຮູບພາບ ຂອບເຂດການນຳອອກ + ມີບັນຫາໃນການນຳເອົາການອ່ານອອກໄປ. ກະລຸນາລອງໃຫມ່ອີກຄັ້ງ. ບໍ່ມີການອ່ານທີ່ຕ້ອງການນຳອອກ. ເພີ່ມລາຍການອ່ານໃຫມ່ແລ້ວ ນໍ້າໜັກ @@ -273,6 +276,7 @@ ຟໍລຳໃຫ້ຂໍ້ມູນການສະຫນັບສະຫນູນ ມັນຮອດເວລາວັດແທກລະດັບນໍ້າຕານໃນເລືອດຂອງທ່ານແລ້ວ! ມັນຮອດເວລາທີ່ຈະໃຊ້ຢາຂອງທ່ານແລ້ວ! + ນີ້ເປັນພຽງແຕ່ການປະເມີນຄ່າ ແລະ ຖືກຄິດໄລ່ໂດຍການນຳໃຊ້ຄ່າສະເລ່ຍຈາກການອ່ານຂອງເດືອນທີ່ຜ່ານມາ. ໃນຂະນະທີ່ການປະເມີນຄ່ານີ້ໄດ້ຖືກຍອມຮັບຢ່າງກ້ວາງຂວາງກັບສູດການປະເມີນ HbA1C ພວກເຮົາສົ່ງເສີມໃຫ້ຜູ້ໃຊ້ນຳໃຊ້ຄ່ານີ້ສຳລັບການປະເມີນເທົ່ານັ້ນ. ຫມາຍເຫດ ແບັກອັບ & ນຳອອກ ແບັກອັບໄວ້ໃນ Google Drive @@ -305,4 +309,10 @@ mmol/mol mmol/L ກັບຄືນໄປກຣາບເກົ່າ + ປະຫວັດການນຳໃຊ້ + ບັນທຶກ + ການແຈ້ງເຕືອນ + ເຖິງເວລາບັນທຶກລະດັບນໍ້າຕານຂອງທ່ານ! + ເພີ່ມການອ່ານ + ບໍ່ໄດ້ຕັ້ງຄ່າການແຈ້ງເຕືອນ. ເພີ່ມການແຈ້ງເຕືອນໃຫມ່ໄດ້ບ່ອນນີ້. diff --git a/app/src/main/res/values-ml-rIN/strings.xml b/app/src/main/res/values-ml-rIN/strings.xml index bb6ae178..55c7e975 100644 --- a/app/src/main/res/values-ml-rIN/strings.xml +++ b/app/src/main/res/values-ml-rIN/strings.xml @@ -22,12 +22,15 @@ സജ്ജീകരണങ്ങള്‍ അഭിപ്രായം അറിയിക്കുക + കൂട്ടുകാരെ ക്ഷണിക്കൂ മേല്‍കാഴ്ച നാള്‍വഴി സൂത്രങ്ങള്‍ + പുതിയത് ചേര്‍ക്കൂ നമസ്കാരം. നമസ്കാരം. ഉപയോഗനിബന്ധനകൾ. + തുടങ്ങുന്നതിന് മുമ്പ് കുറച്ച് കാര്യങ്ങള്‍. രാജ്യം വയസ്സു് ഒരു സാധുതയുള്ള വയസ്സ് നൽകുക. @@ -38,6 +41,8 @@ പ്രമേഹത്തിന്റെ വിധം ടൈപ്പു് 1 ടൈപ്പു് 2 + ഗര്‍ഭസംബന്ധ + ഇഷ്ട ഗ്ലൂക്കോസ് യൂണിറ്റ് നിരീക്ഷണത്തിനായി വിവരങ്ങൾ നൽകുക. ഇത് പിന്നീട് മാറ്റാവുന്നതാണു്. അടുത്തത് @@ -80,4 +85,5 @@ തൂക്കം + ഗ്ലൂക്കോസ് ചേര്‍ക്കുക diff --git a/app/src/main/res/values-mr-rIN/strings.xml b/app/src/main/res/values-mr-rIN/strings.xml index 6e62f9c1..492bbda9 100644 --- a/app/src/main/res/values-mr-rIN/strings.xml +++ b/app/src/main/res/values-mr-rIN/strings.xml @@ -51,6 +51,8 @@ जेवणाआधी जेवणानंतर रात्र + पुनःतपासा + इतर रद्द जोडा संपादन @@ -65,4 +67,5 @@ + वजन diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 9826e1e7..5c69feac 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -227,6 +227,7 @@ Schermafbeelding opgeslagen naar galerij Fout bij opslaan van schermafbeelding naar galerij Exportbereik + Er was een probleem bij het exporteren van de uitlezingen. Probeer het opnieuw. Geen uitlezingen te exporteren. Nieuwe uitlezing toegevoegd Gewicht @@ -309,4 +310,10 @@ mmol/mol mmol/l Terugkeren naar oude grafiek + geschiedenis + opslaan + Herinneringen + Tijd om uw glucosespiegel vast te leggen! + Uitlezing toevoegen + Geen herinneringen ingesteld. Voeg hier nieuwe herinneringen toe. diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 9628dc38..1fcbccc9 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -226,6 +226,7 @@ Снимок экрана сохранён в галерее Ошибка сохранения снимка экрана в галерею Диапазон экспорта + Возникла проблема при экспорте данных. Пожалуйста, попробуйте еще раз. Нет данных для экспорта. Добавлены новые данные Вес @@ -308,4 +309,10 @@ ммоль/моль ммоль/литр Вернуться к старому графику + история + сохранить + Напоминания + Пора зарегистрировать ваш уровень глюкозы! + Добавить данные + Нет напоминаний. Добавьте новое напоминание здесь. diff --git a/app/src/main/res/values-sl-rSI/strings.xml b/app/src/main/res/values-sl-rSI/strings.xml index a606884b..fdca8a3c 100644 --- a/app/src/main/res/values-sl-rSI/strings.xml +++ b/app/src/main/res/values-sl-rSI/strings.xml @@ -226,6 +226,7 @@ Zaslonska slika shranjena v galerijo Napaka pri shranjevanju zaslonske slike v galerijo Izvozi obseg + Pri izvozu meritev je prišlo do težave. Poizkusite znova. Ni meritev za izvoz. Dodana nova meritev Teža @@ -308,4 +309,10 @@ mmol/mol mmol/l Povrni na stari graf + zgodovina + shrani + Opomniki + Čas je za beleženje vaše ravni glukoze! + Dodaj meritev + Opomniki niso nastavljeni. Tu dodajte novega. From 5fa85eabaf1b7b13d2a659639d6df139ae48aa6d Mon Sep 17 00:00:00 2001 From: Alexandru Simonescu Date: Thu, 29 Sep 2016 19:32:22 +0200 Subject: [PATCH 39/82] - Added annotations for non null parameters - Replaced empty string checks with Android classes - Private method for extra extracting --- .../activity/ExternalLinkActivity.java | 183 +++++++++--------- .../presenter/ExternalViewPresenter.java | 5 +- .../presenter/ExternalViewPresenterTest.java | 14 +- 3 files changed, 101 insertions(+), 101 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/activity/ExternalLinkActivity.java b/app/src/main/java/org/glucosio/android/activity/ExternalLinkActivity.java index 32b8c8a2..d4bec848 100644 --- a/app/src/main/java/org/glucosio/android/activity/ExternalLinkActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/ExternalLinkActivity.java @@ -24,6 +24,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.view.MenuItem; @@ -39,115 +40,109 @@ public class ExternalLinkActivity extends AppCompatActivity implements ExternalViewPresenter.View { - private static final String TITLE_KEY = "TITLE_KEY"; - private static final String URL_KEY = "URL_KEY"; - private ExternalViewPresenter presenter; - private WebView webView; - private Map toolbarTitle; - - public static void launch(Context context, String title, String url) { - Intent intent = new Intent(context, ExternalLinkActivity.class); - intent.putExtra(TITLE_KEY, title); - intent.putExtra(URL_KEY, url); - context.startActivity(intent); - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_licence); - webView = (WebView) findViewById(R.id.webview_licence); - init(); - } - - private void init() { - initTitles(); - initPresenter(); - initView(); + private static final String TITLE_KEY = "TITLE_KEY"; + private static final String URL_KEY = "URL_KEY"; + private ExternalViewPresenter presenter; + private WebView webView; + private Map toolbarTitle; + + public static void launch(@NonNull Context context, @NonNull String title, String url) { + Intent intent = new Intent(context, ExternalLinkActivity.class); + intent.putExtra(TITLE_KEY, title); + intent.putExtra(URL_KEY, url); + context.startActivity(intent); + } + + @Override protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_licence); + webView = (WebView) findViewById(R.id.webview_licence); + init(); + } + + private void init() { + initTitles(); + initPresenter(); + initView(); + } + + private void initView() { + webView.setWebViewClient(new WebViewClient() { + public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { + return true; + } + }); + setupToolbar(); + } + + private void initPresenter() { + presenter = new ExternalViewPresenter(this, new BasicNetworkConnectivity(this)); + presenter.onViewCreated(); + } + + @Override public void setupToolbarTitle(String link) { + if (toolbarTitle.containsKey(link)) { + setToolbarTitle(getString(toolbarTitle.get(link))); } + } - private void initView() { - webView.setWebViewClient(new WebViewClient() { - public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { - return true; - } + @Override public String extractTitle() { + return extractExtra(TITLE_KEY); + } - }); - setupToolbar(); - } + @Override public String extractUrl() { + return extractExtra(URL_KEY); + } - private void initPresenter() { - presenter = new ExternalViewPresenter(this, new BasicNetworkConnectivity(this)); - presenter.onViewCreated(); + private String extractExtra(String key) { + String extra = ""; + if (getIntent().getExtras() != null) { + extra = getIntent().getStringExtra(key); } + return extra; + } - @Override - public void setupToolbarTitle(String link) { - if (toolbarTitle.containsKey(link)) { - setToolbarTitle(getString(toolbarTitle.get(link))); - } - } + @Override public void loadExternalUrl(String url) { + webView.loadUrl(url); + } - @Override - public String extractTitle() { - String title = ""; - if (getIntent().getExtras() != null) { - title = getIntent().getStringExtra(TITLE_KEY); - } - return title; - } - - @Override public String extractUrl() { - String url = ""; - if (getIntent().getExtras() != null) { - url = getIntent().getStringExtra(URL_KEY); - } - return url; - } - - @Override - public void loadExternalUrl(String url) { - webView.loadUrl(url); - } - - @Override - public void showNoConnectionWarning() { - AlertDialog dialog = new AlertDialog.Builder(this) - .setMessage(R.string.warning_internet_connection_required) + @Override public void showNoConnectionWarning() { + AlertDialog dialog = + new AlertDialog.Builder(this).setMessage(R.string.warning_internet_connection_required) .setCancelable(false) .setPositiveButton(R.string.mdtp_ok, new DialogInterface.OnClickListener() { - @Override public void onClick(DialogInterface dialog, int which) { - ExternalLinkActivity.this.finish(); - } + @Override public void onClick(DialogInterface dialog, int which) { + ExternalLinkActivity.this.finish(); + } }) .create(); - dialog.show(); - } + dialog.show(); + } - private void setupToolbar() { - if (getSupportActionBar() != null) { - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getSupportActionBar().setDisplayShowHomeEnabled(true); - } + private void setupToolbar() { + if (getSupportActionBar() != null) { + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setDisplayShowHomeEnabled(true); } - - private void initTitles() { - toolbarTitle = new HashMap<>(); - toolbarTitle.put(GlucosioExternalLinks.PRIVACY, R.string.preferences_privacy); - toolbarTitle.put(GlucosioExternalLinks.LICENSES, R.string.preferences_licences_open); - toolbarTitle.put(GlucosioExternalLinks.TERMS, R.string.preferences_terms); + } + + private void initTitles() { + toolbarTitle = new HashMap<>(); + toolbarTitle.put(GlucosioExternalLinks.PRIVACY, R.string.preferences_privacy); + toolbarTitle.put(GlucosioExternalLinks.LICENSES, R.string.preferences_licences_open); + toolbarTitle.put(GlucosioExternalLinks.TERMS, R.string.preferences_terms); + } + + private void setToolbarTitle(String string) { + if (getSupportActionBar() != null) { + getSupportActionBar().setTitle(string); } + } - private void setToolbarTitle(String string) { - if (getSupportActionBar() != null) { - getSupportActionBar().setTitle(string); - } - } - - public boolean onOptionsItemSelected(MenuItem item) { - finish(); - return true; - } + public boolean onOptionsItemSelected(MenuItem item) { + finish(); + return true; + } } diff --git a/app/src/main/java/org/glucosio/android/presenter/ExternalViewPresenter.java b/app/src/main/java/org/glucosio/android/presenter/ExternalViewPresenter.java index 4c6a4e4b..5101b60e 100644 --- a/app/src/main/java/org/glucosio/android/presenter/ExternalViewPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/ExternalViewPresenter.java @@ -20,6 +20,7 @@ package org.glucosio.android.presenter; +import android.text.TextUtils; import org.glucosio.android.tools.network.NetworkConnectivity; public class ExternalViewPresenter { @@ -46,12 +47,12 @@ public void onViewCreated() { private void parametersPrecondition(String title, String url) { if ((invalidParam(title)) || invalidParam(url)) { - throw new RuntimeException("Invalid arguments: need URL and TITLE"); + throw new IllegalArgumentException("Invalid arguments: need URL and TITLE"); } } private boolean invalidParam(String url) { - return url == null || url.length() == 0; + return TextUtils.isEmpty(url); } public interface View { diff --git a/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java b/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java index 1c984459..f2bb5fcd 100644 --- a/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java +++ b/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java @@ -5,6 +5,7 @@ import org.junit.Before; import org.junit.Test; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -21,16 +22,19 @@ public class ExternalViewPresenterTest { presenter = new ExternalViewPresenter(view, network); } - @Test(expected = RuntimeException.class) - public void ShouldThrowException_WhenNoParameters() throws Exception { + @Test + public void shouldThrowException_WhenNoParameters() throws Exception { when(network.isConnected()).thenReturn(true); when(view.extractTitle()).thenReturn(null); - presenter.onViewCreated(); - + try { + presenter.onViewCreated(); + } catch (Exception ex) { + assertTrue(ex instanceof IllegalArgumentException); + } } - @Test public void ShouldLoadOpenSourceLicenses_WhenLicenseParameters() throws Exception { + @Test public void shouldLoadOpenSourceLicenses_WhenLicenseParameters() throws Exception { String LICENSES = "licenses"; when(view.extractUrl()).thenReturn(GlucosioExternalLinks.LICENSES); when(view.extractTitle()).thenReturn(LICENSES); From 2ede121da7925c1116ce280f3069a6d48f7b7bee Mon Sep 17 00:00:00 2001 From: Eugen Martynov Date: Sun, 2 Oct 2016 10:38:07 +0200 Subject: [PATCH 40/82] Fixed message for evening case --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7a568269..bba044fb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -456,7 +456,7 @@ Set reminder Label Good Morning, It is time to do an entry in Glucosio! Good Afternoon, It is time to do an entry in Glucosio! - Good Morning, It is time to do an entry in Glucosio! + Good Evening, It is time to do an entry in Glucosio! It is time to do an entry in Glucosio! Time to log your glucose level! From c67cb1c42d525deccb13a5576d9f31c72b8ad2bc Mon Sep 17 00:00:00 2001 From: Eugen Martynov Date: Sun, 2 Oct 2016 10:40:09 +0200 Subject: [PATCH 41/82] Removed unnecessary local variable --- .../org/glucosio/android/activity/RemindersActivity.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java b/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java index 437be51e..26150284 100644 --- a/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/RemindersActivity.java @@ -1,6 +1,5 @@ package org.glucosio.android.activity; -import android.app.Activity; import android.content.DialogInterface; import android.os.Bundle; import android.support.design.widget.BottomSheetDialog; @@ -38,7 +37,6 @@ public class RemindersActivity extends AppCompatActivity implements TimePickerDi protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_reminders); - final Activity reminderActivity = this; presenter = new RemindersPresenter(this); Toolbar toolbar = (Toolbar) findViewById(R.id.activity_main_toolbar); @@ -56,11 +54,11 @@ protected void onCreate(Bundle savedInstanceState) { @Override public void onClick(final View view) { - AlertDialog.Builder builder = new AlertDialog.Builder(reminderActivity); + AlertDialog.Builder builder = new AlertDialog.Builder(RemindersActivity.this); builder.setTitle(R.string.activity_reminder_add_label); // Set up the input - final EditText input = new EditText(reminderActivity); + final EditText input = new EditText(RemindersActivity.this); // Specify the type of input expected; this, for example, sets the input as a password, and will mask the text input.setInputType(InputType.TYPE_CLASS_TEXT); // Set EditText margin From 0861c1137fbbfd0881b393a6bc8c02408c7a4e3c Mon Sep 17 00:00:00 2001 From: Prat Date: Sat, 1 Oct 2016 17:23:46 -0400 Subject: [PATCH 42/82] Allow comma as decimal separator when adding Glucose reading --- .../presenter/AddGlucosePresenter.java | 66 ++++++++----------- .../glucosio/android/tools/ReadingTools.java | 23 +++++++ .../main/res/layout/activity_add_glucose.xml | 1 + .../android/tools/ReadingToolsTest.java | 32 +++++++++ 4 files changed, 85 insertions(+), 37 deletions(-) create mode 100644 app/src/test/java/org/glucosio/android/tools/ReadingToolsTest.java diff --git a/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java b/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java index f0e378c6..d916c5e4 100644 --- a/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java @@ -39,6 +39,7 @@ import java.util.List; public class AddGlucosePresenter extends AddReadingPresenter { + private static final int UNKNOWN_ID = -1; private DatabaseHandler dB; private AddGlucoseActivity activity; private ReadingTools rTools; @@ -70,49 +71,40 @@ public int hourToSpinnerType(int hour) { } public void dialogOnAddButtonPressed(String time, String date, String reading, String type, String notes) { - if (validateDate(date) && validateTime(time) && validateGlucose(reading) && validateType(type)) { - Date finalDateTime = getReadingTime(); - boolean isReadingAdded; - if ("mg/dL".equals(getUnitMeasuerement())) { - int finalReading = Integer.parseInt(reading); - GlucoseReading gReading = new GlucoseReading(finalReading, type, finalDateTime, notes); - isReadingAdded = dB.addGlucoseReading(gReading); - } else { - converter = new GlucosioConverter(); - int convertedReading = converter.glucoseToMgDl(Double.parseDouble(reading)); - GlucoseReading gReading = new GlucoseReading(convertedReading, type, finalDateTime, notes); - - isReadingAdded = dB.addGlucoseReading(gReading); - } - if (!isReadingAdded) { - activity.showDuplicateErrorMessage(); - } else { - activity.finishActivity(); - } - } else { - activity.showErrorMessage(); - } + dialogOnAddButtonPressed(time, date, reading, type, notes, UNKNOWN_ID); } public void dialogOnAddButtonPressed(String time, String date, String reading, String type, String notes, long oldId) { if (validateDate(date) && validateTime(time) && validateGlucose(reading) && validateType(type)) { Date finalDateTime = getReadingTime(); - boolean isReadingAdded; - if ("mg/dL".equals(getUnitMeasuerement())) { - int finalReading = Integer.parseInt(reading); - GlucoseReading gReading = new GlucoseReading(finalReading, type, finalDateTime, notes); - isReadingAdded = dB.editGlucoseReading(oldId, gReading); - } else { - converter = new GlucosioConverter(); - int convertedReading = converter.glucoseToMgDl(Double.parseDouble(reading)); - GlucoseReading gReading = new GlucoseReading(convertedReading, type, finalDateTime, notes); - - isReadingAdded = dB.editGlucoseReading(oldId, gReading); - } - if (!isReadingAdded) { - activity.showDuplicateErrorMessage(); + Number number = ReadingTools.parseReading(reading); + if (number == null) { + activity.showErrorMessage(); } else { - activity.finishActivity(); + boolean isReadingAdded; + if ("mg/dL".equals(getUnitMeasuerement())) { + int finalReading = number.intValue(); + GlucoseReading gReading = new GlucoseReading(finalReading, type, finalDateTime, notes); + if (oldId == UNKNOWN_ID) { + isReadingAdded = dB.addGlucoseReading(gReading); + } else { + isReadingAdded = dB.editGlucoseReading(oldId, gReading); + } + } else { + converter = new GlucosioConverter(); + int convertedReading = converter.glucoseToMgDl(number.doubleValue()); + GlucoseReading gReading = new GlucoseReading(convertedReading, type, finalDateTime, notes); + if (oldId == UNKNOWN_ID) { + isReadingAdded = dB.addGlucoseReading(gReading); + } else { + isReadingAdded = dB.editGlucoseReading(oldId, gReading); + } + } + if (!isReadingAdded) { + activity.showDuplicateErrorMessage(); + } else { + activity.finishActivity(); + } } } else { activity.showErrorMessage(); diff --git a/app/src/main/java/org/glucosio/android/tools/ReadingTools.java b/app/src/main/java/org/glucosio/android/tools/ReadingTools.java index 633e08cb..06391c60 100644 --- a/app/src/main/java/org/glucosio/android/tools/ReadingTools.java +++ b/app/src/main/java/org/glucosio/android/tools/ReadingTools.java @@ -20,6 +20,11 @@ package org.glucosio.android.tools; +import android.support.annotation.Nullable; + +import java.text.NumberFormat; +import java.text.ParseException; + public class ReadingTools { public ReadingTools() { @@ -45,4 +50,22 @@ public int hourToSpinnerType(int hour) { return 8; // night time } } + + /** + * A convenient method for parsing reading value based on user's locale + * + * @param reading reading number String + * @return reading Number + */ + @Nullable + public static Number parseReading(String reading) { + if (reading == null) + return null; + NumberFormat numberFormat = NumberFormat.getInstance(); + try { + return numberFormat.parse(reading); + } catch (ParseException e) { + return null; + } + } } diff --git a/app/src/main/res/layout/activity_add_glucose.xml b/app/src/main/res/layout/activity_add_glucose.xml index 8dade51b..751998b3 100644 --- a/app/src/main/res/layout/activity_add_glucose.xml +++ b/app/src/main/res/layout/activity_add_glucose.xml @@ -90,6 +90,7 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="@string/dialog_add_concentration" + android:digits="0123456789.," android:inputType="numberDecimal" android:singleLine="true" android:textColorHighlight="@color/glucosio_pink" diff --git a/app/src/test/java/org/glucosio/android/tools/ReadingToolsTest.java b/app/src/test/java/org/glucosio/android/tools/ReadingToolsTest.java new file mode 100644 index 00000000..d96c143a --- /dev/null +++ b/app/src/test/java/org/glucosio/android/tools/ReadingToolsTest.java @@ -0,0 +1,32 @@ +package org.glucosio.android.tools; + +import org.glucosio.android.RobolectricTest; +import org.junit.Test; + +import java.util.Locale; + +import static org.assertj.core.api.Assertions.assertThat; + +public class ReadingToolsTest extends RobolectricTest { + @Test + public void shouldReturnNull_whenNullStringPassed() { + assertThat(ReadingTools.parseReading(null)).isNull(); + } + + @Test + public void shouldReturnNull_whenInvalidStringPassed() { + assertThat(ReadingTools.parseReading("abc")).isNull(); + } + + @Test + public void shouldReturnCorrectNumber_whenDotIsDecimalSeparator() { + Locale.setDefault(new Locale("en")); + assertThat(ReadingTools.parseReading("1.23").doubleValue()).isEqualTo(1.23); + } + + @Test + public void shouldReturnCorrectNumber_whenCommaIsDecimalSeparator() { + Locale.setDefault(new Locale("fr")); + assertThat(ReadingTools.parseReading("1,23").doubleValue()).isEqualTo(1.23); + } +} From da93153ff4d93b1edd45ac49e568da2d306adb3e Mon Sep 17 00:00:00 2001 From: Joe Apicella Date: Sun, 2 Oct 2016 11:40:56 -0700 Subject: [PATCH 43/82] Added contributor credits --- .../glucosio/android/activity/AboutActivity.java | 13 +++++++++++++ .../tools/network/GlucosioExternalLinks.java | 1 + app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/about_preference.xml | 3 +++ 4 files changed, 18 insertions(+) diff --git a/app/src/main/java/org/glucosio/android/activity/AboutActivity.java b/app/src/main/java/org/glucosio/android/activity/AboutActivity.java index 5295c72c..7b4abbe3 100644 --- a/app/src/main/java/org/glucosio/android/activity/AboutActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/AboutActivity.java @@ -73,6 +73,7 @@ public void onCreate(final Bundle savedInstanceState) { final Preference privacyPref = (Preference) findPreference("preference_privacy"); final Preference termsPref = (Preference) findPreference("preference_terms"); final Preference versionPref = (Preference) findPreference("preference_version"); + final Preference thanksPref = (Preference) findPreference("preference_thanks"); termsPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @@ -138,6 +139,18 @@ public boolean onPreferenceClick(Preference preference) { } }); + thanksPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + ExternalLinkActivity.launch( + getActivity(), + getString(R.string.preferences_contributors), + GlucosioExternalLinks.THANKS); + addTermsAnalyticsEvent("Glucosio Contributors opened"); + return false; + } + }); + versionPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { int easterEggCount; diff --git a/app/src/main/java/org/glucosio/android/tools/network/GlucosioExternalLinks.java b/app/src/main/java/org/glucosio/android/tools/network/GlucosioExternalLinks.java index ede0e95a..4ac6a88e 100644 --- a/app/src/main/java/org/glucosio/android/tools/network/GlucosioExternalLinks.java +++ b/app/src/main/java/org/glucosio/android/tools/network/GlucosioExternalLinks.java @@ -4,4 +4,5 @@ public class GlucosioExternalLinks { public static final String TERMS = "http://www.glucosio.org/terms/"; public static final String LICENSES = "http://www.glucosio.org/third-party-licenses/"; public static final String PRIVACY = "http://www.glucosio.org/privacy/"; + public static final String THANKS = "http://www.glucosio.org/2015/10/12/thanks-for-contributors/"; } \ 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 4ff96025..2385931f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -279,6 +279,7 @@ About Glucosio Rate Glucosio Open source licenses + Contributors Enable FreeStyle Libre® support EXPERIMENTAL: Enable FreeStyle Libre® support EXPERIMENTAL: Increase readability for users with dyslexia diff --git a/app/src/main/res/xml/about_preference.xml b/app/src/main/res/xml/about_preference.xml index 3624c5ba..2e222944 100644 --- a/app/src/main/res/xml/about_preference.xml +++ b/app/src/main/res/xml/about_preference.xml @@ -34,6 +34,9 @@ + Date: Sun, 2 Oct 2016 16:08:37 -0400 Subject: [PATCH 44/82] Set locale back to default after tests in ReadingToolsTest --- .../android/tools/ReadingToolsTest.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/app/src/test/java/org/glucosio/android/tools/ReadingToolsTest.java b/app/src/test/java/org/glucosio/android/tools/ReadingToolsTest.java index d96c143a..64b765f1 100644 --- a/app/src/test/java/org/glucosio/android/tools/ReadingToolsTest.java +++ b/app/src/test/java/org/glucosio/android/tools/ReadingToolsTest.java @@ -1,13 +1,27 @@ package org.glucosio.android.tools; -import org.glucosio.android.RobolectricTest; +import org.junit.After; +import org.junit.Before; import org.junit.Test; import java.util.Locale; import static org.assertj.core.api.Assertions.assertThat; -public class ReadingToolsTest extends RobolectricTest { +public class ReadingToolsTest { + + private Locale defaultLocale; + + @Before + public void setUp() { + defaultLocale = Locale.getDefault(); + } + + @After + public void after() { + Locale.setDefault(defaultLocale); + } + @Test public void shouldReturnNull_whenNullStringPassed() { assertThat(ReadingTools.parseReading(null)).isNull(); From d50921d56acc985a633c6abfe6685f43e1632740 Mon Sep 17 00:00:00 2001 From: Prat Date: Sun, 2 Oct 2016 16:18:31 -0400 Subject: [PATCH 45/82] Refactor AddReadingPresenter --- .../presenter/AddGlucosePresenter.java | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java b/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java index d916c5e4..3a16cccd 100644 --- a/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java @@ -81,25 +81,7 @@ public void dialogOnAddButtonPressed(String time, String date, String reading, S if (number == null) { activity.showErrorMessage(); } else { - boolean isReadingAdded; - if ("mg/dL".equals(getUnitMeasuerement())) { - int finalReading = number.intValue(); - GlucoseReading gReading = new GlucoseReading(finalReading, type, finalDateTime, notes); - if (oldId == UNKNOWN_ID) { - isReadingAdded = dB.addGlucoseReading(gReading); - } else { - isReadingAdded = dB.editGlucoseReading(oldId, gReading); - } - } else { - converter = new GlucosioConverter(); - int convertedReading = converter.glucoseToMgDl(number.doubleValue()); - GlucoseReading gReading = new GlucoseReading(convertedReading, type, finalDateTime, notes); - if (oldId == UNKNOWN_ID) { - isReadingAdded = dB.addGlucoseReading(gReading); - } else { - isReadingAdded = dB.editGlucoseReading(oldId, gReading); - } - } + boolean isReadingAdded = createReading(type, notes, oldId, finalDateTime, number); if (!isReadingAdded) { activity.showDuplicateErrorMessage(); } else { @@ -111,6 +93,24 @@ public void dialogOnAddButtonPressed(String time, String date, String reading, S } } + private boolean createReading(String type, String notes, long oldId, Date finalDateTime, Number number) { + boolean isReadingAdded; + int readingValue; + if ("mg/dL".equals(getUnitMeasuerement())) { + readingValue = number.intValue(); + } else { + converter = new GlucosioConverter(); + readingValue = converter.glucoseToMgDl(number.doubleValue()); + } + GlucoseReading gReading = new GlucoseReading(readingValue, type, finalDateTime, notes); + if (oldId == UNKNOWN_ID) { + isReadingAdded = dB.addGlucoseReading(gReading); + } else { + isReadingAdded = dB.editGlucoseReading(oldId, gReading); + } + return isReadingAdded; + } + public Integer retrieveSpinnerID(String measuredTypeText, List measuredTypelist) { int measuredId = 0; boolean isFound = false; From 3570a018d237a83728202a5da7cdee04b75b2fdd Mon Sep 17 00:00:00 2001 From: Eugen Martynov Date: Sun, 9 Oct 2016 12:33:37 +0200 Subject: [PATCH 46/82] Cleaning some codacy useful warnings (#310) * Removing unused variables and fields, inlining fields used once, minor improvements * Removed unused misleading badge --- README.md | 1 - .../android/activity/AddGlucoseActivity.java | 8 +- .../android/activity/AddWeightActivity.java | 3 +- .../android/activity/BackupActivity.java | 78 +++++++------------ .../activity/FreestyleLibreActivity.java | 23 ++---- .../android/activity/MainActivity.java | 18 ++--- .../android/adapter/HomePagerAdapter.java | 4 +- .../android/fragment/HistoryFragment.java | 33 +++----- .../android/fragment/OverviewFragment.java | 71 ++++++----------- .../presenter/AddGlucosePresenter.java | 2 +- .../android/presenter/AssistantPresenter.java | 3 - .../android/presenter/MainPresenter.java | 20 ----- .../android/presenter/OverviewPresenter.java | 6 -- .../res/layout/activity_freestyle_libre.xml | 65 +++++++--------- 14 files changed, 117 insertions(+), 218 deletions(-) diff --git a/README.md b/README.md index 07947967..e8bac8e7 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,6 @@ [![Build Status](https://travis-ci.org/Glucosio/glucosio-android.svg)](https://travis-ci.org/Glucosio/glucosio-android) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/a6f7bcc22a174ac9b36795438c143b6d)](https://www.codacy.com/app/Glucosio/glucosio-android?utm_source=github.com&utm_medium=referral&utm_content=Glucosio/glucosio-android&utm_campaign=Badge_Grade) [![Coverage Status](https://coveralls.io/repos/github/Glucosio/glucosio-android/badge.svg?branch=develop)](https://coveralls.io/github/Glucosio/glucosio-android?branch=develop) -[![Stories in Ready](https://badge.waffle.io/Glucosio/glucosio-android.svg?label=ready&title=Ready)](http://waffle.io/Glucosio/glucosio-android) # Glucosio for Android Glucosio for Android, a user centered free and open source app for Diabetes management and research for Android. diff --git a/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java b/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java index 807dc96e..1f721d85 100644 --- a/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java @@ -52,8 +52,6 @@ public class AddGlucoseActivity extends AddReadingActivity { private TextView readingTextView; private EditText typeCustomEditText; private EditText notesEditText; - private AppCompatButton addFreeStyleButton; - private TextInputLayout readingInputLayout; private LabelledSpinner readingTypeSpinner; private boolean isCustomType = false; @@ -79,8 +77,8 @@ protected void onCreate(Bundle savedInstanceState) { readingTypeSpinner.setItemsArray(R.array.dialog_add_measured_list); readingTextView = (TextView) findViewById(R.id.glucose_add_concentration); typeCustomEditText = (EditText) findViewById(R.id.glucose_type_custom); - readingInputLayout = (TextInputLayout) findViewById(R.id.glucose_add_concentration_layout); - addFreeStyleButton = (AppCompatButton) findViewById(R.id.glucose_add_freestyle_button); + TextInputLayout readingInputLayout = (TextInputLayout) findViewById(R.id.glucose_add_concentration_layout); + AppCompatButton addFreeStyleButton = (AppCompatButton) findViewById(R.id.glucose_add_freestyle_button); notesEditText = (EditText) findViewById(R.id.glucose_add_notes); this.createDateTimeViewAndListener(); @@ -154,7 +152,7 @@ public void onNothingChosen(View labelledSpinner, AdapterView adapterView) { p = getIntent().getExtras(); reading = p.getString("reading"); - if (reading!=null) { + if (reading != null) { // If yes, first convert the decimal value from Freestyle to Integer double d = Double.parseDouble(reading); int glucoseValue = (int) d; diff --git a/app/src/main/java/org/glucosio/android/activity/AddWeightActivity.java b/app/src/main/java/org/glucosio/android/activity/AddWeightActivity.java index 5fc2557d..d586963b 100644 --- a/app/src/main/java/org/glucosio/android/activity/AddWeightActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/AddWeightActivity.java @@ -35,7 +35,6 @@ public class AddWeightActivity extends AddReadingActivity { private TextView readingTextView; - private TextView unitTextView; @Override protected void onCreate(Bundle savedInstanceState) { @@ -56,7 +55,7 @@ protected void onCreate(Bundle savedInstanceState) { presenter.setReadingTimeNow(); readingTextView = (TextView) findViewById(R.id.weight_add_value); - unitTextView = (TextView) findViewById(R.id.weight_add_unit_measurement); + TextView unitTextView = (TextView) findViewById(R.id.weight_add_unit_measurement); this.createDateTimeViewAndListener(); this.createFANViewAndListener(); diff --git a/app/src/main/java/org/glucosio/android/activity/BackupActivity.java b/app/src/main/java/org/glucosio/android/activity/BackupActivity.java index 8c63318b..16f304cb 100644 --- a/app/src/main/java/org/glucosio/android/activity/BackupActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/BackupActivity.java @@ -29,7 +29,9 @@ import android.content.SharedPreferences; import android.net.Uri; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; +import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; import android.view.View; @@ -65,6 +67,7 @@ import org.glucosio.android.backup.Backup; import org.glucosio.android.object.GlucosioBackup; +import java.io.Closeable; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -79,22 +82,19 @@ import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper; public class BackupActivity extends AppCompatActivity { - private int REQUEST_CODE_PICKER = 2; - private int REQUEST_CODE_SELECT = 3; - private int REQUEST_CODE_PICKER_FOLDER = 4; + private static final int REQUEST_CODE_PICKER = 2; + private static final int REQUEST_CODE_PICKER_FOLDER = 4; + + private static final String TAG = "glucosio_drive_backup"; + private static final String BACKUP_FOLDER_KEY = "backup_folder"; private Backup backup; private GoogleApiClient mGoogleApiClient; - private String TAG = "glucosio_drive_backup"; - private Button backupButton; - private TextView manageButton; private TextView folderTextView; private IntentSender intentPicker; private Realm realm; private String backupFolder; private ExpandableHeightListView backupListView; - private LinearLayout selectFolderButton; - private String BACKUP_FOLDER_KEY = "backup_folder"; private SharedPreferences sharedPref; @@ -115,10 +115,10 @@ public void onCreate(final Bundle savedInstanceState) { connectClient(); mGoogleApiClient = backup.getClient(); - backupButton = (Button) findViewById(R.id.activity_backup_drive_button_backup); - manageButton = (TextView) findViewById(R.id.activity_backup_drive_button_manage_drive); + Button backupButton = (Button) findViewById(R.id.activity_backup_drive_button_backup); + TextView manageButton = (TextView) findViewById(R.id.activity_backup_drive_button_manage_drive); folderTextView = (TextView) findViewById(R.id.activity_backup_drive_textview_folder); - selectFolderButton = (LinearLayout) findViewById(R.id.activity_backup_drive_button_folder); + LinearLayout selectFolderButton = (LinearLayout) findViewById(R.id.activity_backup_drive_button_folder); backupListView = (ExpandableHeightListView) findViewById(R.id.activity_backup_drive_listview_restore); backupListView.setExpanded(true); @@ -167,7 +167,7 @@ private void setBackupFolderTitle(DriveId id) { id.asDriveFolder().getMetadata((mGoogleApiClient)).setResultCallback( new ResultCallback() { @Override - public void onResult(DriveResource.MetadataResult result) { + public void onResult(@NonNull DriveResource.MetadataResult result) { if (!result.getStatus().isSuccess()) { showErrorDialog(); return; @@ -179,32 +179,10 @@ public void onResult(DriveResource.MetadataResult result) { ); } - private void openFilePicker() { - IntentSender intentSender = null; - // check if client is connected first - if (mGoogleApiClient.isConnected()) { - // build an intent that we'll use to start the open file activity - intentSender = Drive.DriveApi - .newOpenFileActivityBuilder() -// these mimetypes enable these folders/files types to be selected - .setMimeType(new String[]{DriveFolder.MIME_TYPE, "text/plain"}) - .build(mGoogleApiClient); - } - try { - if (intentSender != null) { - startIntentSenderForResult( - intentSender, REQUEST_CODE_SELECT, null, 0, 0, 0); - } - } catch (IntentSender.SendIntentException e) { - Log.e(TAG, "Unable to send intent", e); - showErrorDialog(); - } - } - private void openFolderPicker(boolean uploadToDrive) { if (uploadToDrive) { // First we check if a backup folder is set - if ("".equals(backupFolder)) { + if (TextUtils.isEmpty(backupFolder)) { try { if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) { if (intentPicker == null) @@ -256,10 +234,10 @@ private void getBackupsFromDrive(DriveFolder folder) { folder.queryChildren(mGoogleApiClient, query) .setResultCallback(new ResultCallback() { - private ArrayList backupsArray = new ArrayList(); + private ArrayList backupsArray = new ArrayList<>(); @Override - public void onResult(DriveApi.MetadataBufferResult result) { + public void onResult(@NonNull DriveApi.MetadataBufferResult result) { MetadataBuffer buffer = result.getMetadataBuffer(); int size = buffer.getCount(); for (int i = 0; i < size; i++) { @@ -279,7 +257,7 @@ public void downloadFromDrive(DriveFile file) { file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null) .setResultCallback(new ResultCallback() { @Override - public void onResult(DriveApi.DriveContentsResult result) { + public void onResult(@NonNull DriveApi.DriveContentsResult result) { if (!result.getStatus().isSuccess()) { showErrorDialog(); return; @@ -303,7 +281,7 @@ public void onResult(DriveApi.DriveContentsResult result) { } output.flush(); } finally { - output.close(); + safeCloseClosable(input); } } catch (Exception e) { reportToFirebase(e, "Error downloading backup from drive"); @@ -313,12 +291,7 @@ public void onResult(DriveApi.DriveContentsResult result) { reportToFirebase(e, "Error downloading backup from drive, file not found"); e.printStackTrace(); } finally { - try { - input.close(); - } catch (IOException e) { - reportToFirebase(e, "Error downloading backup from drive, IO Exception"); - e.printStackTrace(); - } + safeCloseClosable(input); } Toast.makeText(getApplicationContext(), R.string.activity_backup_drive_message_restart, Toast.LENGTH_LONG).show(); @@ -334,6 +307,15 @@ public void onResult(DriveApi.DriveContentsResult result) { }); } + private void safeCloseClosable(Closeable closeable) { + try { + closeable.close(); + } catch (IOException e) { + reportToFirebase(e, "Error downloading backup from drive, IO Exception"); + e.printStackTrace(); + } + } + private void uploadToDrive(DriveId mFolderDriveId) { if (mFolderDriveId != null) { //Create the file on GDrive @@ -341,7 +323,7 @@ private void uploadToDrive(DriveId mFolderDriveId) { Drive.DriveApi.newDriveContents(mGoogleApiClient) .setResultCallback(new ResultCallback() { @Override - public void onResult(DriveApi.DriveContentsResult result) { + public void onResult(@NonNull DriveApi.DriveContentsResult result) { if (!result.getStatus().isSuccess()) { Log.e(TAG, "Error while trying to create new file contents"); showErrorDialog(); @@ -389,7 +371,7 @@ public void run() { folder.createFile(mGoogleApiClient, changeSet, driveContents) .setResultCallback(new ResultCallback() { @Override - public void onResult(DriveFolder.DriveFileResult result) { + public void onResult(@NonNull DriveFolder.DriveFileResult result) { if (!result.getStatus().isSuccess()) { Log.d(TAG, "Error while trying to create the file"); showErrorDialog(); @@ -411,7 +393,7 @@ private void openOnDrive(DriveId driveId) { driveId.asDriveFolder().getMetadata((mGoogleApiClient)).setResultCallback( new ResultCallback() { @Override - public void onResult(DriveResource.MetadataResult result) { + public void onResult(@NonNull DriveResource.MetadataResult result) { if (!result.getStatus().isSuccess()) { showErrorDialog(); return; diff --git a/app/src/main/java/org/glucosio/android/activity/FreestyleLibreActivity.java b/app/src/main/java/org/glucosio/android/activity/FreestyleLibreActivity.java index 02c8f9b6..4da60098 100644 --- a/app/src/main/java/org/glucosio/android/activity/FreestyleLibreActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/FreestyleLibreActivity.java @@ -47,12 +47,10 @@ public class FreestyleLibreActivity extends Activity { - private static final String TAG = "Glucosio:FreestyleLibreActivity"; + private static final String TAG = "FreestyleLibreActivity"; + private NfcAdapter mNfcAdapter; private TextView readingTextView; - private TextView unitTextView; - private Button historyButton; - private Button saveButton; /** * @param activity The corresponding {@link Activity} requesting the foreground dispatch. @@ -92,9 +90,7 @@ protected void onCreate(Bundle savedInstanceState) { mNfcAdapter = NfcAdapter.getDefaultAdapter(this); readingTextView = (TextView) findViewById(R.id.activity_freestyle_textview_reading); - unitTextView = (TextView) findViewById(R.id.activity_freestyle_textview_unit); - historyButton = (Button) findViewById(R.id.activity_freestyle_button_history); - saveButton = (Button) findViewById(R.id.activity_freestyle_button_save); + Button saveButton = (Button) findViewById(R.id.activity_freestyle_button_save); saveButton.setOnClickListener(new View.OnClickListener() { @Override @@ -158,10 +154,7 @@ private void handleIntent(Intent intent) { Log.d("glucosio", "NfcAdapter.ACTION_TECH_DISCOVERED"); // In case we would still use the Tech Discovered Intent Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); - String[] techList = tag.getTechList(); - String searchedTech = NfcV.class.getName(); new NfcVReaderTask().execute(tag); - } } @@ -176,7 +169,7 @@ private void showReadingLayout() { // Apply values in TextViews // TODO: Add check for mmol/L - readingTextView.setText(mResult.history.get(mResult.history.size()-1).glucose(false)); + readingTextView.setText(mResult.history.get(mResult.history.size() - 1).glucose(false)); new Runnable() { @Override @@ -196,7 +189,7 @@ private void openAddGlucoseActivity() { // Start AddGlucose Activity passing the reading value Intent intent = new Intent(getApplicationContext(), AddGlucoseActivity.class); Bundle bundle = new Bundle(); - String currentGlucose = mResult.history.get(mResult.history.size()-1).glucose(false); + String currentGlucose = mResult.history.get(mResult.history.size() - 1).glucose(false); bundle.putString("reading", currentGlucose + ""); intent.putExtras(bundle); startActivity(intent); @@ -227,8 +220,8 @@ protected Tag doInBackground(Tag... params) { try { nfcvTag.connect(); final byte[] uid = tag.getId(); - for(int i=0; i <= 40; i++) { - byte[] cmd = new byte[]{0x60, 0x20, 0, 0, 0, 0, 0, 0, 0, 0, (byte)i, 0}; + for (int i = 0; i <= 40; i++) { + byte[] cmd = new byte[]{0x60, 0x20, 0, 0, 0, 0, 0, 0, 0, 0, (byte) i, 0}; System.arraycopy(uid, 0, cmd, 2, 8); byte[] oneBlock; Long time = System.currentTimeMillis(); @@ -245,7 +238,7 @@ protected Tag doInBackground(Tag... params) { } oneBlock = Arrays.copyOfRange(oneBlock, 2, oneBlock.length); - System.arraycopy(oneBlock, 0, data, i*8, 8); + System.arraycopy(oneBlock, 0, data, i * 8, 8); } } catch (Exception e) { diff --git a/app/src/main/java/org/glucosio/android/activity/MainActivity.java b/app/src/main/java/org/glucosio/android/activity/MainActivity.java index 7d7b37fb..7336060c 100644 --- a/app/src/main/java/org/glucosio/android/activity/MainActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/MainActivity.java @@ -55,7 +55,6 @@ import com.google.android.gms.appinvite.AppInviteInvitation; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GoogleApiAvailability; -import com.google.android.gms.common.GooglePlayServicesUtil; import com.mikepenz.materialdrawer.AccountHeaderBuilder; import com.mikepenz.materialdrawer.Drawer; import com.mikepenz.materialdrawer.DrawerBuilder; @@ -79,10 +78,11 @@ public class MainActivity extends AppCompatActivity implements DatePickerDialog.OnDateSetListener, ExportView { + private static final String INTENT_EXTRA_DROPDOWN = "history_dropdown"; private static final int REQUEST_INVITE = 1; private static final String INTENT_EXTRA_PAGER = "pager"; - private final String INTENT_EXTRA_DROPDOWN = "history_dropdown"; - BottomSheetBehavior bottomSheetBehavior; + + private BottomSheetBehavior bottomSheetBehavior; private ExportPresenter exportPresenter; private RadioButton exportRangeButton; private HomePagerAdapter homePagerAdapter; @@ -92,8 +92,6 @@ public class MainActivity extends AppCompatActivity implements DatePickerDialog. private TextView exportDialogDateFrom; private TextView exportDialogDateTo; private View bottomSheetAddDialogView; - private FloatingActionButton fabAddReading; - private Toolbar toolbar; private TabLayout tabLayout; @Override @@ -105,7 +103,7 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_main); initPresenters(application); - toolbar = (Toolbar) findViewById(R.id.activity_main_toolbar); + Toolbar toolbar = (Toolbar) findViewById(R.id.activity_main_toolbar); tabLayout = (TabLayout) findViewById(R.id.activity_main_tab_layout); viewPager = (ViewPager) findViewById(R.id.activity_main_pager); @@ -121,7 +119,7 @@ protected void onCreate(Bundle savedInstanceState) { viewPager.setAdapter(homePagerAdapter); tabLayout.setupWithViewPager(viewPager); - tabLayout.setOnTabSelectedListener( + tabLayout.addOnTabSelectedListener( new TabLayout.ViewPagerOnTabSelectedListener(viewPager) { @Override public void onTabSelected(TabLayout.Tab tab) { @@ -156,7 +154,7 @@ public void onPageScrollStateChanged(int state) { } }); - fabAddReading = (FloatingActionButton) findViewById(R.id.activity_main_fab_add_reading); + FloatingActionButton fabAddReading = (FloatingActionButton) findViewById(R.id.activity_main_fab_add_reading); fabAddReading.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -375,7 +373,6 @@ private void openNewAddActivity(Class activity) { } public void openSupportDialog() { - final Context mContext = this; AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(getResources().getString(R.string.menu_support_title)); builder.setItems(getResources().getStringArray(R.array.menu_support_options), new DialogInterface.OnClickListener() { @@ -700,7 +697,8 @@ public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayO } private boolean isPlayServicesAvailable() { - int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext()); + GoogleApiAvailability googleAPI = GoogleApiAvailability.getInstance(); + int status = googleAPI.isGooglePlayServicesAvailable(getApplicationContext()); if (status == ConnectionResult.SUCCESS) return true; else { diff --git a/app/src/main/java/org/glucosio/android/adapter/HomePagerAdapter.java b/app/src/main/java/org/glucosio/android/adapter/HomePagerAdapter.java index 7e3a9773..2ff070d3 100644 --- a/app/src/main/java/org/glucosio/android/adapter/HomePagerAdapter.java +++ b/app/src/main/java/org/glucosio/android/adapter/HomePagerAdapter.java @@ -41,8 +41,8 @@ public class HomePagerAdapter extends FragmentPagerAdapter { public HomePagerAdapter(FragmentManager fm, Context context) { super(fm); this.mContext = context; - overviewFragment = new OverviewFragment(); - historyFragment = new HistoryFragment(); + overviewFragment = OverviewFragment.newInstance(); + historyFragment = HistoryFragment.newInstance(); assistantFragment = new AssistantFragment(); } diff --git a/app/src/main/java/org/glucosio/android/fragment/HistoryFragment.java b/app/src/main/java/org/glucosio/android/fragment/HistoryFragment.java index d12710cb..8eaec79e 100644 --- a/app/src/main/java/org/glucosio/android/fragment/HistoryFragment.java +++ b/app/src/main/java/org/glucosio/android/fragment/HistoryFragment.java @@ -56,10 +56,11 @@ public class HistoryFragment extends Fragment { - private final String INTENT_EXTRA_PAGER = "pager"; - private final String INTENT_EXTRA_EDITING_ID = "edit_id"; - private final String INTENT_EXTRA_EDITING = "editing"; - private final String INTENT_EXTRA_DROPDOWN = "history_dropdown"; + private static final String INTENT_EXTRA_PAGER = "pager"; + private static final String INTENT_EXTRA_EDITING_ID = "edit_id"; + private static final String INTENT_EXTRA_EDITING = "editing"; + private static final String INTENT_EXTRA_DROPDOWN = "history_dropdown"; + private RecyclerView mRecyclerView; private LinearLayoutManager mLayoutManager; private RecyclerView.Adapter mAdapter; @@ -70,15 +71,8 @@ public class HistoryFragment extends Fragment { private Boolean isToolbarScrolling = true; private int historyDropdownPosition = 0; - public HistoryFragment() { - // Required empty public constructor - } - public static HistoryFragment newInstance() { - HistoryFragment fragment = new HistoryFragment(); - - - return fragment; + return new HistoryFragment(); } public void onCreate(Bundle savedInstanceState) { @@ -107,7 +101,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, // use a linear layout manager // Set array and adapter for graphSpinner String[] selectorArray = getActivity().getResources().getStringArray(R.array.fragment_history_selector); - ArrayAdapter dataAdapter = new ArrayAdapter(getActivity(), android.R.layout.simple_spinner_item, selectorArray); + ArrayAdapter dataAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_item, selectorArray); dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); historySpinner.setAdapter(dataAdapter); @@ -116,13 +110,12 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { if (!presenter.isdbEmpty()) { - int metricId = position; if (position != 0) { glucoseLegend.setVisibility(View.GONE); } else { glucoseLegend.setVisibility(View.VISIBLE); } - mAdapter = new HistoryAdapter(context, presenter, metricId); + mAdapter = new HistoryAdapter(context, presenter, position); mRecyclerView.setAdapter(mAdapter); mAdapter.notifyDataSetChanged(); historyDropdownPosition = position; @@ -143,9 +136,8 @@ public void onItemClick(View view, int position) { @Override public void onItemLongClick(final View view, final int position) { - int historyTypePosition = (int) historySpinner.getSelectedItemId(); // if touch Glucose or weight item - showBottomSheetDialog(view, position); + showBottomSheetDialog(view); } })); @@ -166,7 +158,7 @@ public void onLayoutChange(View v, int left, int top, int right, int bottom, int return mFragmentView; } - private void showBottomSheetDialog(final View itemView, final int itemPosition) { + private void showBottomSheetDialog(final View itemView) { mBottomSheetDialog = new BottomSheetDialog(getActivity()); View sheetView = getActivity().getLayoutInflater().inflate(R.layout.fragment_history_bottom_sheet, null); LinearLayout edit = (LinearLayout) sheetView.findViewById(R.id.fragment_history_bottom_sheet_edit); @@ -238,11 +230,6 @@ public void onDismissed(Snackbar snackbar, int event) { break; } } - - @Override - public void onShown(Snackbar snackbar) { - // Do nothing - } }).setAction("UNDO", new View.OnClickListener() { @Override public void onClick(View v) { diff --git a/app/src/main/java/org/glucosio/android/fragment/OverviewFragment.java b/app/src/main/java/org/glucosio/android/fragment/OverviewFragment.java index a4d4bbda..13bedd5a 100644 --- a/app/src/main/java/org/glucosio/android/fragment/OverviewFragment.java +++ b/app/src/main/java/org/glucosio/android/fragment/OverviewFragment.java @@ -69,6 +69,7 @@ import org.glucosio.android.view.OverviewView; import java.util.ArrayList; +import java.util.List; public class OverviewFragment extends Fragment implements OverviewView { @@ -77,13 +78,10 @@ public class OverviewFragment extends Fragment implements OverviewView { private LineChart chart; private TextView lastReadingTextView; private TextView lastDateTextView; - private TextView trendTextView; private TextView tipTextView; private TextView HB1ACTextView; private TextView HB1ACDateTextView; - private ImageButton graphExport; private Spinner graphSpinnerRange; - private Spinner graphSpinnerMetric; private OverviewPresenter presenter; private CheckBox graphCheckboxGlucose; @@ -95,15 +93,8 @@ public class OverviewFragment extends Fragment implements OverviewView { private View mFragmentView; - public OverviewFragment() { - // Required empty public constructor - } - - public static HistoryFragment newInstance() { - HistoryFragment fragment = new HistoryFragment(); - - - return fragment; + public static OverviewFragment newInstance() { + return new OverviewFragment(); } public static void disableTouchTheft(View view) { @@ -143,11 +134,10 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, lastReadingTextView = (TextView) mFragmentView.findViewById(R.id.item_history_reading); lastDateTextView = (TextView) mFragmentView.findViewById(R.id.fragment_overview_last_date); - trendTextView = (TextView) mFragmentView.findViewById(R.id.item_history_trend); tipTextView = (TextView) mFragmentView.findViewById(R.id.random_tip_textview); graphSpinnerRange = (Spinner) mFragmentView.findViewById(R.id.chart_spinner_range); - graphSpinnerMetric = (Spinner) mFragmentView.findViewById(R.id.chart_spinner_metrics); - graphExport = (ImageButton) mFragmentView.findViewById(R.id.fragment_overview_graph_export); + Spinner graphSpinnerMetric = (Spinner) mFragmentView.findViewById(R.id.chart_spinner_metrics); + ImageButton graphExport = (ImageButton) mFragmentView.findViewById(R.id.fragment_overview_graph_export); HB1ACTextView = (TextView) mFragmentView.findViewById(R.id.fragment_overview_hb1ac); HB1ACDateTextView = (TextView) mFragmentView.findViewById(R.id.fragment_overview_hb1ac_date); HB1ACMoreButton = (ImageButton) mFragmentView.findViewById(R.id.fragment_overview_a1c_more); @@ -256,8 +246,8 @@ public void onClick(View v) { // Set array and adapter for graphSpinnerRange String[] selectorRangeArray = getActivity().getResources().getStringArray(R.array.fragment_overview_selector_range); String[] selectorMetricArray = getActivity().getResources().getStringArray(R.array.fragment_overview_selector_metric); - ArrayAdapter dataRangeAdapter = new ArrayAdapter(getActivity(), android.R.layout.simple_spinner_item, selectorRangeArray); - ArrayAdapter dataMetricAdapter = new ArrayAdapter(getActivity(), android.R.layout.simple_spinner_item, selectorMetricArray); + ArrayAdapter dataRangeAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_item, selectorRangeArray); + ArrayAdapter dataMetricAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_item, selectorMetricArray); dataRangeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); dataMetricAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); graphSpinnerRange.setAdapter(dataRangeAdapter); @@ -411,9 +401,8 @@ private void setData() { } private LineData generateGlucoseData() { - ArrayList xVals = new ArrayList(); - ArrayList yVals = new ArrayList(); - ArrayList colors = new ArrayList<>(); + List xVals = new ArrayList<>(); + List yVals = new ArrayList<>(); GlucosioConverter converter = new GlucosioConverter(); @@ -428,8 +417,6 @@ private LineData generateGlucoseData() { float converted = (float) val; yVals.add(new Entry(converted, i)); } - GlucoseRanges ranges = new GlucoseRanges(getActivity().getApplicationContext()); - colors.add(ranges.stringToColor(ranges.colorFromReading(presenter.getGlucoseReadings().get(i)))); } } else if (graphSpinnerRange.getSelectedItemPosition() == 1) { // Week view @@ -443,7 +430,6 @@ private LineData generateGlucoseData() { yVals.add(new Entry(converted, i)); } } - colors.add(getResources().getColor(R.color.glucosio_pink)); } else { // Month view for (int i = 0; i < presenter.getGlucoseReadingsMonth().size(); i++) { @@ -456,8 +442,6 @@ private LineData generateGlucoseData() { yVals.add(new Entry(converted, i)); } } - colors.add(getResources().getColor(R.color.glucosio_pink)); - } if (graphSpinnerRange.getSelectedItemPosition() == 0) { @@ -485,8 +469,8 @@ private LineData generateGlucoseData() { } private LineData generateA1cData() { - ArrayList xVals = new ArrayList(); - ArrayList yVals = new ArrayList(); + ArrayList xVals = new ArrayList<>(); + ArrayList yVals = new ArrayList<>(); for (int i = 0; i < presenter.getA1cReadings().size(); i++) { float val = Float.parseFloat(presenter.getA1cReadings().get(i).toString()); @@ -505,8 +489,8 @@ private LineData generateA1cData() { } private LineData generateKetonesData() { - ArrayList xVals = new ArrayList(); - ArrayList yVals = new ArrayList(); + List xVals = new ArrayList<>(); + List yVals = new ArrayList<>(); for (int i = 0; i < presenter.getKetonesReadings().size(); i++) { float val = Float.parseFloat(presenter.getKetonesReadings().get(i).toString()); @@ -525,8 +509,8 @@ private LineData generateKetonesData() { } private LineData generateWeightData() { - ArrayList xVals = new ArrayList(); - ArrayList yVals = new ArrayList(); + List xVals = new ArrayList<>(); + List yVals = new ArrayList<>(); for (int i = 0; i < presenter.getWeightReadings().size(); i++) { float val = Float.parseFloat(presenter.getWeightReadings().get(i).toString()); @@ -545,9 +529,9 @@ private LineData generateWeightData() { } private LineData generatePressureData() { - ArrayList xVals = new ArrayList(); - ArrayList yValsMax = new ArrayList(); - ArrayList yValsMin = new ArrayList(); + List xVals = new ArrayList<>(); + List yValsMax = new ArrayList<>(); + List yValsMin = new ArrayList<>(); for (int i = 0; i < presenter.getMaxPressureReadings().size(); i++) { float val = Float.parseFloat(presenter.getMaxPressureReadings().get(i).toString()); @@ -573,8 +557,8 @@ private LineData generatePressureData() { } private LineData generateCholesterolData() { - ArrayList xVals = new ArrayList(); - ArrayList yVals = new ArrayList(); + List xVals = new ArrayList<>(); + List yVals = new ArrayList<>(); for (int i = 0; i < presenter.getCholesterolReadings().size(); i++) { float val = Float.parseFloat(presenter.getCholesterolReadings().get(i).toString()); @@ -592,10 +576,10 @@ private LineData generateCholesterolData() { generateLineDataSet(yVals, getResources().getColor(R.color.glucosio_fab_cholesterol))); } - private LineDataSet generateLineDataSet(ArrayList yVals, int color) { + private LineDataSet generateLineDataSet(List yVals, int color) { // create a dataset and give it a type LineDataSet set1 = new LineDataSet(yVals, ""); - ArrayList colors = new ArrayList<>(); + List colors = new ArrayList<>(); if (color == getResources().getColor(R.color.glucosio_pink)) { for (Entry yVal : yVals) { @@ -671,19 +655,13 @@ private void loadHB1AC() { } } -/* private void loadGlucoseTrend(){ - if (!presenter.isdbEmpty()) { - trendTextView.setText(presenter.getGlucoseTrend() + ""); - } - }*/ - private void loadLastReading() { if (!presenter.isdbEmpty()) { if (presenter.getUnitMeasuerement().equals("mg/dL")) { lastReadingTextView.setText(presenter.getLastReading() + " mg/dL"); } else { GlucosioConverter converter = new GlucosioConverter(); - lastReadingTextView.setText(converter.glucoseToMmolL(Double.parseDouble(presenter.getLastReading().toString())) + " mmol/L"); + lastReadingTextView.setText(converter.glucoseToMmolL(Double.parseDouble(presenter.getLastReading())) + " mmol/L"); } FormatDateTime dateTime = new FormatDateTime(getActivity().getApplicationContext()); @@ -718,8 +696,7 @@ public String convertDateToMonth(@NonNull final String date) { } @Override - public void onRequestPermissionsResult(int requestCode, - String permissions[], int[] grantResults) { + public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) { switch (requestCode) { case PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: { // If request is cancelled, the result arrays are empty. diff --git a/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java b/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java index 3a16cccd..fffd0975 100644 --- a/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java @@ -48,6 +48,7 @@ public class AddGlucosePresenter extends AddReadingPresenter { public AddGlucosePresenter(AddGlucoseActivity addGlucoseActivity) { this.activity = addGlucoseActivity; dB = new DatabaseHandler(addGlucoseActivity.getApplicationContext()); + rTools = new ReadingTools(); } public void updateSpinnerTypeTime() { @@ -66,7 +67,6 @@ private int timeToSpinnerType() { } public int hourToSpinnerType(int hour) { - rTools = new ReadingTools(); return rTools.hourToSpinnerType(hour); } diff --git a/app/src/main/java/org/glucosio/android/presenter/AssistantPresenter.java b/app/src/main/java/org/glucosio/android/presenter/AssistantPresenter.java index f021c334..f667760d 100644 --- a/app/src/main/java/org/glucosio/android/presenter/AssistantPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/AssistantPresenter.java @@ -20,17 +20,14 @@ package org.glucosio.android.presenter; -import org.glucosio.android.db.DatabaseHandler; import org.glucosio.android.fragment.AssistantFragment; public class AssistantPresenter { - private DatabaseHandler dB; private AssistantFragment fragment; public AssistantPresenter(AssistantFragment assistantFragment) { this.fragment = assistantFragment; - dB = new DatabaseHandler(assistantFragment.getContext()); } public void addReading() { diff --git a/app/src/main/java/org/glucosio/android/presenter/MainPresenter.java b/app/src/main/java/org/glucosio/android/presenter/MainPresenter.java index ade15eb7..7d8aaa2a 100644 --- a/app/src/main/java/org/glucosio/android/presenter/MainPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/MainPresenter.java @@ -24,37 +24,17 @@ import org.glucosio.android.activity.MainActivity; import org.glucosio.android.db.DatabaseHandler; -import org.glucosio.android.tools.GlucosioConverter; -import org.glucosio.android.tools.ReadingTools; public class MainPresenter { - private MainActivity mainActivity; - private DatabaseHandler dB; - private ReadingTools rTools; - private GlucosioConverter converter; - - private String readingYear; - private String readingMonth; - private String readingDay; - private String readingHour; - private String readingMinute; public MainPresenter(MainActivity mainActivity, DatabaseHandler databaseHandler) { - this.mainActivity = mainActivity; dB = databaseHandler; Log.i("msg::", "initiated db object"); if (dB.getUser(1) == null) { // if user doesn't exists start hello activity mainActivity.startHelloActivity(); - } else { - //creating a new user - rTools = new ReadingTools(); - converter = new GlucosioConverter(); - - // DEBUG METHODS - // dB.addNGlucoseReadings(); } } diff --git a/app/src/main/java/org/glucosio/android/presenter/OverviewPresenter.java b/app/src/main/java/org/glucosio/android/presenter/OverviewPresenter.java index cd3a0e98..75dcc63e 100644 --- a/app/src/main/java/org/glucosio/android/presenter/OverviewPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/OverviewPresenter.java @@ -50,7 +50,6 @@ public class OverviewPresenter { private DatabaseHandler dB; private OverviewView view; - private ArrayList glucoseType; private List glucoseReadingsWeek; private List glucoseReadingsMonth; private List glucoseDatetimeWeek; @@ -76,7 +75,6 @@ public void loadDatabase(boolean isNewGraphEnabled) { this.glucoseReadingsWeek = dB.getAverageGlucoseReadingsByWeek(); this.glucoseDatetimeWeek = dB.getGlucoseDatetimesByWeek(); this.glucoseDatetimeMonth = dB.getGlucoseDatetimesByMonth(); - this.glucoseType = dB.getGlucoseTypeAsArray(); this.glucoseMaxValue = dB.getUser(1).getCustom_range_max(); this.glucoseMinValue = dB.getUser(1).getCustom_range_min(); } @@ -85,10 +83,6 @@ public String convertDate(String date) { return view.convertDate(date); } -/* public int getGlucoseTrend(){ - return dB.getAverageGlucoseReadingForLastMonth(); - }*/ - public String getHB1AC() { // Check if last month is available first if (getGlucoseReadingsMonth().size() > 1) { diff --git a/app/src/main/res/layout/activity_freestyle_libre.xml b/app/src/main/res/layout/activity_freestyle_libre.xml index a0e14c27..acb679ae 100644 --- a/app/src/main/res/layout/activity_freestyle_libre.xml +++ b/app/src/main/res/layout/activity_freestyle_libre.xml @@ -1,5 +1,4 @@ - - - + android:orientation="vertical" + android:paddingTop="16dp"> - + android:layout_height="wrap_content" + android:paddingBottom="8dp" + android:paddingLeft="16dp" + android:paddingRight="16dp" + android:textStyle="bold" + tools:text="Title" /> - - - - - + - - + - \ No newline at end of file + + \ 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 971d7d10..34851949 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -209,7 +209,7 @@ Glucosio comes with default categories for glucose input but you can create custom categories in settings to match your unique needs. Check here often Glucosio assistant provides regular tips and will keep improving, so always check here for useful actions you can take to improve your Glucosio experience and for other useful tips. - Submit feedback + Submit feedback If you find any technical issues or have feedback about Glucosio we encourage you to submit it in the settings menu in order to help us improve Glucosio. Add a reading Be sure to regularly add your glucose readings so we can help you track your glucose levels over time. @@ -222,14 +222,12 @@ @string/assistant_calculator_a1c_title @string/assistant_feedback_title @string/assistant_reading_title - @string/assistant_categories_title @string/assistant_export_title @string/assistant_calculator_a1c_desc @string/assistant_feedback_desc @string/assistant_reading_desc - @string/assistant_categories_desc @string/assistant_export_desc @@ -237,7 +235,6 @@ @string/assistant_action_try @string/assistant_action_feedback @string/assistant_action_reading - @string/assistant_action_try @string/dialog_export_button diff --git a/app/src/test/java/org/glucosio/android/adapter/AssistantAdapterTest.java b/app/src/test/java/org/glucosio/android/adapter/AssistantAdapterTest.java new file mode 100644 index 00000000..53a85f1f --- /dev/null +++ b/app/src/test/java/org/glucosio/android/adapter/AssistantAdapterTest.java @@ -0,0 +1,150 @@ +package org.glucosio.android.adapter; + +import android.content.res.Resources; +import android.support.annotation.IdRes; +import android.support.v7.app.AppCompatActivity; +import android.view.ViewGroup; +import android.widget.TextView; + +import org.glucosio.android.R; +import org.glucosio.android.RobolectricTest; +import org.glucosio.android.object.ActionTip; +import org.glucosio.android.presenter.AssistantPresenter; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.robolectric.Robolectric; + +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.android.api.Assertions.assertThat; +import static org.mockito.Mockito.verify; +import static org.mockito.MockitoAnnotations.initMocks; + +public class AssistantAdapterTest extends RobolectricTest { + private AppCompatActivity activity; + private ViewGroup viewGroup; + + private AssistantAdapter adapter; + private String[] actionTipTitles; + + @Mock + private AssistantPresenter presenterMock; + private String[] actionTipDescriptions; + private String[] actionTipActions; + + @Before + public void setUp() throws Exception { + initMocks(this); + + activity = Robolectric.buildActivity(AppCompatActivity.class).create().get(); + viewGroup = (ViewGroup) activity.findViewById(android.R.id.content); + + List tips = prepareTips(); + adapter = new AssistantAdapter(presenterMock, activity.getResources(), tips); + } + + private List prepareTips() { + List actionTips = new ArrayList<>(); + + Resources r = activity.getResources(); + + actionTipTitles = r.getStringArray(R.array.assistant_titles); + actionTipDescriptions = r.getStringArray(R.array.assistant_descriptions); + actionTipActions = r.getStringArray(R.array.assistant_actions); + + for (int i = 0; i < actionTipTitles.length; i++) { + String actionTipTitle = actionTipTitles[i]; + String actionTipDescription = actionTipDescriptions[i]; + String actionTipAction = actionTipActions[i]; + + ActionTip actionTip = new ActionTip(); + actionTip.setTipTitle(actionTipTitle); + actionTip.setTipDescription(actionTipDescription); + actionTip.setTipAction(actionTipAction); + + actionTips.add(actionTip); + } + + return actionTips; + } + + @Test + public void CorrectlyBindRows() throws Exception { + for (int i = 0; i < actionTipTitles.length; i++) { + AssistantAdapter.ViewHolder holder = createAndBindViewHolder(i); + + assertThat(getTextView(holder, R.id.fragment_assistant_item_title)) + .hasText(actionTipTitles[i]); + assertThat(getTextView(holder, R.id.fragment_assistant_item_description)) + .hasText(actionTipDescriptions[i]); + assertThat(getTextView(holder, R.id.fragment_assistant_item_action)) + .hasText(actionTipActions[i]); + } + } + + private TextView getTextView(AssistantAdapter.ViewHolder holder, @IdRes int viewId) { + return (TextView) holder.mView.findViewById(viewId); + } + + @Test + public void CallPresenter_WhenFeedbackAsked() throws Exception { + int position = findIndex(activity.getString(R.string.assistant_feedback_title)); + AssistantAdapter.ViewHolder holder = createAndBindViewHolder(position); + + clickActionButton(holder); + + verify(presenterMock).userSupportAsked(); + } + + private boolean clickActionButton(AssistantAdapter.ViewHolder holder) { + return holder.mView.findViewById(R.id.fragment_assistant_item_action).performClick(); + } + + private AssistantAdapter.ViewHolder createAndBindViewHolder(int position) { + final AssistantAdapter.ViewHolder holder = adapter.onCreateViewHolder(viewGroup, -1); + adapter.onBindViewHolder(holder, position); + return holder; + } + + private int findIndex(String titleString) { + for (int i = 0; i < actionTipTitles.length; i++) { + if (actionTipTitles[i].equals(titleString)) { + return i; + } + } + + return -1; + } + + @Test + public void CallPresenter_WhenExportAsked() throws Exception { + int position = findIndex(activity.getString(R.string.assistant_export_title)); + AssistantAdapter.ViewHolder holder = createAndBindViewHolder(position); + + clickActionButton(holder); + + verify(presenterMock).userAskedExport(); + } + + @Test + public void CallPresenter_WhenA1CCalculatorAsked() throws Exception { + int position = findIndex(activity.getString(R.string.assistant_calculator_a1c_title)); + AssistantAdapter.ViewHolder holder = createAndBindViewHolder(position); + + clickActionButton(holder); + + verify(presenterMock).userAskedA1CCalculator(); + } + + @Test + public void CallPresenter_WhenAddReadingAsked() throws Exception { + int position = findIndex(activity.getString(R.string.assistant_reading_title)); + AssistantAdapter.ViewHolder holder = createAndBindViewHolder(position); + + clickActionButton(holder); + + verify(presenterMock).userAskedAddReading(); + } +} \ No newline at end of file diff --git a/app/src/test/java/org/glucosio/android/fragment/AssistantFragmentTest.java b/app/src/test/java/org/glucosio/android/fragment/AssistantFragmentTest.java new file mode 100644 index 00000000..25fba207 --- /dev/null +++ b/app/src/test/java/org/glucosio/android/fragment/AssistantFragmentTest.java @@ -0,0 +1,34 @@ +package org.glucosio.android.fragment; + +import org.glucosio.android.RobolectricTest; +import org.junit.Before; +import org.junit.Test; +import org.robolectric.shadows.support.v4.SupportFragmentTestUtil; + +import static org.assertj.core.api.Assertions.assertThat; + +public class AssistantFragmentTest extends RobolectricTest { + private AssistantFragment fragment; + + @Before + public void setUp() throws Exception { + fragment = AssistantFragment.newInstance(); + SupportFragmentTestUtil.startFragment(fragment); + } + + @Test + public void ShouldBindViews_WhenCreated() throws Exception { + assertThat(fragment.archivedButton).isNotNull(); + assertThat(fragment.archivedDismissButton).isNotNull(); + assertThat(fragment.tipsRecycler).isNotNull(); + } + + @Test + public void ShouldUnBindViews_WhenDestroyed() throws Exception { + fragment.onDestroyView(); + + assertThat(fragment.archivedButton).isNull(); + assertThat(fragment.archivedDismissButton).isNull(); + assertThat(fragment.tipsRecycler).isNull(); + } +} \ No newline at end of file diff --git a/app/src/test/java/org/glucosio/android/presenter/AssistantPresenterTest.java b/app/src/test/java/org/glucosio/android/presenter/AssistantPresenterTest.java new file mode 100644 index 00000000..cf4f9ed0 --- /dev/null +++ b/app/src/test/java/org/glucosio/android/presenter/AssistantPresenterTest.java @@ -0,0 +1,46 @@ +package org.glucosio.android.presenter; + +import org.glucosio.android.fragment.AssistantFragment; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; + +import static org.mockito.Mockito.verify; + +@RunWith(MockitoJUnitRunner.class) +public class AssistantPresenterTest { + @InjectMocks + private AssistantPresenter presenter; + @Mock + private AssistantFragment assistantFragmentMock; + + @Test + public void CallFragment_WhenUserAskedSupport() throws Exception { + presenter.userSupportAsked(); + + verify(assistantFragmentMock).openSupportDialog(); + } + + @Test + public void CallFragment_WhenUserAskedToShowCalculator() throws Exception { + presenter.userAskedA1CCalculator(); + + verify(assistantFragmentMock).startA1CCalculatorActivity(); + } + + @Test + public void CallFragment_WhenUserAskedToAddReading() throws Exception { + presenter.userAskedAddReading(); + + verify(assistantFragmentMock).addReading(); + } + + @Test + public void CallFragment_WhenUserAskedExport() throws Exception { + presenter.userAskedExport(); + + verify(assistantFragmentMock).startExportActivity(); + } +} \ No newline at end of file From 24f85bf7e863273daa8cb6dd7c6d397766ba3afd Mon Sep 17 00:00:00 2001 From: racell Date: Thu, 13 Oct 2016 13:32:33 +0900 Subject: [PATCH 48/82] Add mmol/L unit check in validGlucose method --- .../presenter/AddGlucosePresenter.java | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java b/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java index fffd0975..c1f2c807 100644 --- a/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java @@ -141,26 +141,23 @@ private boolean validateGlucose(String reading) { try { Integer readingValue = Integer.parseInt(reading); //TODO: Add custom ranges - // TODO: Convert range in mmol/L return readingValue > 19 && readingValue < 601; } catch (Exception e) { FirebaseCrash.log("Exception during reading validation"); FirebaseCrash.report(e); return false; } - } else { -/* try { - //TODO: Add custom ranges for mmol/L - Integer readingValue = Integer.parseInt(reading); - if (readingValue > 19 && readingValue < 601) { - // TODO: Convert range in mmol/L - return true; - } else { + } else if ("mmol/L".equals(getUnitMeasuerement())) { + // Convert mmol/L Unit + try { + Double readingValue = Double.parseDouble(reading); + return readingValue > 1.0545 && readingValue < 33.3555; + } catch (Exception e) { + FirebaseCrash.log("Exception during reading validation"); + FirebaseCrash.report(e); return false; } - } catch (Exception e) { - return false; - }*/ + } else { // IT return always true: we don't have ranges yet. return true; } From 5a12944ec1f2d0e3937eaf82a0a7af16093aedf4 Mon Sep 17 00:00:00 2001 From: Joe Apicella Date: Wed, 12 Oct 2016 21:52:35 -0700 Subject: [PATCH 49/82] Remove hardcoded strings for concentrations like mg/dL --- .../glucosio/android/activity/AddA1CActivity.java | 2 +- .../android/activity/AddGlucoseActivity.java | 4 ++-- .../android/adapter/A1cEstimateAdapter.java | 5 +++-- .../glucosio/android/adapter/HistoryAdapter.java | 13 +++++++++---- .../glucosio/android/fragment/OverviewFragment.java | 7 +++++-- app/src/main/res/values/strings.xml | 4 ++++ 6 files changed, 24 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/activity/AddA1CActivity.java b/app/src/main/java/org/glucosio/android/activity/AddA1CActivity.java index 41523d56..a6963aa3 100644 --- a/app/src/main/java/org/glucosio/android/activity/AddA1CActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/AddA1CActivity.java @@ -62,7 +62,7 @@ protected void onCreate(Bundle savedInstanceState) { this.createFANViewAndListener(); if (!"percentage".equals(presenter.getA1CUnitMeasuerement())) { - unitTextView.setText("mmol/mol"); + unitTextView.setText(getString(R.string.mmol_mol)); } // If an id is passed, open the activity in edit mode diff --git a/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java b/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java index 1f721d85..01709367 100644 --- a/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java @@ -108,9 +108,9 @@ public void onNothingChosen(View labelledSpinner, AdapterView adapterView) { TextView unitM = (TextView) findViewById(R.id.glucose_add_unit_measurement); if (presenter.getUnitMeasuerement().equals("mg/dL")) { - unitM.setText("mg/dL"); + unitM.setText(getString(R.string.mg_dL)); } else { - unitM.setText("mmol/L"); + unitM.setText(getString(R.string.mmol_L)); } // If an id is passed, open the activity in edit mode diff --git a/app/src/main/java/org/glucosio/android/adapter/A1cEstimateAdapter.java b/app/src/main/java/org/glucosio/android/adapter/A1cEstimateAdapter.java index 51690410..978f02b0 100644 --- a/app/src/main/java/org/glucosio/android/adapter/A1cEstimateAdapter.java +++ b/app/src/main/java/org/glucosio/android/adapter/A1cEstimateAdapter.java @@ -63,10 +63,11 @@ public View getView(int position, View convertView, ViewGroup parent) { if (glucoseAverage != null) { if ("mg/dL".equals(db.getUser(1).getPreferred_unit())) { - glucoseAverage.setText(p.getGlucoseAverage() + " mg/dL"); + glucoseAverage.setText(getContext().getString(R.string.mg_dL_value, p.getGlucoseAverage())); } else { GlucosioConverter converter = new GlucosioConverter(); - glucoseAverage.setText(converter.glucoseToMgDl(Double.parseDouble(p.getGlucoseAverage())) + " mmol/L"); + String mmol = String.valueOf(converter.glucoseToMgDl(Double.parseDouble(p.getGlucoseAverage()))); + glucoseAverage.setText(getContext().getString(R.string.mmol_L_value, mmol)); } } } diff --git a/app/src/main/java/org/glucosio/android/adapter/HistoryAdapter.java b/app/src/main/java/org/glucosio/android/adapter/HistoryAdapter.java index 78583b43..54c1e056 100644 --- a/app/src/main/java/org/glucosio/android/adapter/HistoryAdapter.java +++ b/app/src/main/java/org/glucosio/android/adapter/HistoryAdapter.java @@ -153,9 +153,12 @@ public void onBindViewHolder(ViewHolder holder, int position) { String color = ranges.colorFromReading(glucoseReadingArray.get(position)); if (presenter.getUnitMeasuerement().equals("mg/dL")) { - readingTextView.setText(glucoseReadingArray.get(position).toString() + " mg/dL"); + String reading = glucoseReadingArray.get(position).toString(); + readingTextView.setText(mContext.getString(R.string.mg_dL_value, reading)); } else { - readingTextView.setText(converter.glucoseToMmolL(Double.parseDouble(glucoseReadingArray.get(position).toString())) + " mmol/L"); + String mgdlReading = glucoseReadingArray.get(position).toString(); + String reading = String.valueOf(converter.glucoseToMmolL(Double.parseDouble(mgdlReading))); + readingTextView.setText(mContext.getString(R.string.mmol_L_value, reading)); } readingTextView.setTextColor(ranges.stringToColor(color)); @@ -174,7 +177,8 @@ public void onBindViewHolder(ViewHolder holder, int position) { readingTextView.setText(hb1acReadingArray.get(position).toString() + " %"); } else { GlucosioConverter converter = new GlucosioConverter(); - readingTextView.setText(converter.a1cNgspToIfcc(hb1acReadingArray.get(position)) + " mmol/mol"); + String reading = String.valueOf(converter.a1cNgspToIfcc(hb1acReadingArray.get(position))); + readingTextView.setText(mContext.getString(R.string.mmol_mol_value, reading)); } datetimeTextView.setText(presenter.convertDate(hb1acDateTimeArray.get(position))); typeTextView.setText(""); @@ -184,7 +188,8 @@ public void onBindViewHolder(ViewHolder holder, int position) { // Cholesterol case 2: idTextView.setText(cholesterolIdArray.get(position).toString()); - readingTextView.setText(cholesterolTotalArray.get(position).toString() + " mg/dL"); + String reading = cholesterolTotalArray.get(position).toString(); + readingTextView.setText(mContext.getString(R.string.mg_dL_value, reading)); datetimeTextView.setText(presenter.convertDate(cholesterolDateTimeArray.get(position))); typeTextView.setText("LDL: " + cholesterolLDLArray.get(position) + " - " + "HDL: " + cholesterolHDLArray.get(position)); readingTextView.setTextColor(mContext.getResources().getColor(R.color.glucosio_text_dark)); diff --git a/app/src/main/java/org/glucosio/android/fragment/OverviewFragment.java b/app/src/main/java/org/glucosio/android/fragment/OverviewFragment.java index 13bedd5a..545b5f0c 100644 --- a/app/src/main/java/org/glucosio/android/fragment/OverviewFragment.java +++ b/app/src/main/java/org/glucosio/android/fragment/OverviewFragment.java @@ -658,10 +658,13 @@ private void loadHB1AC() { private void loadLastReading() { if (!presenter.isdbEmpty()) { if (presenter.getUnitMeasuerement().equals("mg/dL")) { - lastReadingTextView.setText(presenter.getLastReading() + " mg/dL"); + String reading = presenter.getLastReading(); + lastReadingTextView.setText(getString(R.string.mg_dL_value, reading)); } else { GlucosioConverter converter = new GlucosioConverter(); - lastReadingTextView.setText(converter.glucoseToMmolL(Double.parseDouble(presenter.getLastReading())) + " mmol/L"); + String mgdl = presenter.getLastReading(); + String reading = String.valueOf(converter.glucoseToMmolL(Double.parseDouble(mgdl))); + lastReadingTextView.setText(getString(R.string.mmol_L_value, reading)); } FormatDateTime dateTime = new FormatDateTime(getActivity().getApplicationContext()); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 34851949..e8baa9d8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -443,6 +443,10 @@ Manage on Drive mmol/mol mmol/L + %1$s mmol/mol + %1$s mmol/L + mg/dL + %1$s mg/dL Revert to old graph history save From e5d17f921fb61c5bddaa41a543bcbcab8b3ef15a Mon Sep 17 00:00:00 2001 From: Joe Apicella Date: Thu, 13 Oct 2016 11:21:37 -0700 Subject: [PATCH 50/82] Add number formatting for values when converting to string --- .../glucosio/android/adapter/A1cEstimateAdapter.java | 6 ++++-- .../org/glucosio/android/adapter/HistoryAdapter.java | 11 +++++++---- .../glucosio/android/fragment/OverviewFragment.java | 4 +++- .../java/org/glucosio/android/object/A1cEstimate.java | 4 +++- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/adapter/A1cEstimateAdapter.java b/app/src/main/java/org/glucosio/android/adapter/A1cEstimateAdapter.java index 978f02b0..78dff61f 100644 --- a/app/src/main/java/org/glucosio/android/adapter/A1cEstimateAdapter.java +++ b/app/src/main/java/org/glucosio/android/adapter/A1cEstimateAdapter.java @@ -13,6 +13,7 @@ import org.glucosio.android.object.A1cEstimate; import org.glucosio.android.tools.GlucosioConverter; +import java.text.NumberFormat; import java.util.List; public class A1cEstimateAdapter extends ArrayAdapter { @@ -66,8 +67,9 @@ public View getView(int position, View convertView, ViewGroup parent) { glucoseAverage.setText(getContext().getString(R.string.mg_dL_value, p.getGlucoseAverage())); } else { GlucosioConverter converter = new GlucosioConverter(); - String mmol = String.valueOf(converter.glucoseToMgDl(Double.parseDouble(p.getGlucoseAverage()))); - glucoseAverage.setText(getContext().getString(R.string.mmol_L_value, mmol)); + int mmol = converter.glucoseToMgDl(Double.parseDouble(p.getGlucoseAverage())); + String reading = NumberFormat.getInstance().format(mmol); + glucoseAverage.setText(getContext().getString(R.string.mmol_L_value, reading)); } } } diff --git a/app/src/main/java/org/glucosio/android/adapter/HistoryAdapter.java b/app/src/main/java/org/glucosio/android/adapter/HistoryAdapter.java index 54c1e056..d4052cad 100644 --- a/app/src/main/java/org/glucosio/android/adapter/HistoryAdapter.java +++ b/app/src/main/java/org/glucosio/android/adapter/HistoryAdapter.java @@ -32,6 +32,7 @@ import org.glucosio.android.tools.GlucoseRanges; import org.glucosio.android.tools.GlucosioConverter; +import java.text.NumberFormat; import java.util.ArrayList; import java.util.Collections; @@ -153,11 +154,12 @@ public void onBindViewHolder(ViewHolder holder, int position) { String color = ranges.colorFromReading(glucoseReadingArray.get(position)); if (presenter.getUnitMeasuerement().equals("mg/dL")) { - String reading = glucoseReadingArray.get(position).toString(); + int glucoseReading = glucoseReadingArray.get(position); + String reading = NumberFormat.getInstance().format(glucoseReading); readingTextView.setText(mContext.getString(R.string.mg_dL_value, reading)); } else { - String mgdlReading = glucoseReadingArray.get(position).toString(); - String reading = String.valueOf(converter.glucoseToMmolL(Double.parseDouble(mgdlReading))); + double mmol = converter.glucoseToMmolL(glucoseReadingArray.get(position)); + String reading = NumberFormat.getInstance().format(mmol); readingTextView.setText(mContext.getString(R.string.mmol_L_value, reading)); } @@ -177,7 +179,8 @@ public void onBindViewHolder(ViewHolder holder, int position) { readingTextView.setText(hb1acReadingArray.get(position).toString() + " %"); } else { GlucosioConverter converter = new GlucosioConverter(); - String reading = String.valueOf(converter.a1cNgspToIfcc(hb1acReadingArray.get(position))); + double ifcc = converter.a1cNgspToIfcc(hb1acReadingArray.get(position)); + String reading = NumberFormat.getInstance().format(ifcc); readingTextView.setText(mContext.getString(R.string.mmol_mol_value, reading)); } datetimeTextView.setText(presenter.convertDate(hb1acDateTimeArray.get(position))); diff --git a/app/src/main/java/org/glucosio/android/fragment/OverviewFragment.java b/app/src/main/java/org/glucosio/android/fragment/OverviewFragment.java index 545b5f0c..7b55abdf 100644 --- a/app/src/main/java/org/glucosio/android/fragment/OverviewFragment.java +++ b/app/src/main/java/org/glucosio/android/fragment/OverviewFragment.java @@ -68,6 +68,7 @@ import org.glucosio.android.tools.TipsManager; import org.glucosio.android.view.OverviewView; +import java.text.NumberFormat; import java.util.ArrayList; import java.util.List; @@ -663,7 +664,8 @@ private void loadLastReading() { } else { GlucosioConverter converter = new GlucosioConverter(); String mgdl = presenter.getLastReading(); - String reading = String.valueOf(converter.glucoseToMmolL(Double.parseDouble(mgdl))); + double mmol = converter.glucoseToMmolL(Double.parseDouble(mgdl)); + String reading = NumberFormat.getInstance().format(mmol); lastReadingTextView.setText(getString(R.string.mmol_L_value, reading)); } diff --git a/app/src/main/java/org/glucosio/android/object/A1cEstimate.java b/app/src/main/java/org/glucosio/android/object/A1cEstimate.java index 384b22f0..4c780f41 100644 --- a/app/src/main/java/org/glucosio/android/object/A1cEstimate.java +++ b/app/src/main/java/org/glucosio/android/object/A1cEstimate.java @@ -2,6 +2,8 @@ import org.glucosio.android.tools.GlucosioConverter; +import java.text.NumberFormat; + public class A1cEstimate { private double value; private String month; @@ -29,6 +31,6 @@ public void setMonth(String month) { public String getGlucoseAverage() { GlucosioConverter conveter = new GlucosioConverter(); - return conveter.a1cToGlucose(value) + ""; + return NumberFormat.getInstance().format(conveter.a1cToGlucose(value)); } } From 749fd16b4aa10e9b779739b6ec580e53b761cf18 Mon Sep 17 00:00:00 2001 From: Markus Kaindl Date: Fri, 14 Oct 2016 10:26:34 +0200 Subject: [PATCH 51/82] Improve FreeStyle Libre support (#306) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Updated build gradle to 2.2.0-rc1 from beta * Add labels on reminders. * Add label on reminder notification. * Updated deprecated comment from WebviewClient * Moved URLs as fields * Extracted some methods and leaved the code cleaner * Created basic network connectivity * Extracted external glucosio links to separate class * Create and improved the basic network availability implementation * Refactored the LicenseActivity: - Made a presenter - Some basic interaction tests * Applied some format * Renamed to ExternalLinkActivity * Dialog made not cancelable * Typo fix for preferences terms * Initialized map with predefined 3 elements * Created launcher methodˆ * Replaced old call to Terms * Replaced old call to Terms on HelloActivity * Replaced all old called with the new launch method * Created extractor method for extracting title and url from intent extra * Removed obsolete tests and changed behaviour for presenter * FreestyleLibre: divide raw value by 8.5 xdrip+/LimiTTer are dividing by 8.5, seems to work good for many people there, including me * FreesyleLibre: use latest value We wanted to use the latest history value, but used the oldest one, because array is filled from newest to oldest Also we should use trend values instead of history values, as the newest history value can be up to 15 minutes old * Added new strings. Fix label layout. * Automatic translation import (build 957). * - Added annotations for non null parameters - Replaced empty string checks with Android classes - Private method for extra extracting * Round the glucose value before converting to int * Fixed message for evening case * Removed unnecessary local variable * Allow comma as decimal separator when adding Glucose reading * Added contributor credits * Set locale back to default after tests in ReadingToolsTest * Refactor AddReadingPresenter * Cleaning some codacy useful warnings (#310) * Removing unused variables and fields, inlining fields used once, minor improvements * Removed unused misleading badge * Remove categories creaition from assistant (fix #245) (#308) * Removed unused functionality, introduced butterknife, removed categories mentioning and first tests for fragment * Removed unused field and minor cleanup * Removed cardview since it is not appropriate here * Removed whitespace * Added test for adapter * Simplified adapter instantiation * Added test for presenter --- .../glucosio/android/activity/FreestyleLibreActivity.java | 6 +++--- .../main/java/org/glucosio/android/tools/AlgorithmUtil.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/activity/FreestyleLibreActivity.java b/app/src/main/java/org/glucosio/android/activity/FreestyleLibreActivity.java index 4da60098..f391af6c 100644 --- a/app/src/main/java/org/glucosio/android/activity/FreestyleLibreActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/FreestyleLibreActivity.java @@ -169,7 +169,7 @@ private void showReadingLayout() { // Apply values in TextViews // TODO: Add check for mmol/L - readingTextView.setText(mResult.history.get(mResult.history.size() - 1).glucose(false)); + readingTextView.setText(mResult.trend.get(0).glucose(false)); new Runnable() { @Override @@ -189,7 +189,7 @@ private void openAddGlucoseActivity() { // Start AddGlucose Activity passing the reading value Intent intent = new Intent(getApplicationContext(), AddGlucoseActivity.class); Bundle bundle = new Bundle(); - String currentGlucose = mResult.history.get(mResult.history.size() - 1).glucose(false); + String currentGlucose = mResult.trend.get(0).glucose(false); bundle.putString("reading", currentGlucose + ""); intent.putExtras(bundle); startActivity(intent); @@ -271,4 +271,4 @@ private String bytesToHexString(byte[] src) { return builder.toString(); } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/glucosio/android/tools/AlgorithmUtil.java b/app/src/main/java/org/glucosio/android/tools/AlgorithmUtil.java index a2744f20..f3491c89 100644 --- a/app/src/main/java/org/glucosio/android/tools/AlgorithmUtil.java +++ b/app/src/main/java/org/glucosio/android/tools/AlgorithmUtil.java @@ -44,7 +44,7 @@ public static String format(Date date) { } private static int getGlucose(byte[] bytes) { - return ((256 * (bytes[0] & 0xFF) + (bytes[1] & 0xFF)) & 0x3FFF) / 10; + return (int)Math.round(((256 * (bytes[0] & 0xFF) + (bytes[1] & 0xFF)) & 0x0FFF) / 8.5); } public interface AlertRule { From 1296617bdf8b14a43948640f9ac8b42fed8ab334 Mon Sep 17 00:00:00 2001 From: paolorotolo Date: Fri, 14 Oct 2016 10:55:35 +0200 Subject: [PATCH 52/82] Fix mmol edit bug. --- .../org/glucosio/android/activity/AddGlucoseActivity.java | 6 +++++- .../org/glucosio/android/presenter/AddGlucosePresenter.java | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java b/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java index 1f721d85..bb559fe0 100644 --- a/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java @@ -119,7 +119,11 @@ public void onNothingChosen(View labelledSpinner, AdapterView adapterView) { if (this.isEditing()) { setTitle(R.string.title_activity_add_glucose_edit); GlucoseReading readingToEdit = presenter.getGlucoseReadingById(this.getEditId()); - readingTextView.setText(readingToEdit.getReading() + ""); + if (presenter.getUnitMeasuerement().equals("mg/dL")) { + readingTextView.setText(String.valueOf(readingToEdit.getReading())); + } else { + readingTextView.setText(String.valueOf(presenter.convertToMmol(readingToEdit.getReading()))); + } notesEditText.setText(readingToEdit.getNotes()); cal.setTime(readingToEdit.getCreated()); this.getAddDateTextView().setText(dateTime.getDate(cal)); diff --git a/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java b/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java index fffd0975..43906962 100644 --- a/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java @@ -49,6 +49,7 @@ public AddGlucosePresenter(AddGlucoseActivity addGlucoseActivity) { this.activity = addGlucoseActivity; dB = new DatabaseHandler(addGlucoseActivity.getApplicationContext()); rTools = new ReadingTools(); + converter = new GlucosioConverter(); } public void updateSpinnerTypeTime() { @@ -99,7 +100,6 @@ private boolean createReading(String type, String notes, long oldId, Date finalD if ("mg/dL".equals(getUnitMeasuerement())) { readingValue = number.intValue(); } else { - converter = new GlucosioConverter(); readingValue = converter.glucoseToMgDl(number.doubleValue()); } GlucoseReading gReading = new GlucoseReading(readingValue, type, finalDateTime, notes); @@ -111,6 +111,10 @@ private boolean createReading(String type, String notes, long oldId, Date finalD return isReadingAdded; } + public double convertToMmol(int mgDl) { + return converter.glucoseToMmolL(mgDl); + } + public Integer retrieveSpinnerID(String measuredTypeText, List measuredTypelist) { int measuredId = 0; boolean isFound = false; From 590d429fcbbb58663817e39df899cf66dbf33f96 Mon Sep 17 00:00:00 2001 From: paolorotolo Date: Fri, 14 Oct 2016 11:18:37 +0200 Subject: [PATCH 53/82] Fix A1C conversion bug. --- .../android/presenter/A1CCalculatorPresenter.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/glucosio/android/presenter/A1CCalculatorPresenter.java b/app/src/main/java/org/glucosio/android/presenter/A1CCalculatorPresenter.java index b563ce58..03ea07fd 100644 --- a/app/src/main/java/org/glucosio/android/presenter/A1CCalculatorPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/A1CCalculatorPresenter.java @@ -72,7 +72,14 @@ public void checkGlucoseUnit() { } public void saveA1C(double a1c) { - HB1ACReading a1cReading = new HB1ACReading(a1c, new Date()); + User user = dbHandler.getUser(1); + double finalA1c = a1c; + if (!"percentage".equals(user.getPreferred_unit_a1c())) { + GlucosioConverter converter = new GlucosioConverter(); + finalA1c = converter.a1cIfccToNgsp(a1c); + } + + HB1ACReading a1cReading = new HB1ACReading(finalA1c, new Date()); dbHandler.addHB1ACReading(a1cReading); activity.finish(); } From d269a630160dd4777c0c91c78c49816c8e04ee31 Mon Sep 17 00:00:00 2001 From: raacker Date: Fri, 14 Oct 2016 21:15:57 +0900 Subject: [PATCH 54/82] Support 'Almost' translated languages This application is used in various countries. And in Crowdin, some languages are already 100% translated or almost translated. But Glucosio is still support only English. These features are enhancement of it. And also, you can find Crowdin's API for translation status. But there are too many non-translated languages and it was useless to get it's all data. The API needs Auth key so until it is cleared, just maintaining available strings manually would be better. I already made code, but I will just keep it. - Add available_languages.xml of 'almost' translated languages - Add updateLocale code on MainPresenter when there is already user profile in DB - Swap two codes order of calling MainPresenter for update MainActivities in start - Add localeHelper variable for MainActivity - Changed getLocalesWithTranslation to available languages - Fixed bug in build.gradle. It should contain one more backslash --- app/build.gradle | 2 +- .../android/activity/MainActivity.java | 7 ++- .../android/presenter/MainPresenter.java | 6 +- .../glucosio/android/tools/LocaleHelper.java | 36 ++++-------- .../main/res/values/available_languages.xml | 56 +++++++++++++++++++ .../android/tools/LocaleHelperTest.java | 2 +- build.gradle | 2 +- 7 files changed, 81 insertions(+), 30 deletions(-) create mode 100644 app/src/main/res/values/available_languages.xml diff --git a/app/build.gradle b/app/build.gradle index 8686ebd4..9dadb6f1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -171,7 +171,7 @@ def getAllLocales() { fileTree("src/main/res").visit { FileVisitDetails details -> if (details.file.path.endsWith("strings.xml")) { - def languageCode = details.file.parent.tokenize('/').last().replaceAll('values-', '').replaceAll('-r', '-') + def languageCode = details.file.parent.tokenize('/\\').last().replaceAll('values-', '').replaceAll('-r', '-') languageCode = (languageCode == "values") ? "en" : languageCode; foundLocales.append("\"").append(languageCode).append("\"").append(",") } diff --git a/app/src/main/java/org/glucosio/android/activity/MainActivity.java b/app/src/main/java/org/glucosio/android/activity/MainActivity.java index 7336060c..bd0b9e24 100644 --- a/app/src/main/java/org/glucosio/android/activity/MainActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/MainActivity.java @@ -69,6 +69,7 @@ import org.glucosio.android.db.DatabaseHandler; import org.glucosio.android.presenter.ExportPresenter; import org.glucosio.android.presenter.MainPresenter; +import org.glucosio.android.tools.LocaleHelper; import org.glucosio.android.view.ExportView; import java.util.Calendar; @@ -93,6 +94,7 @@ public class MainActivity extends AppCompatActivity implements DatePickerDialog. private TextView exportDialogDateTo; private View bottomSheetAddDialogView; private TabLayout tabLayout; + private LocaleHelper localeHelper; @Override protected void onCreate(Bundle savedInstanceState) { @@ -100,8 +102,8 @@ protected void onCreate(Bundle savedInstanceState) { GlucosioApplication application = (GlucosioApplication) getApplication(); - setContentView(R.layout.activity_main); initPresenters(application); + setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.activity_main_toolbar); tabLayout = (TabLayout) findViewById(R.id.activity_main_tab_layout); @@ -265,6 +267,7 @@ private void openRemindersActivity() { private void initPresenters(GlucosioApplication application) { final DatabaseHandler dbHandler = application.getDBHandler(); + localeHelper = new LocaleHelper(); presenter = new MainPresenter(this, dbHandler); exportPresenter = new ExportPresenter(this, dbHandler); } @@ -571,6 +574,8 @@ public Toolbar getToolbar() { return (Toolbar) findViewById(R.id.activity_main_toolbar); } + public LocaleHelper getLocaleHelper() { return localeHelper; } + private void hideFabAnimation() { final View fab = findViewById(R.id.activity_main_fab_add_reading); fab.animate() diff --git a/app/src/main/java/org/glucosio/android/presenter/MainPresenter.java b/app/src/main/java/org/glucosio/android/presenter/MainPresenter.java index 7d8aaa2a..8717c00d 100644 --- a/app/src/main/java/org/glucosio/android/presenter/MainPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/MainPresenter.java @@ -31,10 +31,14 @@ public class MainPresenter { public MainPresenter(MainActivity mainActivity, DatabaseHandler databaseHandler) { dB = databaseHandler; - Log.i("msg::", "initiated db object"); + Log.i("msg::", "initiated dB object"); if (dB.getUser(1) == null) { // if user doesn't exists start hello activity mainActivity.startHelloActivity(); + } else { + // If user already exists, update user's preferred language and recreate MainActivity + mainActivity.getLocaleHelper().updateLanguage(mainActivity, + dB.getUser(1).getPreferred_language()); } } diff --git a/app/src/main/java/org/glucosio/android/tools/LocaleHelper.java b/app/src/main/java/org/glucosio/android/tools/LocaleHelper.java index 29ea98d9..27d0db5f 100644 --- a/app/src/main/java/org/glucosio/android/tools/LocaleHelper.java +++ b/app/src/main/java/org/glucosio/android/tools/LocaleHelper.java @@ -8,7 +8,6 @@ import org.glucosio.android.BuildConfig; import org.glucosio.android.R; - import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; @@ -46,6 +45,7 @@ public void updateLanguage(@NonNull final Context context, @NonNull final String // Change locale settings in the app. DisplayMetrics dm = res.getDisplayMetrics(); Configuration conf = res.getConfiguration(); + // TODO(raacker): deprecated. change to setLocale(). It needs to be set minSdk to 17. Configure project's minSdk first conf.locale = locale; res.updateConfiguration(conf, dm); @@ -54,35 +54,20 @@ public void updateLanguage(@NonNull final Context context, @NonNull final String @NonNull public List getLocalesWithTranslation(final Resources resources) { - String[] languages = BuildConfig.TRANSLATION_ARRAY; + String[] languageList = BuildConfig.TRANSLATION_ARRAY; Set availableLanguagesSet = new HashSet<>(); - // We always support english - availableLanguagesSet.add("en"); - - // Get english string to confront - // I know, it's a weird workaround - // Sorry :/ - String englishString = "Automatic backup"; - for (String localString : languages) { - // For each locale, check if we have translations - Configuration conf = resources.getConfiguration(); - Locale savedLocale = conf.locale; - conf.locale = getLocale(localString); - resources.updateConfiguration(conf, null); + // Glucosio support English as default + availableLanguagesSet.add("en"); - // Retrieve an example string from this locale - String localizedString = resources.getString(R.string.activity_backup_drive_automatic); + String[] translatedLanguages = resources.getStringArray(R.array.available_languages); + Set translatedLanguageSet = new HashSet<>(); - if (!englishString.equals(localizedString)) { - // if english string is not the same of localized one - // a translation is available - availableLanguagesSet.add(localString); - } + Collections.addAll(translatedLanguageSet, translatedLanguages); - // restore original locale - conf.locale = savedLocale; - resources.updateConfiguration(conf, null); + for (String language : languageList) { + if (translatedLanguageSet.contains(language.substring(0, 5))) + availableLanguagesSet.add(language); } List availableLanguagesList = new ArrayList<>(availableLanguagesSet); @@ -91,6 +76,7 @@ public List getLocalesWithTranslation(final Resources resources) { } public Locale getDeviceLocale() { + // TODO(raacker): deprecated. change to getLocale(). It needs to be set minSdk to 17. Configure project's minSdk first return Resources.getSystem().getConfiguration().locale; } } diff --git a/app/src/main/res/values/available_languages.xml b/app/src/main/res/values/available_languages.xml new file mode 100644 index 00000000..959b5d96 --- /dev/null +++ b/app/src/main/res/values/available_languages.xml @@ -0,0 +1,56 @@ + + + + en-US + en + ko-KR + ca-ES + nl-NL + gl-ES + it-IT + lo-LA + ru-RU + sl-Sl + fr-FR + de-DE + pt-BR + es-ES + es-CL + es-MX + es-VE + ga-IE + en-GB + hr-HR + zh-TW + zh-CN + ar-SA + sq-AL + ja-JP + + + \ No newline at end of file diff --git a/app/src/test/java/org/glucosio/android/tools/LocaleHelperTest.java b/app/src/test/java/org/glucosio/android/tools/LocaleHelperTest.java index 8c18e53e..51f1a049 100644 --- a/app/src/test/java/org/glucosio/android/tools/LocaleHelperTest.java +++ b/app/src/test/java/org/glucosio/android/tools/LocaleHelperTest.java @@ -14,7 +14,7 @@ public class LocaleHelperTest extends RobolectricTest { private LocaleHelper helper = new LocaleHelper(); @Test - public void ShouldReturnAtLEastEnglish_WhenAsked() throws Exception { + public void ShouldReturnAtLeastEnglish_WhenAsked() throws Exception { final Resources resources = RuntimeEnvironment.application.getResources(); final List localesWithTranslation = helper.getLocalesWithTranslation(resources); diff --git a/build.gradle b/build.gradle index 74346849..689c341f 100644 --- a/build.gradle +++ b/build.gradle @@ -27,7 +27,7 @@ buildscript { dependencies { // TODO: Please revert to a stable gradle version before releasing on prod // Alpha is required in devel to use Instant Run and speed up development process - classpath 'com.android.tools.build:gradle:2.2.0' + classpath 'com.android.tools.build:gradle:2.2.1' classpath 'com.google.gms:google-services:3.0.0' classpath 'io.realm:realm-gradle-plugin:1.1.1' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' From df16d32dec0781361a36bfe4142b505cbe0a1a29 Mon Sep 17 00:00:00 2001 From: paolorotolo Date: Sat, 15 Oct 2016 12:44:58 +0200 Subject: [PATCH 55/82] Fix code duplication. --- .../org/glucosio/android/activity/AddGlucoseActivity.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java b/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java index bb559fe0..be06a131 100644 --- a/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java @@ -119,11 +119,15 @@ public void onNothingChosen(View labelledSpinner, AdapterView adapterView) { if (this.isEditing()) { setTitle(R.string.title_activity_add_glucose_edit); GlucoseReading readingToEdit = presenter.getGlucoseReadingById(this.getEditId()); + + String readingString; if (presenter.getUnitMeasuerement().equals("mg/dL")) { - readingTextView.setText(String.valueOf(readingToEdit.getReading())); + readingString = String.valueOf(readingToEdit.getReading()); } else { - readingTextView.setText(String.valueOf(presenter.convertToMmol(readingToEdit.getReading()))); + readingString = String.valueOf(presenter.convertToMmol(readingToEdit.getReading())); } + + readingTextView.setText(readingString); notesEditText.setText(readingToEdit.getNotes()); cal.setTime(readingToEdit.getCreated()); this.getAddDateTextView().setText(dateTime.getDate(cal)); From b589f8990229779e9b2b0988159ffa0bedf01521 Mon Sep 17 00:00:00 2001 From: paolorotolo Date: Wed, 26 Oct 2016 22:19:01 +0200 Subject: [PATCH 56/82] Target API 25. Add App Shortcuts. --- app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 3 ++ app/src/main/res/xml/shortcuts.xml | 51 ++++++++++++++++++++++++++++++ build.gradle | 6 ++-- 4 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 app/src/main/res/xml/shortcuts.xml diff --git a/app/build.gradle b/app/build.gradle index 9dadb6f1..f7e68ac9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,7 +24,7 @@ apply plugin: 'com.neenbedankt.android-apt' apply plugin: 'jacoco' android { - compileSdkVersion 24 + compileSdkVersion 25 buildToolsVersion buildToolsVer lintOptions { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b5a96fcd..9b745836 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -253,6 +253,9 @@ + diff --git a/app/src/main/res/xml/shortcuts.xml b/app/src/main/res/xml/shortcuts.xml new file mode 100644 index 00000000..5c88c59f --- /dev/null +++ b/app/src/main/res/xml/shortcuts.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 689c341f..6cf04163 100644 --- a/build.gradle +++ b/build.gradle @@ -27,7 +27,7 @@ buildscript { dependencies { // TODO: Please revert to a stable gradle version before releasing on prod // Alpha is required in devel to use Instant Run and speed up development process - classpath 'com.android.tools.build:gradle:2.2.1' + classpath 'com.android.tools.build:gradle:2.2.2' classpath 'com.google.gms:google-services:3.0.0' classpath 'io.realm:realm-gradle-plugin:1.1.1' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' @@ -43,9 +43,9 @@ allprojects { jcenter() } - ext.buildToolsVer = '24.0.0' + ext.buildToolsVer = '25.0.0' - ext.androidSupportVer = '24.2.1' + ext.androidSupportVer = '25.0.0' ext.googlePlayServicesVer = '9.4.0' ext.butterKnifeVer = '8.0.1' From 188e86d887f0967ccfca74ca693400f04c3b973e Mon Sep 17 00:00:00 2001 From: paolorotolo Date: Thu, 27 Oct 2016 21:04:34 +0200 Subject: [PATCH 57/82] Fix App Shortcuts. --- .../res/drawable/add_circle_a1c_shortcut.xml | 16 ++++++++++ .../add_circle_cholesterol_shortcut.xml | 14 +++++++++ .../drawable/add_circle_glucose_shortcut.xml | 14 +++++++++ .../drawable/add_circle_ketones_shortcut.xml | 14 +++++++++ .../drawable/add_circle_pressure_shortcut.xml | 14 +++++++++ .../drawable/add_circle_weight_shortcut.xml | 14 +++++++++ .../main/res/drawable/ic_add_white_24dp.xml | 9 ++++++ app/src/main/res/xml/shortcuts.xml | 30 +++++++++---------- 8 files changed, 110 insertions(+), 15 deletions(-) create mode 100644 app/src/main/res/drawable/add_circle_a1c_shortcut.xml create mode 100644 app/src/main/res/drawable/add_circle_cholesterol_shortcut.xml create mode 100644 app/src/main/res/drawable/add_circle_glucose_shortcut.xml create mode 100644 app/src/main/res/drawable/add_circle_ketones_shortcut.xml create mode 100644 app/src/main/res/drawable/add_circle_pressure_shortcut.xml create mode 100644 app/src/main/res/drawable/add_circle_weight_shortcut.xml create mode 100644 app/src/main/res/drawable/ic_add_white_24dp.xml diff --git a/app/src/main/res/drawable/add_circle_a1c_shortcut.xml b/app/src/main/res/drawable/add_circle_a1c_shortcut.xml new file mode 100644 index 00000000..2af5a031 --- /dev/null +++ b/app/src/main/res/drawable/add_circle_a1c_shortcut.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/add_circle_cholesterol_shortcut.xml b/app/src/main/res/drawable/add_circle_cholesterol_shortcut.xml new file mode 100644 index 00000000..8527fd82 --- /dev/null +++ b/app/src/main/res/drawable/add_circle_cholesterol_shortcut.xml @@ -0,0 +1,14 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/add_circle_glucose_shortcut.xml b/app/src/main/res/drawable/add_circle_glucose_shortcut.xml new file mode 100644 index 00000000..da90840a --- /dev/null +++ b/app/src/main/res/drawable/add_circle_glucose_shortcut.xml @@ -0,0 +1,14 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/add_circle_ketones_shortcut.xml b/app/src/main/res/drawable/add_circle_ketones_shortcut.xml new file mode 100644 index 00000000..24541a1a --- /dev/null +++ b/app/src/main/res/drawable/add_circle_ketones_shortcut.xml @@ -0,0 +1,14 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/add_circle_pressure_shortcut.xml b/app/src/main/res/drawable/add_circle_pressure_shortcut.xml new file mode 100644 index 00000000..3c4ad88d --- /dev/null +++ b/app/src/main/res/drawable/add_circle_pressure_shortcut.xml @@ -0,0 +1,14 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/add_circle_weight_shortcut.xml b/app/src/main/res/drawable/add_circle_weight_shortcut.xml new file mode 100644 index 00000000..24738a72 --- /dev/null +++ b/app/src/main/res/drawable/add_circle_weight_shortcut.xml @@ -0,0 +1,14 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add_white_24dp.xml b/app/src/main/res/drawable/ic_add_white_24dp.xml new file mode 100644 index 00000000..88b91cd5 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_white_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/xml/shortcuts.xml b/app/src/main/res/xml/shortcuts.xml index 5c88c59f..23807e25 100644 --- a/app/src/main/res/xml/shortcuts.xml +++ b/app/src/main/res/xml/shortcuts.xml @@ -2,11 +2,11 @@ + android:shortcutLongLabel="@string/fab_glucose" + android:shortcutShortLabel="@string/fab_glucose"> + android:shortcutLongLabel="@string/fab_weight" + android:shortcutShortLabel="@string/fab_weight"> + android:shortcutLongLabel="@string/fab_HB1AC" + android:shortcutShortLabel="@string/fab_HB1AC"> + android:shortcutLongLabel="@string/fab_pressure" + android:shortcutShortLabel="@string/fab_pressure"> Date: Thu, 27 Oct 2016 21:10:08 +0200 Subject: [PATCH 58/82] Releasing Glucosio 1.3.0 --- app/build.gradle | 6 +++--- wear/build.gradle | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f7e68ac9..ac63ad4c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -33,9 +33,9 @@ android { defaultConfig { minSdkVersion 16 - targetSdkVersion 24 - versionCode 35 - versionName '1.2.1' + targetSdkVersion 25 + versionCode 36 + versionName '1.3.0' applicationId 'org.glucosio.android' vectorDrawables.useSupportLibrary = true diff --git a/wear/build.gradle b/wear/build.gradle index d7bf3a68..58a8948b 100644 --- a/wear/build.gradle +++ b/wear/build.gradle @@ -22,15 +22,15 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 24 + compileSdkVersion 25 buildToolsVersion buildToolsVer defaultConfig { applicationId "org.glucosio.android" minSdkVersion 21 - targetSdkVersion 24 - versionCode 35 - versionName '1.2.1' + targetSdkVersion 25 + versionCode 36 + versionName '1.3.0' } buildTypes { debug { From dafbaa7856702c5c2045cc1ae3f247842dbcd89a Mon Sep 17 00:00:00 2001 From: Eugen Martynov Date: Fri, 28 Oct 2016 14:57:22 +0200 Subject: [PATCH 59/82] Fixed for StringIndexOutOfBoundsException --- app/src/main/java/org/glucosio/android/tools/LocaleHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/glucosio/android/tools/LocaleHelper.java b/app/src/main/java/org/glucosio/android/tools/LocaleHelper.java index 27d0db5f..dc2cc8c5 100644 --- a/app/src/main/java/org/glucosio/android/tools/LocaleHelper.java +++ b/app/src/main/java/org/glucosio/android/tools/LocaleHelper.java @@ -66,7 +66,7 @@ public List getLocalesWithTranslation(final Resources resources) { Collections.addAll(translatedLanguageSet, translatedLanguages); for (String language : languageList) { - if (translatedLanguageSet.contains(language.substring(0, 5))) + if (translatedLanguageSet.contains(language)) availableLanguagesSet.add(language); } From d7537bfce8721f1f2762bb091f6f29b58faafc32 Mon Sep 17 00:00:00 2001 From: Eugen Martynov Date: Fri, 28 Oct 2016 15:11:19 +0200 Subject: [PATCH 60/82] Trying to fix travis --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 76097133..450daa9c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,8 +6,8 @@ jdk: android: components: - tools - - build-tools-24.0.0 - - android-24 + - build-tools-25.0.0 + - android-25 - extra-android-support - extra-google-google_play_services - extra-android-m2repository From f36f89008cae5205ea9fa7d9804ccf9beef0f38a Mon Sep 17 00:00:00 2001 From: paolorotolo Date: Fri, 28 Oct 2016 16:37:02 +0200 Subject: [PATCH 61/82] Releasing Glucosio 1.3.0 (38) --- app/build.gradle | 2 +- app/src/main/res/values/strings.xml | 2 +- wear/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ac63ad4c..bfa70c49 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -34,7 +34,7 @@ android { defaultConfig { minSdkVersion 16 targetSdkVersion 25 - versionCode 36 + versionCode 38 versionName '1.3.0' applicationId 'org.glucosio.android' diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e8baa9d8..4e5727f0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -159,7 +159,7 @@ About Here be dragons :/ These features are experimental and may not fully work and are for early testing by users. Remember that you can shake your phone to send us feedback. - 1.2.1 (Chutney) + 1.3.0 (Chutney) Version Coming soon... Terms of use diff --git a/wear/build.gradle b/wear/build.gradle index 58a8948b..02c235f5 100644 --- a/wear/build.gradle +++ b/wear/build.gradle @@ -29,7 +29,7 @@ android { applicationId "org.glucosio.android" minSdkVersion 21 targetSdkVersion 25 - versionCode 36 + versionCode 38 versionName '1.3.0' } buildTypes { From 648592b02aac6d69ea40b3e2182f6bc584d15b89 Mon Sep 17 00:00:00 2001 From: Ghazghkull Date: Sat, 29 Oct 2016 22:30:53 +0200 Subject: [PATCH 62/82] Solving the CSV Export problem on Samsung S6 --- .../android/presenter/ExportPresenter.java | 2 +- .../glucosio/android/tools/ReadingToCSV.java | 121 ++++++++++-------- 2 files changed, 67 insertions(+), 56 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/presenter/ExportPresenter.java b/app/src/main/java/org/glucosio/android/presenter/ExportPresenter.java index 1a5120ff..e2a81195 100644 --- a/app/src/main/java/org/glucosio/android/presenter/ExportPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/ExportPresenter.java @@ -105,7 +105,7 @@ protected String doInBackground(Void... params) { if (dirExists()) { Log.i("glucosio", "Dir exists"); - return ReadingToCSV.createCSVFile(mActivity, realm, readings, preferredUnit); + return new ReadingToCSV().createCSVFile(mActivity, realm, readings, preferredUnit); } else { Log.i("glucosio", "Dir NOT exists"); return null; diff --git a/app/src/main/java/org/glucosio/android/tools/ReadingToCSV.java b/app/src/main/java/org/glucosio/android/tools/ReadingToCSV.java index 958bcbe3..4d5291d4 100644 --- a/app/src/main/java/org/glucosio/android/tools/ReadingToCSV.java +++ b/app/src/main/java/org/glucosio/android/tools/ReadingToCSV.java @@ -36,91 +36,102 @@ public final class ReadingToCSV { - public static String createCSVFile(Context context, Realm realm, final List readings, String um) { + public String createCSVFile(Context context, Realm realm, final List readings, String um) { try { - final File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/glucosio", "glucosio_export_ " + System.currentTimeMillis() / 1000 + ".csv"); + File file= null; final File sd = Environment.getExternalStorageDirectory(); if (sd.canWrite()) { - FileOutputStream fileOutputStream = new FileOutputStream(file); - OutputStreamWriter osw = new OutputStreamWriter(fileOutputStream); + file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/glucosio", "glucosio_export_ " + System.currentTimeMillis() / 1000 + ".csv"); - // CSV Structure - // Date | Time | Concentration | Unit | Measured | Notes - osw.append(context.getResources().getString(R.string.dialog_add_date)); - osw.append(','); + FileOutputStream fileOutputStream = null; + OutputStreamWriter osw = null; - osw.append(context.getResources().getString(R.string.dialog_add_time)); - osw.append(','); + try { + fileOutputStream = new FileOutputStream(file); + osw = new OutputStreamWriter(fileOutputStream); - osw.append(context.getResources().getString(R.string.dialog_add_concentration)); - osw.append(','); + // CSV Structure + // Date | Time | Concentration | Unit | Measured | Notes + osw.append(context.getResources().getString(R.string.dialog_add_date)); + osw.append(','); - osw.append(context.getResources().getString(R.string.helloactivity_spinner_preferred_glucose_unit)); - osw.append(','); + osw.append(context.getResources().getString(R.string.dialog_add_time)); + osw.append(','); - osw.append(context.getResources().getString(R.string.dialog_add_measured)); - osw.append(','); + osw.append(context.getResources().getString(R.string.dialog_add_concentration)); + osw.append(','); - osw.append(context.getResources().getString(R.string.dialog_add_notes)); - osw.append('\n'); + osw.append(context.getResources().getString(R.string.helloactivity_spinner_preferred_glucose_unit)); + osw.append(','); + osw.append(context.getResources().getString(R.string.dialog_add_measured)); + osw.append(','); - FormatDateTime dateTool = new FormatDateTime(context); + osw.append(context.getResources().getString(R.string.dialog_add_notes)); + osw.append('\n'); - // Concentration | Measured | Date | Time | Notes | Unit of Measurement - if ("mg/dL".equals(um)) { - for (int i = 0; i < readings.size(); i++) { - GlucoseReading reading = readings.get(i); - osw.append(dateTool.convertRawDate(reading.getCreated() + "")); - osw.append(','); - osw.append(dateTool.convertRawTime(reading.getCreated() + "")); - osw.append(','); + FormatDateTime dateTool = new FormatDateTime(context); - osw.append(String.valueOf(reading.getReading())); - osw.append(','); + // Concentration | Measured | Date | Time | Notes | Unit of Measurement + if ("mg/dL".equals(um)) { + for (int i = 0; i < readings.size(); i++) { + GlucoseReading reading = readings.get(i); + osw.append(dateTool.convertRawDate(reading.getCreated() + "")); + osw.append(','); - osw.append("mg/dL"); - osw.append(','); + osw.append(dateTool.convertRawTime(reading.getCreated() + "")); + osw.append(','); - osw.append(String.valueOf(reading.getReading_type())); - osw.append(','); + osw.append(String.valueOf(reading.getReading())); + osw.append(','); - osw.append(reading.getNotes()); - osw.append('\n'); + osw.append("mg/dL"); + osw.append(','); - } - } else { - GlucosioConverter converter = new GlucosioConverter(); + osw.append(String.valueOf(reading.getReading_type())); + osw.append(','); + + osw.append(reading.getNotes()); + osw.append('\n'); + + } + } else { + GlucosioConverter converter = new GlucosioConverter(); - for (int i = 0; i < readings.size(); i++) { - GlucoseReading reading = readings.get(i); - osw.append(dateTool.convertRawDate(reading.getCreated() + "")); - osw.append(','); + for (int i = 0; i < readings.size(); i++) { + GlucoseReading reading = readings.get(i); + osw.append(dateTool.convertRawDate(reading.getCreated() + "")); + osw.append(','); - osw.append(dateTool.convertRawTime(reading.getCreated() + "")); - osw.append(','); + osw.append(dateTool.convertRawTime(reading.getCreated() + "")); + osw.append(','); - osw.append(converter.glucoseToMmolL(reading.getReading()) + ""); - osw.append(','); + osw.append(converter.glucoseToMmolL(reading.getReading()) + ""); + osw.append(','); - osw.append("mmol/L"); - osw.append(','); + osw.append("mmol/L"); + osw.append(','); - osw.append(reading.getReading_type() + ""); - osw.append(','); + osw.append(reading.getReading_type() + ""); + osw.append(','); - osw.append(reading.getNotes()); - osw.append('\n'); + osw.append(reading.getNotes()); + osw.append('\n'); + } } + osw.flush(); + } catch (Exception e) { + Log.e("Glucosio", "Error exporting readings", e); + } finally { + if (osw != null) osw.close(); + if (fileOutputStream != null) fileOutputStream.close(); } - osw.flush(); - osw.close(); Log.i("Glucosio", "Done exporting readings"); } realm.close(); - return file.getPath(); + return file == null ? null : file.getPath(); } catch (Exception e) { realm.close(); e.printStackTrace(); From 2c060a8cb9ea9ba05a39f98b62eccef894c3f9f1 Mon Sep 17 00:00:00 2001 From: Ghazghkull Date: Sun, 30 Oct 2016 08:07:00 +0100 Subject: [PATCH 63/82] Simplified ReadingToCSV code and added Unit Testing --- app/build.gradle | 5 + .../android/presenter/ExportPresenter.java | 2 +- .../android/tools/FormatDateTime.java | 26 +-- .../glucosio/android/tools/ReadingToCSV.java | 104 +++++----- .../android/tools/ReadingToCSVTest.java | 190 ++++++++++++++++++ 5 files changed, 248 insertions(+), 79 deletions(-) create mode 100644 app/src/test/java/org/glucosio/android/tools/ReadingToCSVTest.java diff --git a/app/build.gradle b/app/build.gradle index bfa70c49..d61b74b1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -149,6 +149,11 @@ dependencies { } testCompile 'io.reactivex:rxjava:1.1.8' + testCompile "org.powermock:powermock-module-junit4:1.6.4" + testCompile "org.powermock:powermock-module-junit4-rule:1.6.4" + testCompile "org.powermock:powermock-api-mockito:1.6.4" + testCompile "org.powermock:powermock-classloading-xstream:1.6.4" + // Testing libraries androidTestCompile 'com.android.support.test:rules:0.4.1' androidTestCompile 'com.android.support.test:runner:0.4.1' diff --git a/app/src/main/java/org/glucosio/android/presenter/ExportPresenter.java b/app/src/main/java/org/glucosio/android/presenter/ExportPresenter.java index e2a81195..ac9ab82e 100644 --- a/app/src/main/java/org/glucosio/android/presenter/ExportPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/ExportPresenter.java @@ -105,7 +105,7 @@ protected String doInBackground(Void... params) { if (dirExists()) { Log.i("glucosio", "Dir exists"); - return new ReadingToCSV().createCSVFile(mActivity, realm, readings, preferredUnit); + return new ReadingToCSV(mActivity, preferredUnit).createCSVFile(realm, readings); } else { Log.i("glucosio", "Dir NOT exists"); return null; diff --git a/app/src/main/java/org/glucosio/android/tools/FormatDateTime.java b/app/src/main/java/org/glucosio/android/tools/FormatDateTime.java index c12c9d62..49f47ac2 100644 --- a/app/src/main/java/org/glucosio/android/tools/FormatDateTime.java +++ b/app/src/main/java/org/glucosio/android/tools/FormatDateTime.java @@ -114,23 +114,13 @@ public String convertDate(String datetime) { return finalData + ""; } - public String convertRawDate(String datetime) { - DateFormat inputFormat = new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy"); + public String convertRawDate(Date datetime) { DateFormat finalDataFormat = DateFormat.getDateInstance(DateFormat.SHORT); - Date parsed = null; - try { - parsed = inputFormat.parse(datetime); - } catch (ParseException e) { - reportToFirebase(e); - e.printStackTrace(); - } - String finalData = finalDataFormat.format(parsed); - return finalData + ""; + return finalDataFormat.format(datetime); } - public String convertRawTime(String datetime) { - DateFormat inputFormat = new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy"); + public String convertRawTime(Date datetime) { DateFormat finalTimeFormat; if (android.text.format.DateFormat.is24HourFormat(context)) { @@ -139,15 +129,7 @@ public String convertRawTime(String datetime) { finalTimeFormat = new SimpleDateFormat("hh:mm a"); } - Date parsed = null; - try { - parsed = inputFormat.parse(datetime); - } catch (ParseException e) { - reportToFirebase(e); - e.printStackTrace(); - } - String finalTime = finalTimeFormat.format(parsed); - return finalTime + ""; + return finalTimeFormat.format(datetime); } public String getCurrentTime() { diff --git a/app/src/main/java/org/glucosio/android/tools/ReadingToCSV.java b/app/src/main/java/org/glucosio/android/tools/ReadingToCSV.java index 4d5291d4..92b6c3d0 100644 --- a/app/src/main/java/org/glucosio/android/tools/ReadingToCSV.java +++ b/app/src/main/java/org/glucosio/android/tools/ReadingToCSV.java @@ -21,6 +21,7 @@ package org.glucosio.android.tools; import android.content.Context; +import android.content.res.Resources; import android.os.Environment; import android.util.Log; @@ -29,6 +30,7 @@ import java.io.File; import java.io.FileOutputStream; +import java.io.IOException; import java.io.OutputStreamWriter; import java.util.List; @@ -36,12 +38,23 @@ public final class ReadingToCSV { - public String createCSVFile(Context context, Realm realm, final List readings, String um) { + private final Context context; + private final String um; + private final FormatDateTime dateTool; + + public ReadingToCSV(Context context, String um) { + this.context = context; + this.um = um; + + this.dateTool = new FormatDateTime(context); + } + + public String createCSVFile(Realm realm, final List readings) { try { - File file= null; + File file = null; final File sd = Environment.getExternalStorageDirectory(); if (sd.canWrite()) { - file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/glucosio", "glucosio_export_ " + System.currentTimeMillis() / 1000 + ".csv"); + file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/glucosio", "glucosio_export_" + System.currentTimeMillis() / 1000 + ".csv"); FileOutputStream fileOutputStream = null; OutputStreamWriter osw = null; @@ -52,48 +65,29 @@ public String createCSVFile(Context context, Realm realm, final List() { + @Override + public String answer(InvocationOnMock invocation) throws Throwable { + return String.valueOf(invocation.getArguments()[0]); + } + }); + + when(context.getResources()).thenReturn(resources); + + File tmpDir = new File(System.getProperty("java.io.tmpdir")); + + tmpFolderForTesting = new File(tmpDir, UUID.randomUUID().toString()); + + // Create the folder for glucosio + glucosioFolder = new File(tmpFolderForTesting, "glucosio"); + glucosioFolder.mkdirs(); + + Assert.assertTrue(glucosioFolder.exists() && glucosioFolder.isDirectory()); + + mockStatic(Environment.class); + when(Environment.getExternalStorageDirectory()).thenReturn(tmpDir); + when(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)).thenReturn(tmpFolderForTesting); + } + + @After + public void clean() { + removeFolder(tmpFolderForTesting); + } + + private void removeFolder(File folder) { + if (!folder.exists() || !folder.isDirectory()) { + return; + } + final File[] files = folder.listFiles(); + if (files != null) { + for (int i = 0; i < files.length; i++) { + File f = files[i]; + if (f.isDirectory()) { + removeFolder(f); + } else { + files[i].delete(); + } + } + } + folder.delete(); + } + + @Test + public void whenNoDataGeneratesEmptyCSVWithHeader() throws IOException { + final ReadingToCSV r = createReadingToCSV("mg/dL"); + final String path = r.createCSVFile(realm, new ArrayList()); + + assertFileContentEqualsToString(path, headerAsString()); + } + + @Test + public void whenOneDataGeneratesCSVWithHeaderAndOneLine() throws IOException { + final Date created = new Date(); + + List values = new ArrayList<>(); + values.add(new GlucoseReading(80, "type", created, "notes")); + + final ReadingToCSV r = createReadingToCSV("mg/dL"); + final String path = r.createCSVFile(realm, values); + + assertFileContentEqualsToString(path, headerAsString(), valuesAsString(values.get(0), "mg/dL")); + } + + private ReadingToCSV createReadingToCSV(String um) { + return new ReadingToCSV(context, um); + } + + private String headerAsString() { + return new StringBuilder().append(R.string.dialog_add_date) + .append(',') + .append(R.string.dialog_add_time) + .append(',') + .append(R.string.dialog_add_concentration) + .append(',') + .append(R.string.helloactivity_spinner_preferred_glucose_unit) + .append(',') + .append(R.string.dialog_add_measured) + .append(',') + .append(R.string.dialog_add_notes) + .toString(); + } + + private String valuesAsString(GlucoseReading reading, String units) { + return new StringBuilder().append(dateTool.convertRawDate(reading.getCreated())) + .append(',') + .append(dateTool.convertRawTime(reading.getCreated())) + .append(',') + .append(reading.getReading()) + .append(',') + .append(units) + .append(',') + .append(reading.getReading_type()) + .append(',') + .append(reading.getNotes()) + .toString(); + } + + private void assertFileContentEqualsToString(String path, String... expectedValues) throws IOException { + Assert.assertNotNull(path); + + final File file = new File(path); + Assert.assertTrue(file.exists() && file.isFile()); + + InputStream is = new FileInputStream(file); + try { + Collection lines = IOUtil.readLines(is); + + Assert.assertEquals(expectedValues.length, lines.size()); + + Iterator iterator = lines.iterator(); + + for (int i = 0; i < lines.size(); i++) { + Assert.assertTrue(iterator.hasNext()); + Assert.assertEquals(expectedValues[i], iterator.next()); + } + + } finally { + IOUtil.closeQuietly(is); + } + } + +} From 716d78a06781d2c7654602d9e392e6f3b317f10e Mon Sep 17 00:00:00 2001 From: MinSungKing Date: Tue, 8 Nov 2016 18:21:28 +0900 Subject: [PATCH 64/82] Add Testcase to HelloPresenter (#331) - Exsisting testcode dosen't check when age is empty --- .../android/presenter/HelloPresenterTest.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/app/src/test/java/org/glucosio/android/presenter/HelloPresenterTest.java b/app/src/test/java/org/glucosio/android/presenter/HelloPresenterTest.java index 1e810851..01bc3c6a 100644 --- a/app/src/test/java/org/glucosio/android/presenter/HelloPresenterTest.java +++ b/app/src/test/java/org/glucosio/android/presenter/HelloPresenterTest.java @@ -82,6 +82,24 @@ public void ShouldAskForWarning_WhenAgeIsNotNumber() throws Exception { verify(dbHandlerMock, never()).addUser(any(User.class)); } + @Test + public void ShouldAskForWarning_WhenAgeIsEmpty() throws Exception { + + presenter.onNextClicked("", null, null, null, -1, null); + + verify(helloViewMock).displayErrorWrongAge(); + verify(dbHandlerMock, never()).addUser(any(User.class)); + } + + @Test + public void ShouldAskForWarning_WhenAgeIsNull() throws Exception { + + presenter.onNextClicked(null, null, null, null, -1, null); + + verify(helloViewMock).displayErrorWrongAge(); + verify(dbHandlerMock, never()).addUser(any(User.class)); + } + @Test public void ShouldPropagateAllValues_WhenSavingUser() throws Exception { From 0d5fb4b9f6c0cb4f28029fa48da86e2b5649e905 Mon Sep 17 00:00:00 2001 From: Haven Kim Date: Tue, 8 Nov 2016 18:49:15 +0900 Subject: [PATCH 65/82] Add tests to A1CCalculatorPresenterTest (#328) - Swap code to give more readability : using ! at start of boolean equation is not good for readability - Add test cases for other unit preference --- .../android/presenter/A1CCalculatorPresenter.java | 6 +++--- .../android/presenter/A1CCalculatorPresenterTest.java | 11 +++++++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/presenter/A1CCalculatorPresenter.java b/app/src/main/java/org/glucosio/android/presenter/A1CCalculatorPresenter.java index 03ea07fd..e2c73378 100644 --- a/app/src/main/java/org/glucosio/android/presenter/A1CCalculatorPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/A1CCalculatorPresenter.java @@ -54,10 +54,10 @@ public double calculateA1C(String glucose) { } else { convertedA1C = converter.glucoseToA1C(converter.glucoseToMgDl(Double.parseDouble(glucose))); } - if (!"percentage".equals(user.getPreferred_unit_a1c())) { - return converter.a1cNgspToIfcc(convertedA1C); - } else { + if ("percentage".equals(user.getPreferred_unit_a1c())) { return convertedA1C; + } else { + return converter.a1cNgspToIfcc(convertedA1C); } } diff --git a/app/src/test/java/org/glucosio/android/presenter/A1CCalculatorPresenterTest.java b/app/src/test/java/org/glucosio/android/presenter/A1CCalculatorPresenterTest.java index 2cc8ef67..e7202252 100644 --- a/app/src/test/java/org/glucosio/android/presenter/A1CCalculatorPresenterTest.java +++ b/app/src/test/java/org/glucosio/android/presenter/A1CCalculatorPresenterTest.java @@ -56,7 +56,14 @@ public void ShouldReturnZero_WhenAnotherDecimalSeparatorStringPassed() throws Ex } @Test - public void ShouldReturnNonZero_WhenAnotherDecimalSeparatorStringPassed() throws Exception { - assertThat(presenter.calculateA1C("2")).isNotZero(); + public void ShouldCalculatable_WhenUserPreferredMmol() throws Exception { + when(userMock.getPreferred_unit()).thenReturn("mmol/L"); + assertThat(presenter.calculateA1C("1")).isEqualTo(2.25); + } + + @Test + public void ShouldCalculatable_WhenUserPreferredPercentage() throws Exception { + when(userMock.getPreferred_unit_a1c()).thenReturn("mmol/mol"); + assertThat(presenter.calculateA1C("20")).isEqualTo(1.84); } } \ No newline at end of file From 47a261a0092f004dd253b7bd607dcb1ebc0e2085 Mon Sep 17 00:00:00 2001 From: sujin Kim Date: Tue, 8 Nov 2016 19:12:30 +0900 Subject: [PATCH 66/82] Refector createFANViewAndListener (#329) --- .../org/glucosio/android/activity/AddA1CActivity.java | 1 - .../glucosio/android/activity/AddCholesterolActivity.java | 1 - .../org/glucosio/android/activity/AddGlucoseActivity.java | 1 - .../org/glucosio/android/activity/AddKetoneActivity.java | 3 --- .../glucosio/android/activity/AddPressureActivity.java | 1 - .../org/glucosio/android/activity/AddReadingActivity.java | 8 +------- .../org/glucosio/android/activity/AddWeightActivity.java | 1 - 7 files changed, 1 insertion(+), 15 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/activity/AddA1CActivity.java b/app/src/main/java/org/glucosio/android/activity/AddA1CActivity.java index a6963aa3..66f5ff63 100644 --- a/app/src/main/java/org/glucosio/android/activity/AddA1CActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/AddA1CActivity.java @@ -81,7 +81,6 @@ protected void onCreate(Bundle savedInstanceState) { this.getAddTimeTextView().setText(formatDateTime.getCurrentTime()); } - this.getDoneFAB().postDelayed(this.getFabAnimationRunnable(), 600); } @Override diff --git a/app/src/main/java/org/glucosio/android/activity/AddCholesterolActivity.java b/app/src/main/java/org/glucosio/android/activity/AddCholesterolActivity.java index 39879c04..23789f43 100644 --- a/app/src/main/java/org/glucosio/android/activity/AddCholesterolActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/AddCholesterolActivity.java @@ -83,7 +83,6 @@ protected void onCreate(Bundle savedInstanceState) { this.getAddTimeTextView().setText(formatDateTime.getCurrentTime()); } - this.getDoneFAB().postDelayed(this.getFabAnimationRunnable(), 600); } @Override diff --git a/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java b/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java index 7a0f1de6..22dc9210 100644 --- a/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java @@ -151,7 +151,6 @@ public void onNothingChosen(View labelledSpinner, AdapterView adapterView) { presenter.updateSpinnerTypeTime(); } - this.getDoneFAB().postDelayed(this.getFabAnimationRunnable(), 600); // Check if activity was started from a NFC sensor if (getIntent().getExtras() != null) { diff --git a/app/src/main/java/org/glucosio/android/activity/AddKetoneActivity.java b/app/src/main/java/org/glucosio/android/activity/AddKetoneActivity.java index 445d3c0f..59fb860a 100644 --- a/app/src/main/java/org/glucosio/android/activity/AddKetoneActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/AddKetoneActivity.java @@ -74,9 +74,6 @@ protected void onCreate(Bundle savedInstanceState) { this.getAddDateTextView().setText(formatDateTime.getCurrentDate()); this.getAddTimeTextView().setText(formatDateTime.getCurrentTime()); } - - //TODO try to do this in AddReadingActivity.createFANViewAndListener - this.getDoneFAB().postDelayed(this.getFabAnimationRunnable(), 600); } @Override diff --git a/app/src/main/java/org/glucosio/android/activity/AddPressureActivity.java b/app/src/main/java/org/glucosio/android/activity/AddPressureActivity.java index 88efa944..9693308c 100644 --- a/app/src/main/java/org/glucosio/android/activity/AddPressureActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/AddPressureActivity.java @@ -83,7 +83,6 @@ protected void onCreate(Bundle savedInstanceState) { this.getAddTimeTextView().setText(formatDateTime.getCurrentTime()); } - this.getDoneFAB().postDelayed(this.getFabAnimationRunnable(), 600); } @Override diff --git a/app/src/main/java/org/glucosio/android/activity/AddReadingActivity.java b/app/src/main/java/org/glucosio/android/activity/AddReadingActivity.java index 81b41209..5ab8908e 100644 --- a/app/src/main/java/org/glucosio/android/activity/AddReadingActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/AddReadingActivity.java @@ -134,6 +134,7 @@ public void run() { AnimationTools.startCircularReveal(doneFAB); } }; + doneFAB.postDelayed(fabAnimationRunnable, 600); } protected abstract void dialogOnAddButtonPressed(); @@ -228,11 +229,4 @@ public void setAddDateTextView(TextView addDateTextView) { this.addDateTextView = addDateTextView; } - public FloatingActionButton getDoneFAB() { - return doneFAB; - } - - public Runnable getFabAnimationRunnable() { - return fabAnimationRunnable; - } } diff --git a/app/src/main/java/org/glucosio/android/activity/AddWeightActivity.java b/app/src/main/java/org/glucosio/android/activity/AddWeightActivity.java index d586963b..c0a5af03 100644 --- a/app/src/main/java/org/glucosio/android/activity/AddWeightActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/AddWeightActivity.java @@ -80,7 +80,6 @@ protected void onCreate(Bundle savedInstanceState) { this.getAddTimeTextView().setText(formatDateTime.getCurrentTime()); } - this.getDoneFAB().postDelayed(this.getFabAnimationRunnable(), 600); } @Override From 662689a2ad6015b65096731521c6a1a07bba4c2d Mon Sep 17 00:00:00 2001 From: jhlee1108 Date: Thu, 10 Nov 2016 20:57:52 +0900 Subject: [PATCH 67/82] Add Testcase to ExternalViewPresenter (#332) * Add Testcase to ExternalViewPresenter * Add package name to fix Travis failed. --- .../presenter/ExternalViewPresenterTest.java | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java b/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java index f2bb5fcd..a2b0d05f 100644 --- a/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java +++ b/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java @@ -1,15 +1,20 @@ package org.glucosio.android.presenter; +import org.glucosio.android.BuildConfig; import org.glucosio.android.tools.network.GlucosioExternalLinks; import org.glucosio.android.tools.network.NetworkConnectivity; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricGradleTestRunner; +import org.robolectric.annotation.Config; -import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +@RunWith(RobolectricGradleTestRunner.class) +@Config(constants = BuildConfig.class, sdk = 21, packageName = "org.glucosio.android") public class ExternalViewPresenterTest { private ExternalViewPresenter.View view; @@ -22,16 +27,12 @@ public class ExternalViewPresenterTest { presenter = new ExternalViewPresenter(view, network); } - @Test + @Test(expected = IllegalArgumentException.class) public void shouldThrowException_WhenNoParameters() throws Exception { when(network.isConnected()).thenReturn(true); when(view.extractTitle()).thenReturn(null); - - try { - presenter.onViewCreated(); - } catch (Exception ex) { - assertTrue(ex instanceof IllegalArgumentException); - } + when(view.extractUrl()).thenReturn(null); + presenter.onViewCreated(); } @Test public void shouldLoadOpenSourceLicenses_WhenLicenseParameters() throws Exception { @@ -45,4 +46,11 @@ public void shouldThrowException_WhenNoParameters() throws Exception { verify(view).loadExternalUrl(GlucosioExternalLinks.LICENSES); verify(view).setupToolbarTitle(LICENSES); } + + @Test + public void shouldInvokeShowNoConnectionWarning_WhenNetworkIsNotConnected() throws Exception { + when(network.isConnected()).thenReturn(false); + presenter.onViewCreated(); + verify(view).showNoConnectionWarning(); + } } \ No newline at end of file From 69c7e62a25f415d3ec3837a00855958b0ff8928f Mon Sep 17 00:00:00 2001 From: Haven Kim Date: Thu, 10 Nov 2016 23:18:23 +0900 Subject: [PATCH 68/82] Remove duplicated method and change name of original one (#333) getGlucoseReadingById is calling getGlucoseReading. And getGlucoseReading is just using id for its search! They are duplicated and just getGlucoseReadingById needed. --- .../main/java/org/glucosio/android/db/DatabaseHandler.java | 7 +------ .../org/glucosio/android/presenter/HistoryPresenter.java | 2 +- .../glucosio/android/presenter/ExportPresenterTest.java | 2 +- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java b/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java index acb87cf6..db695759 100644 --- a/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java +++ b/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java @@ -289,7 +289,7 @@ public ArrayList getGlucoseReadings(Realm realm, Date from, Date return readingList; } - public GlucoseReading getGlucoseReading(long id) { + public GlucoseReading getGlucoseReadingById(long id) { return realm.where(GlucoseReading.class) .equalTo("id", id) .findFirst(); @@ -379,11 +379,6 @@ public Date getLastGlucoseDateTime() { return realm.where(GlucoseReading.class).maximumDate("created"); } - public GlucoseReading getGlucoseReadingById(long id) { - return getGlucoseReading(id); - } - - /* private ArrayList getGlucoseReadingsForLastMonthAsArray(){ Calendar calendar = Calendar.getInstance(); DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); diff --git a/app/src/main/java/org/glucosio/android/presenter/HistoryPresenter.java b/app/src/main/java/org/glucosio/android/presenter/HistoryPresenter.java index dc46ba5b..e8317fb0 100644 --- a/app/src/main/java/org/glucosio/android/presenter/HistoryPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/HistoryPresenter.java @@ -48,7 +48,7 @@ public void onDeleteClicked(long idToDelete, int metricID) { switch (metricID) { // Glucose case 0: - dB.deleteGlucoseReading(dB.getGlucoseReading(idToDelete)); + dB.deleteGlucoseReading(dB.getGlucoseReadingById(idToDelete)); fragment.reloadFragmentAdapter(); break; // HB1AC diff --git a/app/src/test/java/org/glucosio/android/presenter/ExportPresenterTest.java b/app/src/test/java/org/glucosio/android/presenter/ExportPresenterTest.java index b4203b7c..b5865f60 100644 --- a/app/src/test/java/org/glucosio/android/presenter/ExportPresenterTest.java +++ b/app/src/test/java/org/glucosio/android/presenter/ExportPresenterTest.java @@ -31,7 +31,7 @@ public class ExportPresenterTest extends RobolectricTest { @Before public void setUp() throws Exception { initMocks(this); - when(dbHandlerMock.getGlucoseReading(anyLong())).thenReturn(glucoseReadingMock); + when(dbHandlerMock.getGlucoseReadingById(anyLong())).thenReturn(glucoseReadingMock); when(glucoseReadingMock.getNotes()).thenReturn(MOCK_NOTE_FOR_TEST); when(glucoseReadingMock.getCreated()).thenReturn(new Date()); when(glucoseReadingMock.getReading()).thenReturn(TEST_READING_VALUE); From 8e8e5b679a7bd83cd6f4ae0bd2209e45b3115214 Mon Sep 17 00:00:00 2001 From: Haven Kim Date: Thu, 10 Nov 2016 23:44:19 +0900 Subject: [PATCH 69/82] Change GlucosioConverter to final class and changed its static methods (#327) GlucosioConverter is just for calculating between each units. But in every codes, converter instance is always generating. It is unacceptable to make more unnessesary instances. --- .../android/activity/AddGlucoseActivity.java | 3 ++- .../android/adapter/A1cEstimateAdapter.java | 6 ++--- .../android/adapter/HistoryAdapter.java | 11 +++------- .../android/fragment/OverviewFragment.java | 16 +++++--------- .../glucosio/android/object/A1cEstimate.java | 3 +-- .../presenter/A1CCalculatorPresenter.java | 10 ++++----- .../android/presenter/AddA1CPresenter.java | 3 +-- .../presenter/AddGlucosePresenter.java | 8 +------ .../android/presenter/AddWeightPresenter.java | 3 +-- .../android/presenter/OverviewPresenter.java | 8 +++---- .../android/tools/GlucosioConverter.java | 22 ++++++++++--------- .../glucosio/android/tools/ReadingToCSV.java | 5 +---- 12 files changed, 37 insertions(+), 61 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java b/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java index 22dc9210..16e8e5fe 100644 --- a/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/AddGlucoseActivity.java @@ -39,6 +39,7 @@ import org.glucosio.android.db.GlucoseReading; import org.glucosio.android.presenter.AddGlucosePresenter; import org.glucosio.android.tools.FormatDateTime; +import org.glucosio.android.tools.GlucosioConverter; import org.glucosio.android.tools.LabelledSpinner; import java.text.DecimalFormat; @@ -124,7 +125,7 @@ public void onNothingChosen(View labelledSpinner, AdapterView adapterView) { if (presenter.getUnitMeasuerement().equals("mg/dL")) { readingString = String.valueOf(readingToEdit.getReading()); } else { - readingString = String.valueOf(presenter.convertToMmol(readingToEdit.getReading())); + readingString = String.valueOf(GlucosioConverter.glucoseToMmolL(readingToEdit.getReading())); } readingTextView.setText(readingString); diff --git a/app/src/main/java/org/glucosio/android/adapter/A1cEstimateAdapter.java b/app/src/main/java/org/glucosio/android/adapter/A1cEstimateAdapter.java index 78dff61f..6bdd82f6 100644 --- a/app/src/main/java/org/glucosio/android/adapter/A1cEstimateAdapter.java +++ b/app/src/main/java/org/glucosio/android/adapter/A1cEstimateAdapter.java @@ -52,8 +52,7 @@ public View getView(int position, View convertView, ViewGroup parent) { String stringValue = p.getValue() + " %"; value.setText(stringValue); } else { - GlucosioConverter converter = new GlucosioConverter(); - String stringValue = converter.a1cNgspToIfcc(p.getValue()) + " mmol/mol"; + String stringValue = GlucosioConverter.a1cNgspToIfcc(p.getValue()) + " mmol/mol"; value.setText(stringValue); } } @@ -66,8 +65,7 @@ public View getView(int position, View convertView, ViewGroup parent) { if ("mg/dL".equals(db.getUser(1).getPreferred_unit())) { glucoseAverage.setText(getContext().getString(R.string.mg_dL_value, p.getGlucoseAverage())); } else { - GlucosioConverter converter = new GlucosioConverter(); - int mmol = converter.glucoseToMgDl(Double.parseDouble(p.getGlucoseAverage())); + int mmol = GlucosioConverter.glucoseToMgDl(Double.parseDouble(p.getGlucoseAverage())); String reading = NumberFormat.getInstance().format(mmol); glucoseAverage.setText(getContext().getString(R.string.mmol_L_value, reading)); } diff --git a/app/src/main/java/org/glucosio/android/adapter/HistoryAdapter.java b/app/src/main/java/org/glucosio/android/adapter/HistoryAdapter.java index d4052cad..effe40d6 100644 --- a/app/src/main/java/org/glucosio/android/adapter/HistoryAdapter.java +++ b/app/src/main/java/org/glucosio/android/adapter/HistoryAdapter.java @@ -58,7 +58,6 @@ public class HistoryAdapter extends RecyclerView.Adapter hb1acReadingArray; private ArrayList hb1acIdArray; private HistoryPresenter presenter; - private GlucosioConverter converter; private ArrayList glucoseIdArray; private ArrayList glucoseNotes; private ArrayList glucoseReadingArray; @@ -131,8 +130,6 @@ public HistoryAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.fragment_history_item, parent, false); - converter = new GlucosioConverter(); - ViewHolder vh = new ViewHolder(v); return vh; } @@ -158,7 +155,7 @@ public void onBindViewHolder(ViewHolder holder, int position) { String reading = NumberFormat.getInstance().format(glucoseReading); readingTextView.setText(mContext.getString(R.string.mg_dL_value, reading)); } else { - double mmol = converter.glucoseToMmolL(glucoseReadingArray.get(position)); + double mmol = GlucosioConverter.glucoseToMmolL(glucoseReadingArray.get(position)); String reading = NumberFormat.getInstance().format(mmol); readingTextView.setText(mContext.getString(R.string.mmol_L_value, reading)); } @@ -178,8 +175,7 @@ public void onBindViewHolder(ViewHolder holder, int position) { if ("percentage".equals(presenter.getA1cUnitMeasurement())) { readingTextView.setText(hb1acReadingArray.get(position).toString() + " %"); } else { - GlucosioConverter converter = new GlucosioConverter(); - double ifcc = converter.a1cNgspToIfcc(hb1acReadingArray.get(position)); + double ifcc = GlucosioConverter.a1cNgspToIfcc(hb1acReadingArray.get(position)); String reading = NumberFormat.getInstance().format(ifcc); readingTextView.setText(mContext.getString(R.string.mmol_mol_value, reading)); } @@ -222,8 +218,7 @@ public void onBindViewHolder(ViewHolder holder, int position) { if ("kilograms".equals(presenter.getWeightUnitMeasurement())) { readingTextView.setText(weightReadingArray.get(position) + " kg"); } else { - GlucosioConverter converter = new GlucosioConverter(); - readingTextView.setText(converter.kgToLb(weightReadingArray.get(position)) + " lbs"); + readingTextView.setText(GlucosioConverter.kgToLb(weightReadingArray.get(position)) + " lbs"); } datetimeTextView.setText(presenter.convertDate(weightDataTime.get(position))); diff --git a/app/src/main/java/org/glucosio/android/fragment/OverviewFragment.java b/app/src/main/java/org/glucosio/android/fragment/OverviewFragment.java index 7b55abdf..7ca97f3e 100644 --- a/app/src/main/java/org/glucosio/android/fragment/OverviewFragment.java +++ b/app/src/main/java/org/glucosio/android/fragment/OverviewFragment.java @@ -287,7 +287,6 @@ public void onNothingSelected(AdapterView parent) { xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); xAxis.setTextColor(getResources().getColor(R.color.glucosio_text_light)); xAxis.setAvoidFirstLastClipping(true); - GlucosioConverter converter = new GlucosioConverter(); int minGlucoseValue = presenter.getGlucoseMinValue(); int maxGlucoseValue = presenter.getGlucoseMaxValue(); @@ -299,8 +298,8 @@ public void onNothingSelected(AdapterView parent) { ll1 = new LimitLine(minGlucoseValue); ll2 = new LimitLine(maxGlucoseValue); } else { - ll1 = new LimitLine((float) converter.glucoseToMmolL(maxGlucoseValue), getString(R.string.reading_high)); - ll2 = new LimitLine((float) converter.glucoseToMmolL(minGlucoseValue), getString(R.string.reading_low)); + ll1 = new LimitLine((float) GlucosioConverter.glucoseToMmolL(maxGlucoseValue), getString(R.string.reading_high)); + ll2 = new LimitLine((float) GlucosioConverter.glucoseToMmolL(minGlucoseValue), getString(R.string.reading_low)); } ll1.setLineWidth(0.8f); @@ -404,8 +403,6 @@ private void setData() { private LineData generateGlucoseData() { List xVals = new ArrayList<>(); List yVals = new ArrayList<>(); - GlucosioConverter converter = new GlucosioConverter(); - if (graphSpinnerRange.getSelectedItemPosition() == 0) { // Day view @@ -414,7 +411,7 @@ private LineData generateGlucoseData() { float val = Float.parseFloat(presenter.getGlucoseReadings().get(i).toString()); yVals.add(new Entry(val, i)); } else { - double val = converter.glucoseToMmolL(Double.parseDouble(presenter.getGlucoseReadings().get(i).toString())); + double val = GlucosioConverter.glucoseToMmolL(Double.parseDouble(presenter.getGlucoseReadings().get(i).toString())); float converted = (float) val; yVals.add(new Entry(converted, i)); } @@ -426,7 +423,7 @@ private LineData generateGlucoseData() { float val = Float.parseFloat(presenter.getGlucoseReadingsWeek().get(i) + ""); yVals.add(new Entry(val, i)); } else { - double val = converter.glucoseToMmolL(Double.parseDouble(presenter.getGlucoseReadingsWeek().get(i) + "")); + double val = GlucosioConverter.glucoseToMmolL(Double.parseDouble(presenter.getGlucoseReadingsWeek().get(i) + "")); float converted = (float) val; yVals.add(new Entry(converted, i)); } @@ -438,7 +435,7 @@ private LineData generateGlucoseData() { float val = Float.parseFloat(presenter.getGlucoseReadingsMonth().get(i) + ""); yVals.add(new Entry(val, i)); } else { - double val = converter.glucoseToMmolL(Double.parseDouble(presenter.getGlucoseReadingsMonth().get(i) + "")); + double val = GlucosioConverter.glucoseToMmolL(Double.parseDouble(presenter.getGlucoseReadingsMonth().get(i) + "")); float converted = (float) val; yVals.add(new Entry(converted, i)); } @@ -662,9 +659,8 @@ private void loadLastReading() { String reading = presenter.getLastReading(); lastReadingTextView.setText(getString(R.string.mg_dL_value, reading)); } else { - GlucosioConverter converter = new GlucosioConverter(); String mgdl = presenter.getLastReading(); - double mmol = converter.glucoseToMmolL(Double.parseDouble(mgdl)); + double mmol = GlucosioConverter.glucoseToMmolL(Double.parseDouble(mgdl)); String reading = NumberFormat.getInstance().format(mmol); lastReadingTextView.setText(getString(R.string.mmol_L_value, reading)); } diff --git a/app/src/main/java/org/glucosio/android/object/A1cEstimate.java b/app/src/main/java/org/glucosio/android/object/A1cEstimate.java index 4c780f41..2ef90c8c 100644 --- a/app/src/main/java/org/glucosio/android/object/A1cEstimate.java +++ b/app/src/main/java/org/glucosio/android/object/A1cEstimate.java @@ -30,7 +30,6 @@ public void setMonth(String month) { } public String getGlucoseAverage() { - GlucosioConverter conveter = new GlucosioConverter(); - return NumberFormat.getInstance().format(conveter.a1cToGlucose(value)); + return NumberFormat.getInstance().format(GlucosioConverter.a1cToGlucose(value)); } } diff --git a/app/src/main/java/org/glucosio/android/presenter/A1CCalculatorPresenter.java b/app/src/main/java/org/glucosio/android/presenter/A1CCalculatorPresenter.java index e2c73378..83262f03 100644 --- a/app/src/main/java/org/glucosio/android/presenter/A1CCalculatorPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/A1CCalculatorPresenter.java @@ -45,19 +45,18 @@ public double calculateA1C(String glucose) { return 0; } - GlucosioConverter converter = new GlucosioConverter(); double convertedA1C; User user = dbHandler.getUser(1); if ("mg/dL".equals(user.getPreferred_unit())) { - convertedA1C = converter.glucoseToA1C(Double.parseDouble(glucose)); + convertedA1C = GlucosioConverter.glucoseToA1C(Double.parseDouble(glucose)); } else { - convertedA1C = converter.glucoseToA1C(converter.glucoseToMgDl(Double.parseDouble(glucose))); + convertedA1C = GlucosioConverter.glucoseToA1C(GlucosioConverter.glucoseToMgDl(Double.parseDouble(glucose))); } if ("percentage".equals(user.getPreferred_unit_a1c())) { return convertedA1C; } else { - return converter.a1cNgspToIfcc(convertedA1C); + return GlucosioConverter.a1cNgspToIfcc(convertedA1C); } } @@ -75,8 +74,7 @@ public void saveA1C(double a1c) { User user = dbHandler.getUser(1); double finalA1c = a1c; if (!"percentage".equals(user.getPreferred_unit_a1c())) { - GlucosioConverter converter = new GlucosioConverter(); - finalA1c = converter.a1cIfccToNgsp(a1c); + finalA1c = GlucosioConverter.a1cIfccToNgsp(a1c); } HB1ACReading a1cReading = new HB1ACReading(finalA1c, new Date()); diff --git a/app/src/main/java/org/glucosio/android/presenter/AddA1CPresenter.java b/app/src/main/java/org/glucosio/android/presenter/AddA1CPresenter.java index 2e584969..7bc3644e 100644 --- a/app/src/main/java/org/glucosio/android/presenter/AddA1CPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/AddA1CPresenter.java @@ -67,8 +67,7 @@ private HB1ACReading generateHB1ACReading(String reading) { if ("percentage".equals(getA1CUnitMeasuerement())) { finalReading = Double.parseDouble(reading); } else { - GlucosioConverter converter = new GlucosioConverter(); - finalReading = converter.a1cIfccToNgsp(Double.parseDouble(reading)); + finalReading = GlucosioConverter.a1cIfccToNgsp(Double.parseDouble(reading)); } return new HB1ACReading(finalReading, finalDateTime); diff --git a/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java b/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java index 5da5ac43..67881d08 100644 --- a/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/AddGlucosePresenter.java @@ -43,13 +43,11 @@ public class AddGlucosePresenter extends AddReadingPresenter { private DatabaseHandler dB; private AddGlucoseActivity activity; private ReadingTools rTools; - private GlucosioConverter converter; public AddGlucosePresenter(AddGlucoseActivity addGlucoseActivity) { this.activity = addGlucoseActivity; dB = new DatabaseHandler(addGlucoseActivity.getApplicationContext()); rTools = new ReadingTools(); - converter = new GlucosioConverter(); } public void updateSpinnerTypeTime() { @@ -100,7 +98,7 @@ private boolean createReading(String type, String notes, long oldId, Date finalD if ("mg/dL".equals(getUnitMeasuerement())) { readingValue = number.intValue(); } else { - readingValue = converter.glucoseToMgDl(number.doubleValue()); + readingValue = GlucosioConverter.glucoseToMgDl(number.doubleValue()); } GlucoseReading gReading = new GlucoseReading(readingValue, type, finalDateTime, notes); if (oldId == UNKNOWN_ID) { @@ -111,10 +109,6 @@ private boolean createReading(String type, String notes, long oldId, Date finalD return isReadingAdded; } - public double convertToMmol(int mgDl) { - return converter.glucoseToMmolL(mgDl); - } - public Integer retrieveSpinnerID(String measuredTypeText, List measuredTypelist) { int measuredId = 0; boolean isFound = false; diff --git a/app/src/main/java/org/glucosio/android/presenter/AddWeightPresenter.java b/app/src/main/java/org/glucosio/android/presenter/AddWeightPresenter.java index 566119a1..457b91f9 100644 --- a/app/src/main/java/org/glucosio/android/presenter/AddWeightPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/AddWeightPresenter.java @@ -69,8 +69,7 @@ private WeightReading generateWeightReading(String reading) { if ("kilograms".equals(getWeightUnitMeasuerement())) { finalReading = Integer.parseInt(reading); } else { - GlucosioConverter converter = new GlucosioConverter(); - finalReading = converter.lbToKg(Integer.parseInt(reading)); + finalReading = GlucosioConverter.lbToKg(Integer.parseInt(reading)); } return new WeightReading(finalReading, finalDateTime); diff --git a/app/src/main/java/org/glucosio/android/presenter/OverviewPresenter.java b/app/src/main/java/org/glucosio/android/presenter/OverviewPresenter.java index 75dcc63e..112e0e91 100644 --- a/app/src/main/java/org/glucosio/android/presenter/OverviewPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/OverviewPresenter.java @@ -86,11 +86,10 @@ public String convertDate(String date) { public String getHB1AC() { // Check if last month is available first if (getGlucoseReadingsMonth().size() > 1) { - GlucosioConverter converter = new GlucosioConverter(); if ("percentage".equals(dB.getUser(1).getPreferred_unit_a1c())) { - return converter.glucoseToA1C(getGlucoseReadingsMonth().get(getGlucoseReadingsMonth().size() - 2)) + " %"; + return GlucosioConverter.glucoseToA1C(getGlucoseReadingsMonth().get(getGlucoseReadingsMonth().size() - 2)) + " %"; } else { - return converter.a1cNgspToIfcc(converter.glucoseToA1C(getGlucoseReadingsMonth().get(getGlucoseReadingsMonth().size() - 2))) + " mmol/mol"; + return GlucosioConverter.a1cNgspToIfcc(GlucosioConverter.glucoseToA1C(getGlucoseReadingsMonth().get(getGlucoseReadingsMonth().size() - 2))) + " mmol/mol"; } } else { return view.getString(R.string.overview_hb1ac_error_no_data); @@ -102,12 +101,11 @@ public boolean isA1cAvailable(int depth) { } public ArrayList getA1cEstimateList() { - GlucosioConverter converter = new GlucosioConverter(); ArrayList a1cEstimateList = new ArrayList<>(); // We don't take this month because A1C is incomplete for (int i = 0; i < getGlucoseReadingsMonth().size() - 1; i++) { - double value = converter.glucoseToA1C(getGlucoseReadingsMonth().get(i)); + double value = GlucosioConverter.glucoseToA1C(getGlucoseReadingsMonth().get(i)); String month = convertDateToMonth(getGlucoseDatetimeMonth().get(i)); a1cEstimateList.add(new A1cEstimate(value, month)); } diff --git a/app/src/main/java/org/glucosio/android/tools/GlucosioConverter.java b/app/src/main/java/org/glucosio/android/tools/GlucosioConverter.java index 1b66e61a..82b15a56 100644 --- a/app/src/main/java/org/glucosio/android/tools/GlucosioConverter.java +++ b/app/src/main/java/org/glucosio/android/tools/GlucosioConverter.java @@ -23,7 +23,9 @@ import java.math.BigDecimal; import java.math.RoundingMode; -public class GlucosioConverter { +public final class GlucosioConverter { + private GlucosioConverter(){} + public static double round(double value, int places) { if (places < 0) throw new IllegalArgumentException(); @@ -32,44 +34,44 @@ public static double round(double value, int places) { return bd.doubleValue(); } - public int glucoseToMgDl(double mmolL) { + public static int glucoseToMgDl(double mmolL) { double converted = mmolL * 18; return (int) converted; } - public double glucoseToMmolL(double mgDl) { + public static double glucoseToMmolL(double mgDl) { return round(mgDl / 18.0, 1); } - public double glucoseToA1C(double mgDl) { + public static double glucoseToA1C(double mgDl) { // A1C = (Average glucose + 46.7) / 28.7 return round((mgDl + 46.7) / 28.7, 2); } - public double a1cToGlucose(double a1c) { + public static double a1cToGlucose(double a1c) { // Average glucose = (A1C * 28.7) -46.7 return round((a1c * 28.7) - 46.7, 2); } - public int kgToLb(int kg) { + public static int kgToLb(int kg) { Double d = kg * 2.20462; return d.intValue(); } - public int lbToKg(int lb) { + public static int lbToKg(int lb) { Double d = lb / 2.20462; return d.intValue(); } - public double a1cNgspToIfcc(double ngsp) { + public static double a1cNgspToIfcc(double ngsp) { // percentage to mmol/mol // [NGSP - 2.152] / 0.09148 return round((ngsp - 2.152) / 0.09148, 2); } - public double a1cIfccToNgsp(double ifcc) { + public static double a1cIfccToNgsp(double ifcc) { // mmol/mol to percentage // [0.09148 * IFCC] + 2.152 return round((0.09148 * ifcc) + 2.152, 2); } -} +} \ No newline at end of file diff --git a/app/src/main/java/org/glucosio/android/tools/ReadingToCSV.java b/app/src/main/java/org/glucosio/android/tools/ReadingToCSV.java index 958bcbe3..74845a66 100644 --- a/app/src/main/java/org/glucosio/android/tools/ReadingToCSV.java +++ b/app/src/main/java/org/glucosio/android/tools/ReadingToCSV.java @@ -91,8 +91,6 @@ public static String createCSVFile(Context context, Realm realm, final List Date: Fri, 11 Nov 2016 02:09:52 +0900 Subject: [PATCH 70/82] Add fully testcase to A1cCalculator (#337) --- .../presenter/A1CCalculatorPresenterTest.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/app/src/test/java/org/glucosio/android/presenter/A1CCalculatorPresenterTest.java b/app/src/test/java/org/glucosio/android/presenter/A1CCalculatorPresenterTest.java index e7202252..4acb58fc 100644 --- a/app/src/test/java/org/glucosio/android/presenter/A1CCalculatorPresenterTest.java +++ b/app/src/test/java/org/glucosio/android/presenter/A1CCalculatorPresenterTest.java @@ -13,6 +13,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Matchers.anyLong; import static org.mockito.Mockito.when; +import static org.mockito.Mockito.verify; @RunWith(MockitoJUnitRunner.class) public class A1CCalculatorPresenterTest { @@ -66,4 +67,24 @@ public void ShouldCalculatable_WhenUserPreferredPercentage() throws Exception { when(userMock.getPreferred_unit_a1c()).thenReturn("mmol/mol"); assertThat(presenter.calculateA1C("20")).isEqualTo(1.84); } -} \ No newline at end of file + + @Test + public void ShouldCallSetMmol_WhenUserPreferredUnitIsNotMgDl() throws Exception { + when(userMock.getPreferred_unit()).thenReturn("mmol/L"); + presenter.checkGlucoseUnit(); + verify(activity).setMmol(); + } + + @Test + public void ShouldReturnCorrectA1CUnit_WhenGetterCalled() throws Exception { + when(userMock.getPreferred_unit_a1c()).thenReturn("mmol/mol"); + assertThat(presenter.getA1cUnit()).isEqualTo("mmol/mol"); + } + + @Test + public void ShouldFinishActivityAfterSaving_WhensaveA1CCalled() throws Exception { + when(userMock.getPreferred_unit_a1c()).thenReturn("mmol/mol"); + presenter.saveA1C(presenter.calculateA1C("20")); + verify(activity).finish(); + } +} From 702fa6b1016841fb5597d73acba610bed88df39c Mon Sep 17 00:00:00 2001 From: EunSik Park Date: Wed, 16 Nov 2016 15:11:44 +0900 Subject: [PATCH 71/82] Remove duplicated method (#339) --- .../org/glucosio/android/db/DatabaseHandler.java | 12 ++---------- .../glucosio/android/presenter/HistoryPresenter.java | 4 ++-- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java b/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java index db695759..aef08098 100644 --- a/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java +++ b/app/src/main/java/org/glucosio/android/db/DatabaseHandler.java @@ -535,16 +535,12 @@ public void deleteHB1ACReading(HB1ACReading reading) { realm.commitTransaction(); } - public HB1ACReading getHB1ACReading(long id) { + public HB1ACReading getHB1ACReadingById(long id) { return realm.where(HB1ACReading.class) .equalTo("id", id) .findFirst(); } - public HB1ACReading getHB1ACReadingById(long id) { - return getHB1ACReading(id); - } - public void editHB1ACReading(long oldId, HB1ACReading reading) { // First delete the old reading deleteHB1ACReading(getHB1ACReadingById(oldId)); @@ -814,7 +810,7 @@ public void editWeightReading(long oldId, WeightReading reading) { addWeightReading(reading); } - public WeightReading getWeightReading(long id) { + public WeightReading getWeightReadingById(long id) { return realm.where(WeightReading.class) .equalTo("id", id) .findFirst(); @@ -883,10 +879,6 @@ public ArrayList getWeightReadingDateTimeAsArray() { return datetimeArray; } - public WeightReading getWeightReadingById(long id) { - return getWeightReading(id); - } - public void addCholesterolReading(CholesterolReading reading) { realm.beginTransaction(); reading.setId(getNextKey("cholesterol")); diff --git a/app/src/main/java/org/glucosio/android/presenter/HistoryPresenter.java b/app/src/main/java/org/glucosio/android/presenter/HistoryPresenter.java index e8317fb0..a8c43471 100644 --- a/app/src/main/java/org/glucosio/android/presenter/HistoryPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/HistoryPresenter.java @@ -53,7 +53,7 @@ public void onDeleteClicked(long idToDelete, int metricID) { break; // HB1AC case 1: - dB.deleteHB1ACReading(dB.getHB1ACReading(idToDelete)); + dB.deleteHB1ACReading(dB.getHB1ACReadingById(idToDelete)); fragment.reloadFragmentAdapter(); break; // Cholesterol @@ -73,7 +73,7 @@ public void onDeleteClicked(long idToDelete, int metricID) { break; // Weight case 5: - dB.deleteWeightReading(dB.getWeightReading(idToDelete)); + dB.deleteWeightReading(dB.getWeightReadingById(idToDelete)); fragment.reloadFragmentAdapter(); break; default: From 08d1372ac89c0377ff0aee41b9654a032c2eaac9 Mon Sep 17 00:00:00 2001 From: "SoHyang.Jeon" Date: Tue, 22 Nov 2016 04:46:36 +0900 Subject: [PATCH 72/82] Refactor AddReadingPresenter (#341) - setReadingTimeNow and updateReadingSplitDateTime have duplicated codes - getReadingCal and getReadingTime have same problem --- .../presenter/AddReadingPresenter.java | 24 ++++++------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/org/glucosio/android/presenter/AddReadingPresenter.java b/app/src/main/java/org/glucosio/android/presenter/AddReadingPresenter.java index 0ce92d18..4d6780be 100644 --- a/app/src/main/java/org/glucosio/android/presenter/AddReadingPresenter.java +++ b/app/src/main/java/org/glucosio/android/presenter/AddReadingPresenter.java @@ -17,19 +17,6 @@ public class AddReadingPresenter { private String readingHour; private String readingMinute; - public void setReadingTimeNow() { - DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - Date formatted = Calendar.getInstance().getTime(); - - SplitDateTime addSplitDateTime = new SplitDateTime(formatted, inputFormat); - - this.readingYear = addSplitDateTime.getYear(); - this.readingMonth = addSplitDateTime.getMonth(); - this.readingDay = addSplitDateTime.getDay(); - this.readingHour = addSplitDateTime.getHour(); - this.readingMinute = addSplitDateTime.getMinute(); - } - public void updateReadingSplitDateTime(Date readingDate) { DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); SplitDateTime splitDateTime = new SplitDateTime(readingDate, inputFormat); @@ -40,10 +27,9 @@ public void updateReadingSplitDateTime(Date readingDate) { this.readingMonth = splitDateTime.getMonth(); } - public Date getReadingTime() { - Calendar cal = Calendar.getInstance(); - cal.set(Integer.parseInt(readingYear), Integer.parseInt(readingMonth) - 1, Integer.parseInt(readingDay), Integer.parseInt(readingHour), Integer.parseInt(readingMinute)); - return cal.getTime(); + public void setReadingTimeNow() { + Date formatted = new Date(); + updateReadingSplitDateTime(formatted); } public Calendar getReadingCal() { @@ -52,6 +38,10 @@ public Calendar getReadingCal() { return cal; } + public Date getReadingTime() { + return getReadingCal().getTime(); + } + public String getReadingYear() { return readingYear; } From 8fc6d7b549b69421b7d332073631d9b1855f1355 Mon Sep 17 00:00:00 2001 From: Eugen Martynov Date: Sun, 27 Nov 2016 20:25:15 +0100 Subject: [PATCH 73/82] Removed SO code from BackupAdapter and test --- .../android/activity/BackupActivity.java | 5 +- .../android/adapter/BackupAdapter.java | 86 ++++++++----------- .../android/adapter/BackupAdapterTest.java | 52 +++++++++++ 3 files changed, 92 insertions(+), 51 deletions(-) create mode 100644 app/src/test/java/org/glucosio/android/adapter/BackupAdapterTest.java diff --git a/app/src/main/java/org/glucosio/android/activity/BackupActivity.java b/app/src/main/java/org/glucosio/android/activity/BackupActivity.java index 16f304cb..d9b8a2b0 100644 --- a/app/src/main/java/org/glucosio/android/activity/BackupActivity.java +++ b/app/src/main/java/org/glucosio/android/activity/BackupActivity.java @@ -246,9 +246,8 @@ public void onResult(@NonNull DriveApi.MetadataBufferResult result) { Date modifiedDate = metadata.getModifiedDate(); long backupSize = metadata.getFileSize(); backupsArray.add(new GlucosioBackup(driveId, modifiedDate, backupSize)); - backupListView.setAdapter(new BackupAdapter(activity, R.layout.preferences_backup, backupsArray)); } - + backupListView.setAdapter(new BackupAdapter(activity, R.layout.activity_backup_drive_restore_item, backupsArray)); } }); } @@ -499,4 +498,4 @@ public boolean onOptionsItemSelected(MenuItem item) { protected void attachBaseContext(Context newBase) { super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/glucosio/android/adapter/BackupAdapter.java b/app/src/main/java/org/glucosio/android/adapter/BackupAdapter.java index 2e8f9e93..32a9ad33 100644 --- a/app/src/main/java/org/glucosio/android/adapter/BackupAdapter.java +++ b/app/src/main/java/org/glucosio/android/adapter/BackupAdapter.java @@ -4,6 +4,7 @@ import android.app.Dialog; import android.content.Context; import android.support.annotation.NonNull; +import android.text.format.Formatter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -25,25 +26,14 @@ public class BackupAdapter extends ArrayAdapter { private Context context; private FormatDateTime formatDateTime; - public BackupAdapter(Context context, int textViewResourceId) { - super(context, textViewResourceId); - } - public BackupAdapter(Context context, int resource, List items) { super(context, resource, items); this.context = context; formatDateTime = new FormatDateTime(context); } - private static String humanReadableByteCount(long bytes, boolean si) { - int unit = si ? 1000 : 1024; - if (bytes < unit) return bytes + " B"; - int exp = (int) (Math.log(bytes) / Math.log(unit)); - String pre = (si ? "kMGTPE" : "KMGTPE").charAt(exp - 1) + (si ? "" : "i"); - return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre); - } - @Override + @NonNull public View getView(int position, View convertView, @NonNull ViewGroup parent) { View v = convertView; @@ -54,48 +44,48 @@ public View getView(int position, View convertView, @NonNull ViewGroup parent) { } GlucosioBackup p = getItem(position); - final DriveId driveId = p.getDriveId(); - final String modified = formatDateTime.formatDate(p.getModifiedDate()); - final String size = humanReadableByteCount(p.getBackupSize(), true); - if (p != null) { + final DriveId driveId = p.getDriveId(); + final String modified = formatDateTime.formatDate(p.getModifiedDate()); + final String size = Formatter.formatFileSize(getContext(), p.getBackupSize()); + TextView modifiedTextView = (TextView) v.findViewById(R.id.item_history_time); TextView typeTextView = (TextView) v.findViewById(R.id.item_history_type); modifiedTextView.setText(modified); typeTextView.setText(size); - } - v.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - // Show custom dialog - final Dialog dialog = new Dialog(context); - dialog.setContentView(R.layout.dialog_backup_restore); - TextView createdTextView = (TextView) dialog.findViewById(R.id.dialog_backup_restore_created); - TextView sizeTextView = (TextView) dialog.findViewById(R.id.dialog_backup_restore_size); - Button restoreButton = (Button) dialog.findViewById(R.id.dialog_backup_restore_button_restore); - Button cancelButton = (Button) dialog.findViewById(R.id.dialog_backup_restore_button_cancel); - - createdTextView.setText(modified); - sizeTextView.setText(size); - - restoreButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ((BackupActivity) context).downloadFromDrive(driveId.asDriveFile()); - } - }); - - cancelButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - dialog.dismiss(); - } - }); - - dialog.show(); - } - }); + v.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // Show custom dialog + final Dialog dialog = new Dialog(context); + dialog.setContentView(R.layout.dialog_backup_restore); + TextView createdTextView = (TextView) dialog.findViewById(R.id.dialog_backup_restore_created); + TextView sizeTextView = (TextView) dialog.findViewById(R.id.dialog_backup_restore_size); + Button restoreButton = (Button) dialog.findViewById(R.id.dialog_backup_restore_button_restore); + Button cancelButton = (Button) dialog.findViewById(R.id.dialog_backup_restore_button_cancel); + + createdTextView.setText(modified); + sizeTextView.setText(size); + + restoreButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ((BackupActivity) context).downloadFromDrive(driveId.asDriveFile()); + } + }); + + cancelButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + + dialog.show(); + } + }); + } return v; } diff --git a/app/src/test/java/org/glucosio/android/adapter/BackupAdapterTest.java b/app/src/test/java/org/glucosio/android/adapter/BackupAdapterTest.java new file mode 100644 index 00000000..bd46547a --- /dev/null +++ b/app/src/test/java/org/glucosio/android/adapter/BackupAdapterTest.java @@ -0,0 +1,52 @@ +package org.glucosio.android.adapter; + +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.google.android.gms.drive.DriveId; + +import org.glucosio.android.R; +import org.glucosio.android.RobolectricTest; +import org.glucosio.android.object.GlucosioBackup; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.robolectric.Robolectric; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import static org.assertj.android.api.Assertions.assertThat; +import static org.mockito.MockitoAnnotations.initMocks; + +public class BackupAdapterTest extends RobolectricTest { + private AppCompatActivity activity; + private ViewGroup viewGroup; + private BackupAdapter adapter; + + @Mock + private DriveId driveIDMock; + + @Before + public void setUp() throws Exception { + initMocks(this); + + activity = Robolectric.buildActivity(AppCompatActivity.class).create().get(); + viewGroup = (ViewGroup) activity.findViewById(android.R.id.content); + + List backupsArray = new ArrayList<>(); + backupsArray.add(new GlucosioBackup(driveIDMock, new Date(), 1024)); + adapter = new BackupAdapter(activity, R.layout.preferences_backup, backupsArray); + } + + @Test + public void ReturnViewWithSizeFormatted_WhenAsked() throws Exception { + View view = adapter.getView(0, null, viewGroup); + + TextView sizeView = (TextView) view.findViewById(R.id.item_history_type); + assertThat(sizeView).hasText("1.00KB"); + } +} From b5e991552d7aa38bb385dd23d929fa9030ae86bf Mon Sep 17 00:00:00 2001 From: Eugen Martynov Date: Sun, 27 Nov 2016 20:36:45 +0100 Subject: [PATCH 74/82] Replaced SO click listener with Little Robot one --- .../android/fragment/HistoryFragment.java | 17 +-- .../android/listener/ItemClickSupport.java | 119 ++++++++++++++++++ .../listener/RecyclerItemClickListener.java | 77 ------------ app/src/main/res/values/ids.xml | 4 + 4 files changed, 129 insertions(+), 88 deletions(-) create mode 100644 app/src/main/java/org/glucosio/android/listener/ItemClickSupport.java delete mode 100644 app/src/main/java/org/glucosio/android/listener/RecyclerItemClickListener.java create mode 100644 app/src/main/res/values/ids.xml diff --git a/app/src/main/java/org/glucosio/android/fragment/HistoryFragment.java b/app/src/main/java/org/glucosio/android/fragment/HistoryFragment.java index 8eaec79e..2497ce99 100644 --- a/app/src/main/java/org/glucosio/android/fragment/HistoryFragment.java +++ b/app/src/main/java/org/glucosio/android/fragment/HistoryFragment.java @@ -50,7 +50,7 @@ import org.glucosio.android.activity.AddWeightActivity; import org.glucosio.android.activity.MainActivity; import org.glucosio.android.adapter.HistoryAdapter; -import org.glucosio.android.listener.RecyclerItemClickListener; +import org.glucosio.android.listener.ItemClickSupport; import org.glucosio.android.presenter.HistoryPresenter; import org.glucosio.android.tools.FormatDateTime; @@ -128,18 +128,13 @@ public void onNothingSelected(AdapterView parent) { } }); - mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(), mRecyclerView, new RecyclerItemClickListener.OnItemClickListener() { + ItemClickSupport.addTo(mRecyclerView).setOnItemLongClickListener(new ItemClickSupport.OnItemLongClickListener() { @Override - public void onItemClick(View view, int position) { - // Do nothing + public boolean onItemLongClicked(RecyclerView recyclerView, int position, View v) { + showBottomSheetDialog(v); + return true; } - - @Override - public void onItemLongClick(final View view, final int position) { - // if touch Glucose or weight item - showBottomSheetDialog(view); - } - })); + }); mRecyclerView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { @Override diff --git a/app/src/main/java/org/glucosio/android/listener/ItemClickSupport.java b/app/src/main/java/org/glucosio/android/listener/ItemClickSupport.java new file mode 100644 index 00000000..c429dba2 --- /dev/null +++ b/app/src/main/java/org/glucosio/android/listener/ItemClickSupport.java @@ -0,0 +1,119 @@ +/* + * Copyright (C) 2016 Glucosio Foundation + * + * This file is part of Glucosio. + * + * Glucosio 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, version 3. + * + * Glucosio 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 Glucosio. If not, see . + * + * + */ + +package org.glucosio.android.listener; + +import android.support.v7.widget.RecyclerView; +import android.view.View; + +import org.glucosio.android.R; + + +/** + * @see Getting your clicks on RecyclerView | Hugo Visser + */ +public class ItemClickSupport { + private final RecyclerView mRecyclerView; + private OnItemClickListener mOnItemClickListener; + private OnItemLongClickListener mOnItemLongClickListener; + private View.OnClickListener mOnClickListener = new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + RecyclerView.ViewHolder holder = mRecyclerView.getChildViewHolder(v); + mOnItemClickListener.onItemClicked(mRecyclerView, holder.getAdapterPosition(), v); + } + } + }; + private View.OnLongClickListener mOnLongClickListener = new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + if (mOnItemLongClickListener != null) { + RecyclerView.ViewHolder holder = mRecyclerView.getChildViewHolder(v); + return mOnItemLongClickListener.onItemLongClicked(mRecyclerView, holder.getAdapterPosition(), v); + } + return false; + } + }; + private RecyclerView.OnChildAttachStateChangeListener mAttachListener + = new RecyclerView.OnChildAttachStateChangeListener() { + @Override + public void onChildViewAttachedToWindow(View view) { + if (mOnItemClickListener != null) { + view.setOnClickListener(mOnClickListener); + } + if (mOnItemLongClickListener != null) { + view.setOnLongClickListener(mOnLongClickListener); + } + } + + @Override + public void onChildViewDetachedFromWindow(View view) { + + } + }; + + private ItemClickSupport(RecyclerView recyclerView) { + mRecyclerView = recyclerView; + mRecyclerView.setTag(R.id.item_click_support, this); + mRecyclerView.addOnChildAttachStateChangeListener(mAttachListener); + } + + public static ItemClickSupport addTo(RecyclerView view) { + ItemClickSupport support = (ItemClickSupport) view.getTag(R.id.item_click_support); + if (support == null) { + support = new ItemClickSupport(view); + } + return support; + } + + public static ItemClickSupport removeFrom(RecyclerView view) { + ItemClickSupport support = (ItemClickSupport) view.getTag(R.id.item_click_support); + if (support != null) { + support.detach(view); + } + return support; + } + + public ItemClickSupport setOnItemClickListener(OnItemClickListener listener) { + mOnItemClickListener = listener; + return this; + } + + public ItemClickSupport setOnItemLongClickListener(OnItemLongClickListener listener) { + mOnItemLongClickListener = listener; + return this; + } + + private void detach(RecyclerView view) { + view.removeOnChildAttachStateChangeListener(mAttachListener); + view.setTag(R.id.item_click_support, null); + } + + interface OnItemClickListener { + + void onItemClicked(RecyclerView recyclerView, int position, View v); + } + + public interface OnItemLongClickListener { + + boolean onItemLongClicked(RecyclerView recyclerView, int position, View v); + } +} diff --git a/app/src/main/java/org/glucosio/android/listener/RecyclerItemClickListener.java b/app/src/main/java/org/glucosio/android/listener/RecyclerItemClickListener.java deleted file mode 100644 index bb6a885a..00000000 --- a/app/src/main/java/org/glucosio/android/listener/RecyclerItemClickListener.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2016 Glucosio Foundation - * - * This file is part of Glucosio. - * - * Glucosio 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, version 3. - * - * Glucosio 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 Glucosio. If not, see . - * - * - */ - -package org.glucosio.android.listener; - -import android.content.Context; -import android.support.v7.widget.RecyclerView; -import android.view.GestureDetector; -import android.view.MotionEvent; -import android.view.View; - -public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener { - private OnItemClickListener mListener; - private GestureDetector mGestureDetector; - - public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) { - mListener = listener; - - mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { - @Override - public boolean onSingleTapUp(MotionEvent e) { - return true; - } - - @Override - public void onLongPress(MotionEvent e) { - View childView = recyclerView.findChildViewUnder(e.getX(), e.getY()); - - if (childView != null && mListener != null) { - mListener.onItemLongClick(childView, recyclerView.getChildPosition(childView)); - } - } - }); - } - - @Override - public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) { - View childView = view.findChildViewUnder(e.getX(), e.getY()); - - if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) { - mListener.onItemClick(childView, view.getChildPosition(childView)); - } - - return false; - } - - @Override - public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { - } - - @Override - public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { - } - - public static interface OnItemClickListener { - public void onItemClick(View view, int position); - - public void onItemLongClick(View view, int position); - } -} \ No newline at end of file diff --git a/app/src/main/res/values/ids.xml b/app/src/main/res/values/ids.xml new file mode 100644 index 00000000..fb4f5a76 --- /dev/null +++ b/app/src/main/res/values/ids.xml @@ -0,0 +1,4 @@ + + + + From 8c32177290906a9ddc846c390ff063878021335b Mon Sep 17 00:00:00 2001 From: Benjamin Kerensa Date: Sat, 17 Dec 2016 22:15:19 -0800 Subject: [PATCH 75/82] Bump Depends --- build.gradle | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/build.gradle b/build.gradle index 6cf04163..eddc3e82 100644 --- a/build.gradle +++ b/build.gradle @@ -27,11 +27,11 @@ buildscript { dependencies { // TODO: Please revert to a stable gradle version before releasing on prod // Alpha is required in devel to use Instant Run and speed up development process - classpath 'com.android.tools.build:gradle:2.2.2' + classpath 'com.android.tools.build:gradle:2.2.3' classpath 'com.google.gms:google-services:3.0.0' - classpath 'io.realm:realm-gradle-plugin:1.1.1' + classpath 'io.realm:realm-gradle-plugin:2.2.1' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' - classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.6.3' + classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.7.1' classpath 'com.github.ben-manes:gradle-versions-plugin:0.13.0' classpath 'org.jacoco:org.jacoco.core:0.7.7.201606060606' // NOTE: Do not place your application dependencies here; they belong @@ -43,20 +43,20 @@ allprojects { jcenter() } - ext.buildToolsVer = '25.0.0' + ext.buildToolsVer = '25.0.1' - ext.androidSupportVer = '25.0.0' - ext.googlePlayServicesVer = '9.4.0' + ext.androidSupportVer = '25.1.0' + ext.googlePlayServicesVer = '10.0.1' - ext.butterKnifeVer = '8.0.1' + ext.butterKnifeVer = '8.4.0' ext.junitVer = '4.12' - ext.mockitoVer = '1.10.17' + ext.mockitoVer = '2.3.7' ext.androidAssertJVer = '1.1.1' - ext.robolectricVer = '3.0' + ext.robolectricVer = '3.1' apply plugin: 'com.github.ben-manes.versions' } task wrapper(type: Wrapper) { - gradleVersion = '2.13' -} \ No newline at end of file + gradleVersion = '3.2.1' +} From 1ec6c55209e365c770882dd8d998c435b6305ebc Mon Sep 17 00:00:00 2001 From: Benjamin Kerensa Date: Sat, 17 Dec 2016 22:26:48 -0800 Subject: [PATCH 76/82] Bumping Depends --- app/build.gradle | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index bfa70c49..d24e159b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -121,16 +121,16 @@ dependencies { // Other libraries compile 'com.github.paolorotolo:expandableheightlistview:1.0.0' compile 'com.github.clans:fab:1.6.4' - compile 'com.wdullaer:materialdatetimepicker:2.4.0' - compile 'com.github.PhilJay:MPAndroidChart:v2.2.5' + compile 'com.wdullaer:materialdatetimepicker:3.0.0' + compile 'com.github.PhilJay:MPAndroidChart:v3.0.1' compile 'uk.co.chrisjenx:calligraphy:2.2.0' - compile 'net.danlew:android.joda:2.9.4.1' - compile('com.mikepenz:materialdrawer:5.4.0@aar') { + compile 'net.danlew:android.joda:2.9.5.1' + compile('com.mikepenz:materialdrawer:5.8.1@aar') { transitive = true } // https://mvnrepository.com/artifact/org.apache.commons/commons-math3 - compile files('libs/commons-math3-3.6.jar') + compile files('libs/commons-math3-3.6.1.jar') // Butterknife compile "com.jakewharton:butterknife:${butterKnifeVer}" @@ -147,7 +147,7 @@ dependencies { exclude group: 'commons-logging', module: 'commons-logging' exclude group: 'org.apache.httpcomponents', module: 'httpclient' } - testCompile 'io.reactivex:rxjava:1.1.8' + testCompile 'io.reactivex:rxjava:1.2.4' // Testing libraries androidTestCompile 'com.android.support.test:rules:0.4.1' From 13008b491c088454f3d825055def69bba077958f Mon Sep 17 00:00:00 2001 From: Benjamin Kerensa Date: Sat, 17 Dec 2016 23:00:03 -0800 Subject: [PATCH 77/82] Add Strings Add Strings for upcoming smart assistant and badges --- app/src/main/res/values/strings.xml | 43 ++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4e5727f0..949193ec 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -318,7 +318,48 @@ Hiking Yard work - + + + Welcome to Glucosio! + Glucosio is a free and open source app for managing your diabetes + Logging and Trends + Glucosio makes logging glucose levels and visualizing trends easy + Support Diabetes Research + Glucosio allows you to opt-in to sharing anonymous trends with academic diabetes researchers + Privacy Focused + Glucosio takes your privacy seriously and only shares undidenfiable trends if you opt-in + Improved Health Outcomes + Glucosio helps you track your glucose level trends and other health metrics for improved health outcomes + + + + + Your glucose levels yesterday were great! + Your glucose levels this week have been terrific! + Your morning time glucose level was perfect! + Your afternoon glucose level was perfect! + + + + + + Great Week + You achieved the one week of in range glucose levels badge! Great job! + Great Month + You achieved the one month of in range glucose levels badge! Great job! + Data Export + You achieved the data export badge for being a user who likes data portability! Great job! + Logged 100 + You achieved the logged 100 glucose readings badge! Great job! + Logged 250 + You achieved the logged 250 glucose readings badge! Great job! + Logged 500 + You achieved the logged 500 glucose readings badge! Great job! + 7-Days + You achieved the 7-Days of consistent glucose level logging badge! Great job! + + + Carbs: Protein: From 8f8ffc7450ee861b1954fc1a2a12ec698be0d5a2 Mon Sep 17 00:00:00 2001 From: Paolo Rotolo Date: Wed, 4 Jan 2017 12:25:21 +0100 Subject: [PATCH 78/82] Fix dependencies. --- app/build.gradle | 4 ++-- build.gradle | 8 ++++---- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d24e159b..5c9d7277 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -121,8 +121,8 @@ dependencies { // Other libraries compile 'com.github.paolorotolo:expandableheightlistview:1.0.0' compile 'com.github.clans:fab:1.6.4' - compile 'com.wdullaer:materialdatetimepicker:3.0.0' - compile 'com.github.PhilJay:MPAndroidChart:v3.0.1' + compile 'com.wdullaer:materialdatetimepicker:2.4.0' + compile 'com.github.PhilJay:MPAndroidChart:v2.2.5' compile 'uk.co.chrisjenx:calligraphy:2.2.0' compile 'net.danlew:android.joda:2.9.5.1' compile('com.mikepenz:materialdrawer:5.8.1@aar') { diff --git a/build.gradle b/build.gradle index eddc3e82..9ce4ca8b 100644 --- a/build.gradle +++ b/build.gradle @@ -27,9 +27,9 @@ buildscript { dependencies { // TODO: Please revert to a stable gradle version before releasing on prod // Alpha is required in devel to use Instant Run and speed up development process - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:2.3.0-beta1' classpath 'com.google.gms:google-services:3.0.0' - classpath 'io.realm:realm-gradle-plugin:2.2.1' + classpath 'io.realm:realm-gradle-plugin:1.2.0' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.7.1' classpath 'com.github.ben-manes:gradle-versions-plugin:0.13.0' @@ -51,12 +51,12 @@ allprojects { ext.butterKnifeVer = '8.4.0' ext.junitVer = '4.12' - ext.mockitoVer = '2.3.7' + ext.mockitoVer = '1.10.19' ext.androidAssertJVer = '1.1.1' ext.robolectricVer = '3.1' apply plugin: 'com.github.ben-manes.versions' } task wrapper(type: Wrapper) { - gradleVersion = '3.2.1' + gradleVersion = '2.13' } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f34d1082..c08c32b3 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sat Aug 06 17:49:05 CEST 2016 +#Tue Jan 03 15:21:53 CET 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.2-all.zip From 48ef1098c4bae4bd4f569cf19a72d2a7f1e5de09 Mon Sep 17 00:00:00 2001 From: Paolo Rotolo Date: Wed, 4 Jan 2017 13:49:05 +0100 Subject: [PATCH 79/82] Update .travis.yml --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 450daa9c..76923607 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,7 @@ jdk: android: components: - tools - - build-tools-25.0.0 + - build-tools-25.0.1 - android-25 - extra-android-support - extra-google-google_play_services @@ -39,4 +39,4 @@ before_cache: cache: directories: - $HOME/.gradle/caches/ - - $HOME/.gradle/wrapper/ \ No newline at end of file + - $HOME/.gradle/wrapper/ From 40a33f6e62bdc05a66973115be55ac47da1d520f Mon Sep 17 00:00:00 2001 From: Eugen Martynov Date: Thu, 5 Jan 2017 10:10:32 +0100 Subject: [PATCH 80/82] Fixing the tests run --- .../glucosio/android/GlucosioTestRunner.java | 29 ------------------- .../org/glucosio/android/RobolectricTest.java | 5 ++-- .../presenter/ExternalViewPresenterTest.java | 6 ++-- build.gradle | 2 +- 4 files changed, 6 insertions(+), 36 deletions(-) delete mode 100644 app/src/test/java/org/glucosio/android/GlucosioTestRunner.java diff --git a/app/src/test/java/org/glucosio/android/GlucosioTestRunner.java b/app/src/test/java/org/glucosio/android/GlucosioTestRunner.java deleted file mode 100644 index 9e234412..00000000 --- a/app/src/test/java/org/glucosio/android/GlucosioTestRunner.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.glucosio.android; - -import org.junit.runners.model.InitializationError; -import org.robolectric.RobolectricGradleTestRunner; -import org.robolectric.manifest.AndroidManifest; -import org.robolectric.manifest.BroadcastReceiverData; - -import java.util.ArrayList; -import java.util.List; - -public class GlucosioTestRunner extends RobolectricGradleTestRunner { - public GlucosioTestRunner(Class klass) throws InitializationError { - super(klass); - } - - @Override - protected AndroidManifest getAppManifest(org.robolectric.annotation.Config config) { - AndroidManifest manifest = super.getAppManifest(config); - List broadcastReceivers = manifest.getBroadcastReceivers(); - List removeList = new ArrayList<>(); - for (BroadcastReceiverData receiverData : broadcastReceivers) { - if (receiverData.getClassName().toLowerCase().contains("instabug")) { - removeList.add(receiverData); - } - } - broadcastReceivers.removeAll(removeList); - return manifest; - } -} diff --git a/app/src/test/java/org/glucosio/android/RobolectricTest.java b/app/src/test/java/org/glucosio/android/RobolectricTest.java index 0333e5cd..764152d5 100644 --- a/app/src/test/java/org/glucosio/android/RobolectricTest.java +++ b/app/src/test/java/org/glucosio/android/RobolectricTest.java @@ -9,10 +9,11 @@ import org.junit.runner.RunWith; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import org.robolectric.RobolectricTestRunner; @Ignore -@RunWith(GlucosioTestRunner.class) -@Config(constants = BuildConfig.class, sdk = 21, packageName = "org.glucosio.android") +@RunWith(RobolectricTestRunner.class) +@Config(constants = BuildConfig.class, sdk = 21) public abstract class RobolectricTest { protected Analytics getAnalytics() { return getTestApplication().getAnalytics(); diff --git a/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java b/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java index a2b0d05f..921e8b15 100644 --- a/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java +++ b/app/src/test/java/org/glucosio/android/presenter/ExternalViewPresenterTest.java @@ -1,21 +1,19 @@ package org.glucosio.android.presenter; import org.glucosio.android.BuildConfig; +import org.glucosio.android.RobolectricTest; import org.glucosio.android.tools.network.GlucosioExternalLinks; import org.glucosio.android.tools.network.NetworkConnectivity; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.robolectric.RobolectricGradleTestRunner; import org.robolectric.annotation.Config; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -@RunWith(RobolectricGradleTestRunner.class) -@Config(constants = BuildConfig.class, sdk = 21, packageName = "org.glucosio.android") -public class ExternalViewPresenterTest { +public class ExternalViewPresenterTest extends RobolectricTest { private ExternalViewPresenter.View view; private ExternalViewPresenter presenter; diff --git a/build.gradle b/build.gradle index 9ce4ca8b..3683951c 100644 --- a/build.gradle +++ b/build.gradle @@ -53,7 +53,7 @@ allprojects { ext.junitVer = '4.12' ext.mockitoVer = '1.10.19' ext.androidAssertJVer = '1.1.1' - ext.robolectricVer = '3.1' + ext.robolectricVer = '3.2' apply plugin: 'com.github.ben-manes.versions' } From 2d91ad235853fb1f9b95176152debd69f51dd932 Mon Sep 17 00:00:00 2001 From: Glucat Date: Thu, 5 Jan 2017 09:29:25 +0000 Subject: [PATCH 81/82] Automatic translation import (build 1086). --- app/src/main/res/values-aa-rER/strings.xml | 6 + app/src/main/res/values-ach-rUG/strings.xml | 6 + app/src/main/res/values-ae-rIR/strings.xml | 7 +- app/src/main/res/values-af-rZA/strings.xml | 6 + app/src/main/res/values-ak-rGH/strings.xml | 6 + app/src/main/res/values-am-rET/strings.xml | 6 + app/src/main/res/values-an-rES/strings.xml | 6 + app/src/main/res/values-ar-rSA/strings.xml | 7 +- app/src/main/res/values-arn-rCL/strings.xml | 6 + app/src/main/res/values-as-rIN/strings.xml | 6 + app/src/main/res/values-ast-rES/strings.xml | 8 +- app/src/main/res/values-av-rDA/strings.xml | 6 + app/src/main/res/values-ay-rBO/strings.xml | 6 + app/src/main/res/values-az-rAZ/strings.xml | 185 +++++++++++++++++++- app/src/main/res/values-ba-rRU/strings.xml | 6 + app/src/main/res/values-bal-rBA/strings.xml | 6 + app/src/main/res/values-ban-rID/strings.xml | 6 + app/src/main/res/values-be-rBY/strings.xml | 6 + app/src/main/res/values-ber-rDZ/strings.xml | 6 + app/src/main/res/values-bfo-rBF/strings.xml | 6 + app/src/main/res/values-bg-rBG/strings.xml | 7 +- app/src/main/res/values-bh-rIN/strings.xml | 6 + app/src/main/res/values-bi-rVU/strings.xml | 6 + app/src/main/res/values-bm-rML/strings.xml | 6 + app/src/main/res/values-bn-rBD/strings.xml | 7 +- app/src/main/res/values-bn-rIN/strings.xml | 7 +- app/src/main/res/values-bo-rBT/strings.xml | 6 + app/src/main/res/values-br-rFR/strings.xml | 6 + app/src/main/res/values-bs-rBA/strings.xml | 7 +- app/src/main/res/values-ca-rES/strings.xml | 8 +- app/src/main/res/values-ce-rCE/strings.xml | 6 + app/src/main/res/values-ceb-rPH/strings.xml | 6 + app/src/main/res/values-ch-rGU/strings.xml | 6 + app/src/main/res/values-chr-rUS/strings.xml | 6 + app/src/main/res/values-ckb-rIR/strings.xml | 6 + app/src/main/res/values-co-rFR/strings.xml | 6 + app/src/main/res/values-cr-rNT/strings.xml | 6 + app/src/main/res/values-crs-rSC/strings.xml | 6 + app/src/main/res/values-cs-rCZ/strings.xml | 7 +- app/src/main/res/values-csb-rPL/strings.xml | 6 + app/src/main/res/values-cv-rCU/strings.xml | 6 + app/src/main/res/values-cy-rGB/strings.xml | 6 + app/src/main/res/values-da-rDK/strings.xml | 6 + app/src/main/res/values-de-rDE/strings.xml | 13 +- app/src/main/res/values-dsb-rDE/strings.xml | 6 + app/src/main/res/values-dv-rMV/strings.xml | 6 + app/src/main/res/values-dz-rBT/strings.xml | 6 + app/src/main/res/values-ee-rGH/strings.xml | 6 + app/src/main/res/values-el-rCY/strings.xml | 6 + app/src/main/res/values-el-rGR/strings.xml | 6 + app/src/main/res/values-en-rGB/strings.xml | 7 +- app/src/main/res/values-en-rPT/strings.xml | 7 +- app/src/main/res/values-en-rUS/strings.xml | 7 +- app/src/main/res/values-eo-rUY/strings.xml | 7 +- app/src/main/res/values-es-rCL/strings.xml | 20 ++- app/src/main/res/values-es-rCO/strings.xml | 21 ++- app/src/main/res/values-es-rDO/strings.xml | 21 ++- app/src/main/res/values-es-rES/strings.xml | 20 ++- app/src/main/res/values-es-rMX/strings.xml | 20 ++- app/src/main/res/values-es-rVE/strings.xml | 20 ++- app/src/main/res/values-et-rEE/strings.xml | 6 + app/src/main/res/values-eu-rES/strings.xml | 6 + app/src/main/res/values-fa-rAF/strings.xml | 6 + app/src/main/res/values-fa-rIR/strings.xml | 7 +- app/src/main/res/values-ff-rZA/strings.xml | 6 + app/src/main/res/values-fi-rFI/strings.xml | 6 + app/src/main/res/values-fil-rPH/strings.xml | 7 +- app/src/main/res/values-fj-rFJ/strings.xml | 6 + app/src/main/res/values-fo-rFO/strings.xml | 6 + app/src/main/res/values-fr-rFR/strings.xml | 10 +- app/src/main/res/values-fr-rQC/strings.xml | 11 +- app/src/main/res/values-fra-rDE/strings.xml | 6 + app/src/main/res/values-frp-rIT/strings.xml | 6 + app/src/main/res/values-fur-rIT/strings.xml | 6 + app/src/main/res/values-fy-rNL/strings.xml | 7 +- app/src/main/res/values-ga-rIE/strings.xml | 7 +- app/src/main/res/values-gaa-rGH/strings.xml | 6 + app/src/main/res/values-gd-rGB/strings.xml | 6 + app/src/main/res/values-gl-rES/strings.xml | 8 +- app/src/main/res/values-gn-rPY/strings.xml | 6 + app/src/main/res/values-gu-rIN/strings.xml | 7 +- app/src/main/res/values-gv-rIM/strings.xml | 6 + app/src/main/res/values-ha-rHG/strings.xml | 6 + app/src/main/res/values-haw-rUS/strings.xml | 7 +- app/src/main/res/values-hi-rIN/strings.xml | 7 +- app/src/main/res/values-hil-rPH/strings.xml | 6 + app/src/main/res/values-hmn-rCN/strings.xml | 6 + app/src/main/res/values-ho-rPG/strings.xml | 6 + app/src/main/res/values-hr-rHR/strings.xml | 7 +- app/src/main/res/values-hsb-rDE/strings.xml | 6 + app/src/main/res/values-ht-rHT/strings.xml | 6 + app/src/main/res/values-hu-rHU/strings.xml | 6 + app/src/main/res/values-hy-rAM/strings.xml | 6 + app/src/main/res/values-hz-rNA/strings.xml | 6 + app/src/main/res/values-ig-rNG/strings.xml | 6 + app/src/main/res/values-ii-rCN/strings.xml | 6 + app/src/main/res/values-ilo-rPH/strings.xml | 6 + app/src/main/res/values-in-rID/strings.xml | 89 +++++++++- app/src/main/res/values-is-rIS/strings.xml | 6 + app/src/main/res/values-it-rIT/strings.xml | 8 +- app/src/main/res/values-iu-rNU/strings.xml | 6 + app/src/main/res/values-iw-rIL/strings.xml | 7 +- app/src/main/res/values-ja-rJP/strings.xml | 8 +- app/src/main/res/values-jbo-rEN/strings.xml | 6 + app/src/main/res/values-ji-rDE/strings.xml | 6 + app/src/main/res/values-jv-rID/strings.xml | 6 + app/src/main/res/values-ka-rGE/strings.xml | 7 +- app/src/main/res/values-kab/strings.xml | 6 + app/src/main/res/values-kdh/strings.xml | 6 + app/src/main/res/values-kg-rCG/strings.xml | 6 + app/src/main/res/values-kj-rAO/strings.xml | 6 + app/src/main/res/values-kk-rKZ/strings.xml | 6 + app/src/main/res/values-kl-rGL/strings.xml | 6 + app/src/main/res/values-km-rKH/strings.xml | 6 + app/src/main/res/values-kmr-rTR/strings.xml | 6 + app/src/main/res/values-kn-rIN/strings.xml | 6 + app/src/main/res/values-ko-rKR/strings.xml | 102 ++++++++--- app/src/main/res/values-kok-rIN/strings.xml | 6 + app/src/main/res/values-ks-rIN/strings.xml | 6 + app/src/main/res/values-ks-rPK/strings.xml | 6 + app/src/main/res/values-ku-rTR/strings.xml | 6 + app/src/main/res/values-kv-rKO/strings.xml | 6 + app/src/main/res/values-kw-rGB/strings.xml | 6 + app/src/main/res/values-ky-rKG/strings.xml | 6 + app/src/main/res/values-la-rLA/strings.xml | 6 + app/src/main/res/values-lb-rLU/strings.xml | 6 + app/src/main/res/values-lg-rUG/strings.xml | 7 +- app/src/main/res/values-li-rLI/strings.xml | 6 + app/src/main/res/values-lij-rIT/strings.xml | 6 + app/src/main/res/values-ln-rCD/strings.xml | 6 + app/src/main/res/values-lo-rLA/strings.xml | 8 +- app/src/main/res/values-lt-rLT/strings.xml | 6 + app/src/main/res/values-luy-rKE/strings.xml | 6 + app/src/main/res/values-lv-rLV/strings.xml | 6 + app/src/main/res/values-mai-rIN/strings.xml | 6 + app/src/main/res/values-me-rME/strings.xml | 6 + app/src/main/res/values-mg-rMG/strings.xml | 6 + app/src/main/res/values-mh-rMH/strings.xml | 6 + app/src/main/res/values-mi-rNZ/strings.xml | 6 + app/src/main/res/values-mk-rMK/strings.xml | 6 + app/src/main/res/values-ml-rIN/strings.xml | 7 +- app/src/main/res/values-mn-rMN/strings.xml | 6 + app/src/main/res/values-moh-rCA/strings.xml | 6 + app/src/main/res/values-mos/strings.xml | 6 + app/src/main/res/values-mr-rIN/strings.xml | 6 + app/src/main/res/values-ms-rMY/strings.xml | 6 + app/src/main/res/values-mt-rMT/strings.xml | 6 + app/src/main/res/values-my-rMM/strings.xml | 7 +- app/src/main/res/values-na-rNR/strings.xml | 6 + app/src/main/res/values-nb-rNO/strings.xml | 6 + app/src/main/res/values-nds-rDE/strings.xml | 6 + app/src/main/res/values-ne-rNP/strings.xml | 7 +- app/src/main/res/values-ng-rNA/strings.xml | 6 + app/src/main/res/values-nl-rNL/strings.xml | 38 ++-- app/src/main/res/values-nn-rNO/strings.xml | 6 + app/src/main/res/values-no-rNO/strings.xml | 6 + app/src/main/res/values-nr-rZA/strings.xml | 6 + app/src/main/res/values-ns-rZA/strings.xml | 6 + app/src/main/res/values-ny-rMW/strings.xml | 6 + app/src/main/res/values-oc-rFR/strings.xml | 6 + app/src/main/res/values-oj-rCA/strings.xml | 6 + app/src/main/res/values-om-rET/strings.xml | 6 + app/src/main/res/values-or-rIN/strings.xml | 6 + app/src/main/res/values-os-rSE/strings.xml | 6 + app/src/main/res/values-pa-rIN/strings.xml | 7 +- app/src/main/res/values-pa-rPK/strings.xml | 7 +- app/src/main/res/values-pam-rPH/strings.xml | 7 +- app/src/main/res/values-pap/strings.xml | 6 + app/src/main/res/values-pcm-rNG/strings.xml | 6 + app/src/main/res/values-pi-rIN/strings.xml | 6 + app/src/main/res/values-pl-rPL/strings.xml | 6 + app/src/main/res/values-ps-rAF/strings.xml | 6 + app/src/main/res/values-pt-rBR/strings.xml | 21 ++- app/src/main/res/values-pt-rPT/strings.xml | 6 + app/src/main/res/values-qu-rPE/strings.xml | 6 + app/src/main/res/values-quc-rGT/strings.xml | 6 + app/src/main/res/values-qya-rAA/strings.xml | 6 + app/src/main/res/values-rm-rCH/strings.xml | 6 + app/src/main/res/values-rn-rBI/strings.xml | 6 + app/src/main/res/values-ro-rRO/strings.xml | 11 +- app/src/main/res/values-ru-rRU/strings.xml | 8 +- app/src/main/res/values-rw-rRW/strings.xml | 6 + app/src/main/res/values-ry-rUA/strings.xml | 6 + app/src/main/res/values-sa-rIN/strings.xml | 6 + app/src/main/res/values-sat-rIN/strings.xml | 6 + app/src/main/res/values-sc-rIT/strings.xml | 6 + app/src/main/res/values-sco-rGB/strings.xml | 6 + app/src/main/res/values-sd-rPK/strings.xml | 6 + app/src/main/res/values-se-rNO/strings.xml | 6 + app/src/main/res/values-sg-rCF/strings.xml | 6 + app/src/main/res/values-sh-rHR/strings.xml | 6 + app/src/main/res/values-si-rLK/strings.xml | 6 + app/src/main/res/values-sk-rSK/strings.xml | 7 +- app/src/main/res/values-sl-rSI/strings.xml | 8 +- app/src/main/res/values-sma-rNO/strings.xml | 6 + app/src/main/res/values-sn-rZW/strings.xml | 6 + app/src/main/res/values-so-rSO/strings.xml | 6 + app/src/main/res/values-son-rZA/strings.xml | 6 + app/src/main/res/values-sq-rAL/strings.xml | 7 +- app/src/main/res/values-sr-rCS/strings.xml | 6 + app/src/main/res/values-sr-rSP/strings.xml | 6 + app/src/main/res/values-ss-rZA/strings.xml | 6 + app/src/main/res/values-st-rZA/strings.xml | 6 + app/src/main/res/values-su-rID/strings.xml | 6 + app/src/main/res/values-sv-rFI/strings.xml | 7 +- app/src/main/res/values-sv-rSE/strings.xml | 7 +- app/src/main/res/values-sw-rKE/strings.xml | 6 + app/src/main/res/values-sw-rTZ/strings.xml | 7 +- app/src/main/res/values-syc-rSY/strings.xml | 6 + app/src/main/res/values-ta-rIN/strings.xml | 6 + app/src/main/res/values-tay-rTW/strings.xml | 6 + app/src/main/res/values-te-rIN/strings.xml | 6 + app/src/main/res/values-tg-rTJ/strings.xml | 6 + app/src/main/res/values-th-rTH/strings.xml | 7 +- app/src/main/res/values-ti-rER/strings.xml | 6 + app/src/main/res/values-tk-rTM/strings.xml | 6 + app/src/main/res/values-tl-rPH/strings.xml | 6 + app/src/main/res/values-tn-rZA/strings.xml | 6 + app/src/main/res/values-tr-rTR/strings.xml | 7 +- app/src/main/res/values-ts-rZA/strings.xml | 6 + app/src/main/res/values-tt-rRU/strings.xml | 6 + app/src/main/res/values-tw-rTW/strings.xml | 6 + app/src/main/res/values-ty-rPF/strings.xml | 6 + app/src/main/res/values-tzl/strings.xml | 6 + app/src/main/res/values-ug-rCN/strings.xml | 6 + app/src/main/res/values-uk-rUA/strings.xml | 7 +- app/src/main/res/values-ur-rPK/strings.xml | 6 + app/src/main/res/values-uz-rUZ/strings.xml | 6 + app/src/main/res/values-val-rES/strings.xml | 6 + app/src/main/res/values-ve-rZA/strings.xml | 6 + app/src/main/res/values-vec-rIT/strings.xml | 6 + app/src/main/res/values-vi-rVN/strings.xml | 6 + app/src/main/res/values-vls-rBE/strings.xml | 6 + app/src/main/res/values-wa-rBE/strings.xml | 6 + app/src/main/res/values-wo-rSN/strings.xml | 6 + app/src/main/res/values-xh-rZA/strings.xml | 6 + app/src/main/res/values-yo-rNG/strings.xml | 6 + app/src/main/res/values-zea/strings.xml | 6 + app/src/main/res/values-zh-rCN/strings.xml | 40 ++++- app/src/main/res/values-zh-rTW/strings.xml | 7 +- app/src/main/res/values-zu-rZA/strings.xml | 6 + 241 files changed, 1938 insertions(+), 107 deletions(-) diff --git a/app/src/main/res/values-aa-rER/strings.xml b/app/src/main/res/values-aa-rER/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-aa-rER/strings.xml +++ b/app/src/main/res/values-aa-rER/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ach-rUG/strings.xml b/app/src/main/res/values-ach-rUG/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ach-rUG/strings.xml +++ b/app/src/main/res/values-ach-rUG/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ae-rIR/strings.xml b/app/src/main/res/values-ae-rIR/strings.xml index 8e1c8646..467ce04f 100644 --- a/app/src/main/res/values-ae-rIR/strings.xml +++ b/app/src/main/res/values-ae-rIR/strings.xml @@ -95,9 +95,14 @@ بروزرسانی همین حالا متوجه شدم بروزرسانی وزن - ارسال بازخورد + + + + + + diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ak-rGH/strings.xml b/app/src/main/res/values-ak-rGH/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ak-rGH/strings.xml +++ b/app/src/main/res/values-ak-rGH/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-am-rET/strings.xml b/app/src/main/res/values-am-rET/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-am-rET/strings.xml +++ b/app/src/main/res/values-am-rET/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-an-rES/strings.xml b/app/src/main/res/values-an-rES/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-an-rES/strings.xml +++ b/app/src/main/res/values-an-rES/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 76e5dc45..5aa75b5f 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -136,7 +136,6 @@ جلوكوسيو يأتي بفئات افتراضية لإدخال الجلوكوز ولكن يمكنك إنشاء فئات مخصصة في الإعدادات بحيث تتطابق مع احتياجاتك الخاصة. تردد هنا عدة مرات مساعد جلوكوسيو يوفر نصائح عدة ، لذلك قم بالتردد هنا لتتعرف على إجراءات يمكنك اتخاذها لتحسين تجربة جلوكوسيو ونصائح مفيدة أخرى. - إرسال ملاحظات إذا كان لديك اي مشكلة تقنية أو اقتراحات حول جلوكوسيو نحن نشجعكم على ارساله من قائمة الإعدادات من أجل مساعدتنا على تحسين جلوكوسيو. إضافة قراءة تأكد من إضافة قراءات السكر بانتظام حتى يمكننا مساعدتك على تتبع مستويات السكر الخاص بك مع الوقت. @@ -198,6 +197,12 @@ المصارعة المشي لمسافات طويلة (تجوال) أعمال الحديقة المنزلية + + + + + + الكربوهيدرات: البروتين: diff --git a/app/src/main/res/values-arn-rCL/strings.xml b/app/src/main/res/values-arn-rCL/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-arn-rCL/strings.xml +++ b/app/src/main/res/values-arn-rCL/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-as-rIN/strings.xml b/app/src/main/res/values-as-rIN/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-as-rIN/strings.xml +++ b/app/src/main/res/values-as-rIN/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ast-rES/strings.xml b/app/src/main/res/values-ast-rES/strings.xml index 5cc62b63..e5e3dded 100644 --- a/app/src/main/res/values-ast-rES/strings.xml +++ b/app/src/main/res/values-ast-rES/strings.xml @@ -127,7 +127,6 @@ Glucosio vien con estayes predeterminaes pa la entrada de glucosa pero pues crear estayes personalizaes nos axustes pa concasar coles tos necesidaes úniques. Compruébalo equí davezu L\'asistente Glucosio apurre conseyos regulaes y siguirá ameyorando, asina qu\'equí comprueba siempres les aiciones que pues tomar p\'ameyorar la to esperiencia Glucosio y pa otros conseyos útiles. - Unvia feedback Si alcuentres cualesquier torga téunica o tienes feedback tocante a Glucosio encamentámoste unvialo nel menú d\'axustes p\'ayudamos a ameyorar Glucosio. Amiesta una llectura Asegúrate d\'amestar davezu los tos niveles de glucosa nel sangre pa qu\'asina podamos siguilos nel tiempu. @@ -176,6 +175,12 @@ Llucha llibre Senderismu Trabayu de campu + + + + + + Carbohidratos: Proteines: @@ -242,6 +247,5 @@ mmol/mol mmol/L Recordatorios - ¡Hora de rexistrar el to nivel de glucosa! Nun s\'afitaron recordatorios. Amiesta nuevos equí. diff --git a/app/src/main/res/values-av-rDA/strings.xml b/app/src/main/res/values-av-rDA/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-av-rDA/strings.xml +++ b/app/src/main/res/values-av-rDA/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ay-rBO/strings.xml b/app/src/main/res/values-ay-rBO/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ay-rBO/strings.xml +++ b/app/src/main/res/values-ay-rBO/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-az-rAZ/strings.xml b/app/src/main/res/values-az-rAZ/strings.xml index b9b1354e..23038f8f 100644 --- a/app/src/main/res/values-az-rAZ/strings.xml +++ b/app/src/main/res/values-az-rAZ/strings.xml @@ -22,9 +22,11 @@ Nizamlamalar Əks əlaqə + Dostunu dəvət et Ön baxış Tarix İp ucları + Yeni məlumat əlavə et Salam. Salam. İstifadə şərtləri. @@ -39,6 +41,14 @@ Diyabet tipi Tip 1 Tip 2 + Hamiləlik + LADA + Üstünlük verilən qlükoza vahidi + Üstünlük verilən HbA1c vahidi + faiz + Üstünlük verilən çəki vahidi + kiloqram + funt Araştırma üçün anonim məlumat göndər. Bu seçimləri sonra dəyişə bilərsiniz. Növbəti @@ -55,7 +65,10 @@ Nahardan sonra Şam yeməyindən əvvəl Şam yeməyindən sonra + Məzə + Yatmaq vaxtı Gecə + Aclıq qlükozası Yenidən yoxla Digər LƏĞV ET @@ -73,7 +86,9 @@ Gün Həftə Haqqında + Bu xüsusiyyətlər test edilir və tam çalışmaya bilər çünki istifadəçilərin test etməsi üçündür. Bizə geri bildiriş göndərmək üçün telefonu silkələməyi unutmayın. Versiya + Yaxında... İstifadə şərtləri Tip Çəki @@ -108,6 +123,8 @@ Köməkçi İndi yenilə OLDU, ANLADIM + GERİ BİLDİRİŞ GÖNDƏR + CANLI SÖHBƏT OXUMA ƏLAVƏ ET İNDİ SINA Çəkinizi yeniləyin @@ -118,18 +135,184 @@ Glucosio, standart olaraq qlükoza kateqoriyalara bölünmüş halda gəlir, amma siz nizamlamalarda şəxsi kateqoriyalarınızı yarada bilərsiniz. Buranı tez-tez yoxla Glucosio köməkçisi müntəzəm məsləhətlər verir və yaxşılaşmağa davam edəcək, buna görə hər zaman Glucosio təcrübənizi yaxşılaşdıracaq və digər faydalı şeylər üçün buranı yoxlayın. - Əks əlaqə göndər Əgər siz hər hansı texniki problem aşkar etsəniz və ya Glucosio ilə əks əlaqə yaratmaq istəsəniz, Glucosio-u yaxşılaşdırmağa kömək etmək üçün nizamlamalardan bizə təqdim etməyinizi xahiş edirik. Oxuma əlavə et Qlükozanın öz ifadələrini daim əlavə etdiyinizə əmin olun. Buna görə sizə uzun vaxt ərzində qlükozanın səviyyələrini izləməyə kömək edə bilərik. + Məlumatlarınızı ixrac edin + Məlumatlarınızı həkiminizlə paylaşın və ya ixrac etmə funksiyasından istifadə etmək üçün Google drive-da ehtiyatlayın. + HbA1c hesabla + Glucosio-nın daxili HbA1c kalkulyatoru artıq naviqasiya panelində mövcuddur. Orta qan qlükozanızı daxil edin və hesablanmış HbA1c dəyərini həmən an yadda saxlayın. Seçilən aralıq Şəxsi aralıq Minimum dəyər Maksimum dəyər + Dil + Quraşıldırılmış e-poçt proqramı yoxdur. Zəhmət olmasa, məktubunuzu hello@glucosio.org ünvanına göndərin + Başqa insanlar dəvət et + Diabetlərin idarə edilməsi və araşdırılması üçün olan açıq qaynaqlı Glucosio proqramını sınayın. + Glucosio-nı sınayın + Google Drive Ehtiyatlama + Ehtiyatla və İxrac et + Gizlilik + Glucosio-dan istifadə etməklə aşağıdakılarla razılaşırsınız. + Google Drive + Glucosio haqqında + Glucosio-a qiymət ver + Açıq qaynaq lisenziyaları + FreeStyle LibreⓇ dəstəyini aktiv et + EKSPERİMENTAL: FreeStyle LibreⓇ dəstəyini aktiv et + EKSPERİMENTAL: Oxunabilirliliyi disleksiyalı istifadəçilər üçün yaxşılaşdır + Oxunabilirliliyi disleksiyalı istifadəçilər üçün yaxşılaşdır + Glucosio-a dəstək ol + OLDU + Qanda şəkərin az olması + Az + Yüksək + Qanda şəkərin az olması + Yavaş yürüş + Sürətli yürüş + Qaçış + Qaçış + Üzgüçülük + Rəqs etmə + Rolik sürmə + Velosiped sürmə + Qolf + Beyzbol + Badminton + Futbol + Basketbol + Voleybol + Kriket + Frizbi + Xizək sürmə + Boks + Tenis + Masa tenisi + Döyüş sənətləri + Dağa dırmanma + Güləş + Gəxinti + Baxça işlərii + + + + + + + Karbohidrat: + Protein: + Şəkər: + Yağ: + Yaradıcılar + Dəstək olun + Tərcüməyə dəstək olun + İnkişaf etdirməyə dəstək olun + Diskusiya qrupumuza qoşulun + E-poçt siyaıhımıza abunə olun + ARXİVLƏŞDİRİLMİŞ İPUCLARI + Məlumatı ixrac et + Kimdən: + Kimə: + Bu gün seç + İXRAC ET + Məlumatı ixrac et + Hər şeyi ixrac et + İstifadə edərək paylaş + Glucosio məlumatı + "İxrac edilir" + oxunur + Glucosio ekran şəklini saxlamaq üçün yaddaş icazələrinə ehtiyac duyur + Ekran görüntüsü qalereyada saxlanıldı + Qalereyada saxlamada səhv baş verdi + İxrac etmə sıxlığı + Məlumatların ixracında problem oldu. Lütfən yenidən yoxlayın. + İxrac ediləcək məlumat yoxdu. + Yeni məlumat əlavə edildi Çəki + Ketonlar + Minimum təzyiq + Maksimum təzyiq + Cəmi xalestrol + LDL xolesterol + HDL xolesterol + Hba1C Qlükoza dərəcəsi haqqında məlumat əlavə et + Qlükoza məlumatı əlavə et + Çəki əlavə et + Çəkini redaktə et + Xalestrol səviyyəsi əlavə et + Xalestrol səviyyəsini redaktə et + Hb1AC əlavə et + Hb1AC redaktə et + Ketonlar əlavə et + Ketonlar redaktə et + Qan təzyiqi əlavə et + Qan təzyiqi redaktə et + Çəki + Qan təzyiqi + Xalestrol səviyyəsi + Hba1C Məlumatı + Qan qlükozası səviyyəsi + Hazırda qeyd var. Yeni qeyd əlavə etmək üçün onu silin. + Zəhmət olmasa, telefonunuzu senosun üzərinə qoyun və silkələnənə qədər hərəkət etdirməyin. + Bu cihaz NFC dəstəkləmir. + NFC söndürülüb. + FreeStyle Libre®-dan əlavə et + NFC bağlantısı açılarkən xəta! + FreeStyle Libre®-dan məlumat uğurla əlavə edildi + HbA1c hesablamaq üçün kifayət qədər məlumat yoxdur + HbA1c: + Sizin FreeStyle Libre®-izdən əlavə edin + ORTA QAN QLÜKOZA SƏVİYYƏSİ + HbA1c Kalkulyatoru + YADDA SAXLA + Dəstək + Sizə necə kömək edə bilərik? + E-poçt + Canlı söhbət + Dəstək forumu + Qan qlükoza səviyyənizi qeyd etmə vaxtıdır! + Dərmanlarınızı qeyd etmə vaxtıdır! + Bu sadəcə son ayın məlumatlarının orta dəyərləri ilə hesablanmış təxmini dəyərdir. Bu təxmini dəyərləri istifadə edərkən HbA1c hesablanması üçün təsdiqlənmiş geniş formula istifadə edilir, biz istifadəçilərə bunu sadəcə təxmin olaraq istifadə etməyi məsləhət görürük. + Qeydlər + Ehtiyatla və ixrac et + Google drive-da ehtiyatla + Bərpa et + CSV ixrac + Avtomatik ehtiyatlama + Məlumatların Google drive-da ehtiyatlanması sizə cihazınızı itirərkən və ya dəyişərkən onları yenidən bərpa etmək imkanı verir. + Dəyişikliklərin tətbiqi üçün yenidən başladılır... + Glucosio məlumat bazasını Google Drive ilə sinxronlaşdır. + Glucosio məlumat bazasını cihazınızı itirərkən və ya dəyişərkən bərpa edə və ya iki cihaz arasında sinxronlaşdıra biləcəksiniz. + Məlumat bazası uğurla Google drive-da ehtiyatlandı + Məlumat bazası uğurla Google drive-dan bərpa edildi + Səhv baş verdi. Yenidən yoxlayın :/ + Son ehtiyat: + Ehtiyatlama qovluğu + Nizamlanmayıb + Ehtiyatla + Son ehtiyatlamalar + Daha çox ehtiyat göstər + Əvvəlki versiyanı bərpa et + Ehtiyatın bərpası bütün mövcud məlumatları ehtiyatdakı ilə dəyişəcək. + Ehtiyat detalları + Ləğv et + Ehtiyatı bərpa et + Drive-dan bərpa et + Drive-da bərpa ediləcək etibarlı ehtiyat tapılmadı + Glucosio Google Drive ehtiyatlama üçün Google play xidmətlərinə ehtiyac duyur. + CSV fayla ixrac et + Drive-da idarə et + mmol/mol + Köhnə qrafikə qayıt + tarix + yadda saxla + Xatırlatmalar + Məlumat əlavə et + Xatırlatma əlavə edilməyib. Yeni xatırlatma əlavə et. diff --git a/app/src/main/res/values-ba-rRU/strings.xml b/app/src/main/res/values-ba-rRU/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ba-rRU/strings.xml +++ b/app/src/main/res/values-ba-rRU/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-bal-rBA/strings.xml b/app/src/main/res/values-bal-rBA/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-bal-rBA/strings.xml +++ b/app/src/main/res/values-bal-rBA/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ban-rID/strings.xml b/app/src/main/res/values-ban-rID/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ban-rID/strings.xml +++ b/app/src/main/res/values-ban-rID/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-be-rBY/strings.xml b/app/src/main/res/values-be-rBY/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-be-rBY/strings.xml +++ b/app/src/main/res/values-be-rBY/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ber-rDZ/strings.xml b/app/src/main/res/values-ber-rDZ/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ber-rDZ/strings.xml +++ b/app/src/main/res/values-ber-rDZ/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-bfo-rBF/strings.xml b/app/src/main/res/values-bfo-rBF/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-bfo-rBF/strings.xml +++ b/app/src/main/res/values-bfo-rBF/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index 46665504..157ba917 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -124,7 +124,6 @@ В Glucosio са предложени готови категории за въвеждане на данни за кръвната захар, но можете да създадете собствени категории в настройките, за да отговарят на вашите уникални нужди. Проверявайте често тук Glucosio помощникът осигурява редовни съвети и ще продължи да се подобрява, така че винаги проверявай тук за полезни действия, които да подобрят вашата употреба на Glucosio и за други полезни съвети. - Изпрати отзив Ако откриете някакви технически грешки или имате отзив за Glucosio ви насърчаваме да го изпратите в менюто \"Настройки\", за да ни помогнете да усъвършенстваме Glucosio. Добави стойност Не забравяйте редовно да добавяте показанията на кръвната ви захар, така ще можем да ви помогнем да проследите нивата с течение на времето. @@ -173,6 +172,12 @@ Бойни изкуства Скално катерене Кеч + + + + + + Въглехидрати: Протеин: diff --git a/app/src/main/res/values-bh-rIN/strings.xml b/app/src/main/res/values-bh-rIN/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-bh-rIN/strings.xml +++ b/app/src/main/res/values-bh-rIN/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-bi-rVU/strings.xml b/app/src/main/res/values-bi-rVU/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-bi-rVU/strings.xml +++ b/app/src/main/res/values-bi-rVU/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-bm-rML/strings.xml b/app/src/main/res/values-bm-rML/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-bm-rML/strings.xml +++ b/app/src/main/res/values-bm-rML/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml index e589a286..446b5317 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -118,7 +118,6 @@ গ্লুকোসিওতে কিছু ডিফল্ট বিষয়শ্রেণী থাকে আপনার গ্লুকোজ ইনপুট দেওয়ার জন্য তবে আপনি নিজেও আপনার সাথে মিল রেখে সেটিং থেকে নিজস্ব বিষয়শ্রেণী তৈরি করতে পারেন। এখানে প্রায়ই পরীক্ষা করুন গ্লুকোসিও সহযোগী নিয়মিত পরামর্শ প্রদান করে এবং প্রতিনিয়ত নিজেকে আরও ভালো করছে, তাই আপনার গ্লুকোসিও অভিজ্ঞতাকে আরও ভালো করতে এবং অন্যান্য আরও উপকারী পরামর্শ পেতে নিয়মিত এখানে দেখুন এবং কি করতে হবে জানুন। - ফিডব্যাক জমা করুন যেকোন কারিগরি সমস্যায় বা যদি গ্লুকোসিও সম্পর্কে কোন ফিডব্যাক থাকে তাহলে গ্লুকোসিওকে আরও ভালো করতে সেটিং মেনু থেকে তা সাবমিট করুন। পড়ায় যুক্ত করুন অবশ্যই নিয়মিত আপনার গ্লুকোজের মাত্রা যোগ করবেন যেন আমরা আপনাকে আপনার গ্লুকোজের মাত্রা সময়ে সময়ে ট্র্যাক করতে সহযোগীতা করতে পারি। @@ -128,6 +127,12 @@ সর্বোচ্চ মান + + + + + + ওজন diff --git a/app/src/main/res/values-bn-rIN/strings.xml b/app/src/main/res/values-bn-rIN/strings.xml index 473494d8..78512936 100644 --- a/app/src/main/res/values-bn-rIN/strings.xml +++ b/app/src/main/res/values-bn-rIN/strings.xml @@ -122,7 +122,6 @@ Glucosio-তে কিছু ডিফল্ট বিষয়শ্রেণী থাকে আপনার গ্লুকোজ ইনপুট দেওয়ার জন্য তবে আপনি নিজেও আপনার সাথে মিল রেখে সেটিংস থেকে নিজস্ব বিষয়শ্রেণী তৈরি করতে পারেন। এখানে প্রায়ই পরীক্ষা করুন Glucosio সহযোগী নিয়মিত পরামর্শ প্রদান করে এবং প্রতিনিয়ত নিজেকে আরও ভালো করছে, তাই আপনার Glucosio অভিজ্ঞতাকে আরও ভালো করতে এবং অন্যান্য আরও উপকারী পরামর্শ পেতে নিয়মিত এখানে দেখুন এবং কি করতে হবে জানুন। - ফিডব্যাক জমা করুন যেকোন কারিগরি সমস্যায় বা যদি Glucosio সম্পর্কে কোন ফিডব্যাক থাকে তাহলে Glucosio-কে আরও ভালো করতে সেটিংস মেনু থেকে তা সাবমিট করুন। পড়া যোগ করুন অবশ্যই নিয়মিত আপনার গ্লুকোজের মাত্রা যোগ করবেন যেন আমরা আপনাকে আপনার গ্লুকোজের মাত্রা সময়ে সময়ে ট্র্যাক করতে সহযোগীতা করতে পারি। @@ -134,6 +133,12 @@ অন্যান্য মানুষদের আমন্ত্রণ করুন + + + + + + ওজন diff --git a/app/src/main/res/values-bo-rBT/strings.xml b/app/src/main/res/values-bo-rBT/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-bo-rBT/strings.xml +++ b/app/src/main/res/values-bo-rBT/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-br-rFR/strings.xml b/app/src/main/res/values-br-rFR/strings.xml index ff3bd3c9..eada4fa0 100644 --- a/app/src/main/res/values-br-rFR/strings.xml +++ b/app/src/main/res/values-br-rFR/strings.xml @@ -61,6 +61,12 @@ en reizh an yec\'hed + + + + + + diff --git a/app/src/main/res/values-bs-rBA/strings.xml b/app/src/main/res/values-bs-rBA/strings.xml index 27d91295..2b5b0a35 100644 --- a/app/src/main/res/values-bs-rBA/strings.xml +++ b/app/src/main/res/values-bs-rBA/strings.xml @@ -122,7 +122,6 @@ Glucosio dolazi sa izvornim kategorijama za unos glukoze ali vi u postavkama možete kreirati zasebne kategorije koje odgovaraju vašim potrebama. Često provjerite ovdje Glucosio asistent pruža redovne savjete i nastavit će se unapređivati, stoga često provjerite ovdje za korisne akcije koje možete poduzeti da poboljšanje svog Glucosio doživljaja te druge korisne savjete. - Pošalji povratne informacije Ukoliko naiđete na tehničke probleme ili imate druge povratne informacije o Glucosiu, molimo vas da ih pošaljete putem menija za postavke kako bismo unaprijedili Glucosio. Dodaj očitavanje Pobrinite se da redovno dodajete svoja očitavanja glukoze kako bismo vam pomogli da pratite vaše nivoe glukoze tokom vremena. @@ -174,6 +173,12 @@ Skijanje Boks Tenis + + + + + + Nivo holesterola diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 6f2823f9..c64e875e 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -136,7 +136,6 @@ El Glucosio ve amb categories predeterminades per entrada de glucosa però podeu crear categories personalitzades dins la configuració per ajustar-ho a les vostres necessitats particulars. Comprova sovint aquí L\'assistent de Glucosio proporciona consells regulars i continuarà millorant, així que comproveu sempre aquí els passos que podeu prendre per millorar l\'experiència de Glucosio i altres consells útils. - Envia comentari Si trobeu incidències tècniques o teniu comentaris sobre Glucosio us animem a enviar-ho des del menú de configuració per tal d\'ajudar-nos a millorar Glucosio. Afegeix una lectura Assegureu-vos d\'afegir regularment les vostres lectures de glucosa per tal que puguem ajudar-vos a fer un seguiment dels vostres nivells de glucosa al llarg del temps. @@ -198,6 +197,12 @@ Lluita lliure Senderisme Feines de jardí + + + + + + Carbohidrats: Proteïnes: @@ -312,7 +317,6 @@ historial desa Recordatoris - Ara és l\'hora de mesurar el nivell de glucosa! Afegeix una lectura No s\'ha trobat cap recordatori, Afegiu un nou. diff --git a/app/src/main/res/values-ce-rCE/strings.xml b/app/src/main/res/values-ce-rCE/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ce-rCE/strings.xml +++ b/app/src/main/res/values-ce-rCE/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ceb-rPH/strings.xml b/app/src/main/res/values-ceb-rPH/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ceb-rPH/strings.xml +++ b/app/src/main/res/values-ceb-rPH/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ch-rGU/strings.xml b/app/src/main/res/values-ch-rGU/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ch-rGU/strings.xml +++ b/app/src/main/res/values-ch-rGU/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-chr-rUS/strings.xml b/app/src/main/res/values-chr-rUS/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-chr-rUS/strings.xml +++ b/app/src/main/res/values-chr-rUS/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ckb-rIR/strings.xml b/app/src/main/res/values-ckb-rIR/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ckb-rIR/strings.xml +++ b/app/src/main/res/values-ckb-rIR/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-co-rFR/strings.xml b/app/src/main/res/values-co-rFR/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-co-rFR/strings.xml +++ b/app/src/main/res/values-co-rFR/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-cr-rNT/strings.xml b/app/src/main/res/values-cr-rNT/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-cr-rNT/strings.xml +++ b/app/src/main/res/values-cr-rNT/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-crs-rSC/strings.xml b/app/src/main/res/values-crs-rSC/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-crs-rSC/strings.xml +++ b/app/src/main/res/values-crs-rSC/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index ddaad7f4..7e8feaec 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -119,7 +119,6 @@ Vytvořit kategorie Glucosio přichází s výchozími kategoriemi pro zadávání hladin cukru, můžete však vytvořit vlastní kategorie v nastavení tak, aby odpovídaly vašim potřebám. Kontrolujte často - Odeslat zpětnou vazbu Přidat měření Ujistěte se, aby jste pravidelně přidávali hodnoty hladiny glykémie tak, abychom vám mohli pomoci průběžně sledovat hladiny glukózy. Exportujte svá data @@ -168,6 +167,12 @@ Wrestling Turistika Práce na zahradě + + + + + + Sacharidy: Bílkoviny: diff --git a/app/src/main/res/values-csb-rPL/strings.xml b/app/src/main/res/values-csb-rPL/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-csb-rPL/strings.xml +++ b/app/src/main/res/values-csb-rPL/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-cv-rCU/strings.xml b/app/src/main/res/values-cv-rCU/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-cv-rCU/strings.xml +++ b/app/src/main/res/values-cv-rCU/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-cy-rGB/strings.xml b/app/src/main/res/values-cy-rGB/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-cy-rGB/strings.xml +++ b/app/src/main/res/values-cy-rGB/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 9531e6c6..6429f23e 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -136,7 +136,6 @@ Glucosio kommt mit Standardkategorien für Zuckereingabe, aber sie können benutzerdefinierte Kategorien in Einstellungen entsprechend ihren speziellen Anforderungen erstellen. Kommen sie öfter wieder Glucosio-Assistent bietet regelmäßige Tipps und wird laufend verbessert. Also kommen sie regelmäßig hierhin zurück für sinnvolle Maßnahmen, die sie ergreifen können, um ihr Glucosio-Erlebnis zu verbessern und andere nützliche Tipps. - Feedback geben Wenn sie technische Probleme finden oder Feedback über Glucosio abgeben möchten, empfehlen wir ihnen dies im Menü \"Einstellungen\" einzugeben, um Glucosio zu verbessern. Messwert hinzufügen Achten Sie darauf, regelmäßig Ihre Glukose-Messungen hinzuzufügen, damit wir helfen können, Ihren Blutzuckerspiegel im Laufe der Zeit zu verfolgen. @@ -198,6 +197,12 @@ Wrestling Wandern Gartenarbeit + + + + + + Kohlenhydrate: Eiweiß: @@ -226,6 +231,7 @@ Screenshot in der Galerie gespeichert Fehler beim Speichern des Screenshot in der Galerie Bereichbereich + Es gab ein Problem beim Exportieren der Werte. Bitte versuchen Sie es erneut. Keine Messungen zum exportieren. Neue Messungen hinzugefügt Gewicht @@ -308,4 +314,9 @@ mmol/mol mmol/L Alte Graph-Darstellung verwenden + Verlauf + speichern + Erinnerungen + Messwert hinzufügen + Keine Erinnerungen eingestellt. Füge hier eine neue Erinnerung hinzu. diff --git a/app/src/main/res/values-dsb-rDE/strings.xml b/app/src/main/res/values-dsb-rDE/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-dsb-rDE/strings.xml +++ b/app/src/main/res/values-dsb-rDE/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-dv-rMV/strings.xml b/app/src/main/res/values-dv-rMV/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-dv-rMV/strings.xml +++ b/app/src/main/res/values-dv-rMV/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-dz-rBT/strings.xml b/app/src/main/res/values-dz-rBT/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-dz-rBT/strings.xml +++ b/app/src/main/res/values-dz-rBT/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ee-rGH/strings.xml b/app/src/main/res/values-ee-rGH/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ee-rGH/strings.xml +++ b/app/src/main/res/values-ee-rGH/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-el-rCY/strings.xml b/app/src/main/res/values-el-rCY/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-el-rCY/strings.xml +++ b/app/src/main/res/values-el-rCY/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-en-rGB/strings.xml b/app/src/main/res/values-en-rGB/strings.xml index dc3dc778..28a62f79 100644 --- a/app/src/main/res/values-en-rGB/strings.xml +++ b/app/src/main/res/values-en-rGB/strings.xml @@ -136,7 +136,6 @@ Glucosio comes with default categories for glucose input but you can create custom categories in settings to match your unique needs. Check here often Glucosio assistant provides regular tips and will keep improving, so always check here for useful actions you can take to improve your Glucosio experience and for other useful tips. - Submit feedback If you find any technical issues or have feedback about Glucosio we encourage you to submit it in the settings menu in order to help us improve Glucosio. Add a reading Be sure to regularly add your glucose readings so we can help you track your glucose levels over time. @@ -191,6 +190,12 @@ Frisbee Skiing Boxing + + + + + + From: diff --git a/app/src/main/res/values-en-rPT/strings.xml b/app/src/main/res/values-en-rPT/strings.xml index 19454736..c2e9cbe5 100644 --- a/app/src/main/res/values-en-rPT/strings.xml +++ b/app/src/main/res/values-en-rPT/strings.xml @@ -81,7 +81,6 @@ Update ye research opt-in Glucosio comes wit\' default categories fer glucose input but ye can create custom categories in settin\'s to match ye unique needs. Check here often Glucosio assistant provides regular tips \'n gunna keep improvin\', so always check here fer useful actions ye can take to improve ye Glucosio experience \'n fer other useful tips. - Submit feedback If ye find any technical issues or have feedback \'bout Glucosio we encourage ye to submit it in th\' settin\'s menu in order to help us improve Glucosio. Add a reading Be sure to regularly add ye glucose readin\'s so we can help ye track ye glucose levels over the hour. @@ -90,6 +89,12 @@ Update ye research opt-in Share ye data wit\' ye doctor or backup ye data to Google Drive usin\' th\' export weapon. + + + + + + diff --git a/app/src/main/res/values-en-rUS/strings.xml b/app/src/main/res/values-en-rUS/strings.xml index 879328e0..c04ced28 100644 --- a/app/src/main/res/values-en-rUS/strings.xml +++ b/app/src/main/res/values-en-rUS/strings.xml @@ -124,7 +124,6 @@ Glucosio comes with default categories for glucose input but you can create custom categories in settings to match your unique needs. Check here often Glucosio assistant provides regular tips and will keep improving, so always check here for useful actions you can take to improve your Glucosio experience and for other useful tips. - Submit feedback If you find any technical issues or have feedback about Glucosio we encourage you to submit it in the settings menu in order to help us improve Glucosio. Add a reading Be sure to regularly add your glucose readings so we can help you track your glucose levels over time. @@ -135,6 +134,12 @@ Yard work + + + + + + Carbs: Protein: diff --git a/app/src/main/res/values-eo-rUY/strings.xml b/app/src/main/res/values-eo-rUY/strings.xml index a5c30d1f..e0fbd004 100644 --- a/app/src/main/res/values-eo-rUY/strings.xml +++ b/app/src/main/res/values-eo-rUY/strings.xml @@ -80,7 +80,6 @@ Ĝisdatigi vian pezon Krei kategoriojn Vidi ĉi tie ofte - Sendi rimarkon Aldoni legadon Eksporti viajn datumojn Minimuma valoro @@ -112,6 +111,12 @@ Luktado Marŝado Ĝardenado + + + + + + Karbonhidratoj: Proteino: diff --git a/app/src/main/res/values-es-rCL/strings.xml b/app/src/main/res/values-es-rCL/strings.xml index 6de15e50..fa1fa5a0 100644 --- a/app/src/main/res/values-es-rCL/strings.xml +++ b/app/src/main/res/values-es-rCL/strings.xml @@ -27,6 +27,7 @@ Reseña Historial Consejos + Añadir nueva lectura Hola. Hola. Condiciones de uso @@ -136,7 +137,6 @@ Glucosio tiene categorías predeterminadas para la entrada de glucosa, pero puedes crear categorías personalizadas en la configuración para que coincida con tus necesidades particulares. Revise esto a menudo Asistente de Glucosio ofrece consejos regulares y seguirá mejorando, así que siempre revisa aquí para ver lo que puedes hacer para mejorar tu experiencia con Glucosio y por otros consejos útiles. - Enviar Comentarios Si encuentra cualquier problema técnico o desea comentar sobre Glucosio, envíenos sus comentarios en el menú de configuración para que mejoremos Glucosio. Añadir Lectura Asegúrese de añadir regularmente sus lecturas de glucosa para que podamos ayudarle a seguir a lo largo del tiempo sus niveles de glucosa. @@ -198,6 +198,12 @@ Lucha libre Senderismo Trabajo de jardinería + + + + + + Carbohidratos: Proteínas: @@ -226,6 +232,7 @@ Se ha guardado tu captura de pantalla en la galería Ocurrió un error al guardar la captura de pantalla en la galería Rango de exportación + Hubo un problema al exportar las lecturas. Inténtelo de nuevo. No hay lecturas para exportar. Nueva lectura añadida Peso @@ -239,10 +246,15 @@ Añadir lectura de glucosa Editar lectura de glucosa Añadir peso corporal + Editar peso corporal Añadir nivel de colesterol + Editar nivel de colesterol Añadir HBA1C + Editar HbA1c Añadir cetonas + Editar cetonas Añadir presión arterial + Editar presión arterial Peso Corporal Cetonas Presión arterial @@ -286,6 +298,7 @@ Algo salió mal. Inténtelo de nuevo :/ Última copia de seguridad: Carpeta de las copias de seguridad + Sin configurar Hacer copia ahora Últimas copias de seguridad Ver más copias de seguridad @@ -302,4 +315,9 @@ mmol/mol mmol/L Volver al gráfico antiguo + historial + guardar + Recordatorios + Añadir lectura + No tiene configurado los recordatorios. Añada un recordatorio aquí. diff --git a/app/src/main/res/values-es-rCO/strings.xml b/app/src/main/res/values-es-rCO/strings.xml index 11db78d9..f67aed41 100644 --- a/app/src/main/res/values-es-rCO/strings.xml +++ b/app/src/main/res/values-es-rCO/strings.xml @@ -27,6 +27,7 @@ Información general Historial Consejos + Añadir nueva lectura Hola. Hola. Términos de Uso. @@ -136,7 +137,7 @@ Glucosio tiene categorías predeterminadas para la entrada de glucosa, pero puede crear categorías personalizadas en la configuración para que coincida con sus necesidades particulares. Revise esto a menudo Asistente de Glucosio ofrece consejos regulares y seguirá mejorando, así que siempre revisa aquí para ver lo que puede hacer para mejorar su experiencia con Glucosio y por otros consejos útiles. - Enviar Comentarios + Enviar comentarios Si encuentra cualquier problema técnico o tiene comentarios sobre Glucosio, le animamos a enviar sus comentarios en el menú de configuración con el fin de ayudarnos a mejorar Glucosio. Añadir Lectura Asegúrese de añadir regularmente sus lecturas de glucosa para que podamos ayudarle a seguir sus niveles de glucosa a lo largo del tiempo. @@ -198,6 +199,12 @@ Lucha libre Senderismo Trabajo de jardinería + + + + + + Carbohidratos: Proteínas: @@ -226,6 +233,7 @@ Captura de pantalla guardada en la galería Error al guardar la captura de pantalla en la galería Exportar rango + Hubo un problema al exportar las lecturas. Por favor inténtelo de nuevo. No hay lecturas para exportar. Nueva lectura añadida Peso @@ -239,10 +247,15 @@ Añadir lectura de glucosa Editar lectura de glucosa Añadir peso corporal + Editar peso corporal Añadir nivel de colesterol + Editar nivel de colesterol Añadir HB1AC + Editar HBA1C Añadir cetonas + Editar cetonas Añadir presión arterial + Editar presión arterial Peso corporal Cetonas Presión arterial @@ -286,6 +299,7 @@ Algo salió mal. Por favor, inténtelo de nuevo :/ Última copia de seguridad: Carpeta de las copias de seguridad + Sin configurar Hacer copia ahora Respaldos recientes Ver más copias de seguridad @@ -301,4 +315,9 @@ Gestionar en Drive mmol/L Volver al gráfico antiguo + historial + guardar + Recordatorios + Añadir Lectura + No hay recordatorios. agregar un nuevo recordatorio. diff --git a/app/src/main/res/values-es-rDO/strings.xml b/app/src/main/res/values-es-rDO/strings.xml index ccfdfad7..4b6334f5 100644 --- a/app/src/main/res/values-es-rDO/strings.xml +++ b/app/src/main/res/values-es-rDO/strings.xml @@ -27,6 +27,7 @@ Información general Historial Consejos + Añadir nueva lectura Hola. Hola. Términos de Uso @@ -136,7 +137,7 @@ Glucosio tiene categorías predeterminadas para la entrada de glucosa, pero puede crear categorías personalizadas en la configuración para que coincida con sus necesidades particulares. Revise esto a menudo Asistente de Glucosio ofrece consejos regulares y seguirá mejorando, así que siempre revisa aquí para ver lo que puede hacer para mejorar su experiencia con Glucosio y por otros consejos útiles. - Enviar Comentarios + Enviar comentarios Si encuentra cualquier problema técnico o tiene comentarios sobre Glucosio, le animamos a enviar sus comentarios en el menú de configuración con el fin de ayudarnos a mejorar Glucosio. Agregar Lectura Asegúrese de agregar regularmente sus lecturas de glucosa para que podamos ayudarle a seguir sus niveles de glucosa a lo largo del tiempo. @@ -198,6 +199,12 @@ Lucha libre Senderismo Trabajo de jardinería + + + + + + Carbohidratos: Proteínas: @@ -226,6 +233,7 @@ Captura de pantalla guardada en la galería Error al guardar la captura de pantalla en la galería Exportar rango + Hubo un problema al exportar las lecturas. Por favor inténtelo de nuevo. No hay lecturas para exportar. Nueva lectura añadida Peso @@ -239,10 +247,15 @@ Añadir lectura de glucosa Editar lectura de glucosa Añadir peso corporal + Editar peso corporal Añadir nivel de colesterol + Editar nivel de colesterol Añadir HB1AC + Editar HBA1C Añadir cetonas + Editar cetonas Añadir presión arterial + Editar presión arterial Peso corporal Cetonas Presión arterial @@ -286,6 +299,7 @@ Algo salió mal. Por favor, inténtelo de nuevo :/ Última copia de seguridad: Carpeta de las copias de seguridad + Sin configurar Hacer copia ahora Respaldos recientes Ver más copias de seguridad @@ -301,4 +315,9 @@ Gestionar en Drive mmol/L Volver al gráfico antiguo + historial + guardar + Recordatorios + Añadir Lectura + No hay recordatorios. agregar un nuevo recordatorio. diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 11dcac55..9d5f73fa 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -27,6 +27,7 @@ Información general Historial Consejos + Añadir nueva lectura Hola. Hola. Términos de Uso. @@ -136,7 +137,6 @@ Glucosio tiene categorías predeterminadas para la entrada de glucosa, pero puede crear categorías personalizadas en la configuración para que coincida con sus necesidades particulares. Revise esto a menudo Asistente de Glucosio ofrece consejos regulares y seguirá mejorando, así que siempre revisa aquí para ver lo que puede hacer para mejorar su experiencia con Glucosio y por otros consejos útiles. - Enviar Comentarios Si encuentra cualquier problema técnico o tiene comentarios sobre Glucosio, le animamos a enviar sus comentarios en el menú de configuración con el fin de ayudarnos a mejorar Glucosio. Añadir Lectura Asegúrese de añadir regularmente sus lecturas de glucosa para que podamos ayudarle a seguir sus niveles de glucosa a lo largo del tiempo. @@ -198,6 +198,12 @@ Lucha libre Senderismo Trabajo de jardinería + + + + + + Carbohidratos: Proteínas: @@ -226,6 +232,7 @@ Captura de pantalla guardada en la galería Error al guardar la captura de pantalla en la galería Exportar rango + Hubo un problema al exportar las lecturas. Por favor inténtelo de nuevo. No hay lecturas para exportar. Nueva lectura añadida Peso @@ -239,10 +246,15 @@ Añadir lectura de glucosa Editar lectura de glucosa Añadir peso corporal + Editar peso corporal Añadir nivel de colesterol + Editar nivel de colesterol Añadir HB1AC + Editar HBA1C Añadir cetonas + Editar cetonas Añadir presión arterial + Editar presión arterial Peso corporal Cetonas Presión arterial @@ -286,6 +298,7 @@ Algo salió mal. Por favor, inténtelo de nuevo :/ Última copia de seguridad: Carpeta de las copias de seguridad + Sin configurar Hacer copia ahora Respaldos recientes Ver más copias de seguridad @@ -302,4 +315,9 @@ mmol/mol mmol/L Volver al gráfico antiguo + historial + guardar + Recordatorios + Añadir Lectura + No hay recordatorios. agregar un nuevo recordatorio. diff --git a/app/src/main/res/values-es-rMX/strings.xml b/app/src/main/res/values-es-rMX/strings.xml index 0ecc1d4b..87ac5473 100644 --- a/app/src/main/res/values-es-rMX/strings.xml +++ b/app/src/main/res/values-es-rMX/strings.xml @@ -27,6 +27,7 @@ Resumen Historial Consejos + Agregar lectura nueva Hola. Hola. Términos de Uso. @@ -136,7 +137,6 @@ Glucosio tiene categorías predeterminadas para la entrada de glucosa, pero puede crear categorías personalizadas en la configuración para que coincida con sus necesidades particulares. Revise esto a menudo Asistente de Glucosio ofrece consejos regulares y seguirá mejorando, así que siempre revisa aquí para ver lo que puede hacer para mejorar su experiencia con Glucosio y para aprender otros consejos útiles. - Enviar comentarios Si encuentra cualquier problema técnico o tiene comentarios sobre Glucosio, le animamos a enviar sus comentarios en el menú de configuración con el fin de ayudarnos a mejorar Glucosio. Añadir una medición de glucosa Asegúrese de añadir regularmente sus lecturas de glucosa para que podamos ayudarle a seguir sus niveles de glucosa a largo plazo. @@ -198,6 +198,12 @@ Lucha libre Senderismo Trabajo de jardinería + + + + + + Carbohidratos: Proteínas: @@ -226,6 +232,7 @@ Captura de pantalla guardada en la galería Error al guardar la captura de pantalla en la galería Exportar rango + Ocurrió un error al exportar las lecturas. Intentalo de nuevo. No hay lecturas para exportar. Nueva lectura añadida Peso @@ -239,10 +246,15 @@ Añadir lectura de glucosa Editar lectura de glucosa Añadir peso corporal + Editar peso corporal Añadir nivel de colesterol + Editar nivel de colesterol Añadir HBA1C + Editar HBA1C Añadir cetonas + Editar cetonas Añadir presión arterial + Editar presión arterial Peso corporal Cetonas Presión arterial @@ -286,6 +298,7 @@ Algo salió mal. Inténtalo de nuevo :/ Última copia de seguridad: Carpeta de las copias de seguridad + Sin configurar Respaldar ahora Copias de seguridad recientes Ver más copias de seguridad @@ -302,4 +315,9 @@ mmol/mol mmol/L Volver al gráfico antiguo + historial + guardar + Recordatorios + Añadir Lectura + No hay recordatorios. agregar un nuevo recordatorio. diff --git a/app/src/main/res/values-es-rVE/strings.xml b/app/src/main/res/values-es-rVE/strings.xml index af97712a..eeef84e5 100644 --- a/app/src/main/res/values-es-rVE/strings.xml +++ b/app/src/main/res/values-es-rVE/strings.xml @@ -27,6 +27,7 @@ Resumen Historial Consejos + Añadir nueva lectura Hola. Hola. Términos de uso @@ -136,7 +137,6 @@ Glucosio tiene categorías predeterminadas para la entrada de glucosa, pero puede crear categorías personalizadas en la configuración para que coincida con sus necesidades particulares. Revise esto a menudo Asistente de Glucosio ofrece consejos regulares y seguirá mejorando, así que siempre revisa aquí para ver lo que puede hacer para mejorar su experiencia con Glucosio y por otros consejos útiles. - Enviar comentarios Si encuentra cualquier problema técnico o tiene comentarios sobre Glucosio, le animamos a enviar sus comentarios en el menú de configuración con el fin de ayudarnos a mejorar Glucosio. Añadir una medición de glucosa Asegúrese de añadir regularmente sus lecturas de glucosa para que podamos ayudarle a seguir sus niveles de glucosa a lo largo del tiempo. @@ -198,6 +198,12 @@ Lucha libre Senderismo Trabajo de jardinería + + + + + + Carbohidratos: Proteína: @@ -226,6 +232,7 @@ Captura de pantalla guardada en la galería Error al guardar la captura de pantalla en la galería Exportar rango + Hubo un problema al exportar las lecturas. Por favor inténtelo de nuevo. No hay lecturas para exportar. Nueva lectura añadida Peso @@ -239,10 +246,15 @@ Añadir lectura de glucosa Editar lectura de glucosa Añadir peso corporal + Editar peso corporal Añadir nivel de colesterol + Editar nivel de colesterol Añadir HBA1C + Editar HBA1C Añadir cetonas + Editar cetonas Añadir presión arterial + Editar presión arterial Peso corporal Cetonas Presión arterial @@ -286,6 +298,7 @@ Algo salió mal. Por favor, inténtelo de nuevo :/ Última copia de seguridad: Carpeta de las copias de seguridad + Sin configurar Hacer copia de seguridad ahora Respaldos recientes Ver más copias de seguridad @@ -302,4 +315,9 @@ mmol/mol mmol/L Volver al gráfico antiguo + historial + guardar + Recordatorios + Añadir Lectura + No hay recordatorios. agregar un nuevo recordatorio. diff --git a/app/src/main/res/values-et-rEE/strings.xml b/app/src/main/res/values-et-rEE/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-et-rEE/strings.xml +++ b/app/src/main/res/values-et-rEE/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-eu-rES/strings.xml b/app/src/main/res/values-eu-rES/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-eu-rES/strings.xml +++ b/app/src/main/res/values-eu-rES/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-fa-rAF/strings.xml b/app/src/main/res/values-fa-rAF/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-fa-rAF/strings.xml +++ b/app/src/main/res/values-fa-rAF/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index d1ef05a9..744a07e4 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -113,7 +113,6 @@ وزن خود را به روز رسانی کنید ایجاد دسته اینجا را مکررا بررسی کنید - ارسال انتقادات و پیشنهادات اضافه کردن اندازه گیری محدوده مورد نظر محدوده سفارشی @@ -161,6 +160,12 @@ کشتی پیاده روی کار در حیاط + + + + + + کربوهیدرات: پروتئین: diff --git a/app/src/main/res/values-ff-rZA/strings.xml b/app/src/main/res/values-ff-rZA/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ff-rZA/strings.xml +++ b/app/src/main/res/values-ff-rZA/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 79f73822..2942101f 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -73,6 +73,12 @@ Lisää lukema + + + + + + diff --git a/app/src/main/res/values-fil-rPH/strings.xml b/app/src/main/res/values-fil-rPH/strings.xml index 5941feb0..675d5c56 100644 --- a/app/src/main/res/values-fil-rPH/strings.xml +++ b/app/src/main/res/values-fil-rPH/strings.xml @@ -116,7 +116,6 @@ Ang Glucosio ay mga kategoryang kalakip para sa glucose input, ngunit maaari kang gumawa ng sarili mong kategorya kung nanaisin. Pumunta dito ng madalas Nagbibigay ang Glucosio assistant ng mga payo kung paano gaganda ang iyong kalusugan at kung paano mo makukuha ang benepisyo ng paggamit ng Glucosio. - I-submit ang feedback Kung may mga katanungang pangteknikal or may mga puna at suhesyon para sa Glucosio, pumunta sa settings menu. Magdagdag ng reading Siguraduhing palaging magdagdag ng iyong glucose readings para ikaw matulungan naming i-track ang iyong glucose levels. @@ -126,6 +125,12 @@ Max value + + + + + + diff --git a/app/src/main/res/values-fj-rFJ/strings.xml b/app/src/main/res/values-fj-rFJ/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-fj-rFJ/strings.xml +++ b/app/src/main/res/values-fj-rFJ/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-fo-rFO/strings.xml b/app/src/main/res/values-fo-rFO/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-fo-rFO/strings.xml +++ b/app/src/main/res/values-fo-rFO/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 20d38e9d..f3ebafa9 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -137,7 +137,6 @@ Glucosio comprend des catégories par défaut pour l\'entrée de glucose mais vous pouvez créer des catégories personnalisées dans paramètres pour assortir vos besoins uniques. Vérifiez souvent Glucosio assistant fournit des conseils réguliers et va continuer à améliorer, il faut donc toujours vérifier ici pour des actions utiles, que vous pouvez prendre pour améliorer votre expérience de Glucosio et pour d\'autres conseils utiles. - Envoyer un commentaire Si vous trouvez des problèmes techniques ou avez des commentaires sur Glucosio nous vous encourageons à nous les transmettre dans le menu réglages afin de nous aider à améliorer Glucosio. Ajouter une lecture N\'oubliez pas d\'ajouter régulièrement vos lectures de glucose, donc nous pouvons vous aider à suivre votre taux de glucose dans le temps. @@ -199,6 +198,12 @@ Lutte Randonnée Jardinage + + + + + + Glucides : Protéines : @@ -227,6 +232,7 @@ Copie d\'écran enregistrée dans la galerie photo Erreur à l\'enregistrement de la copie d\'écran dans la galerie photo Fourchette d\'exportation + Il y a eu un problème à l\'exportation des lectures. Veuillez réessayer. Aucun enregistrement à exporter. Nouvel enregistrement ajouté Poids @@ -312,6 +318,6 @@ historique enregistrer Rappels - Il est temps de mesurer votre glycémie ! + Ajouter une lecture Aucun rappel de la valeur. Ajouter un nouveau rappel ici. diff --git a/app/src/main/res/values-fr-rQC/strings.xml b/app/src/main/res/values-fr-rQC/strings.xml index 4c2e01e2..88ddaa9f 100644 --- a/app/src/main/res/values-fr-rQC/strings.xml +++ b/app/src/main/res/values-fr-rQC/strings.xml @@ -137,7 +137,7 @@ Glucosio comprend des catégories par défaut pour l\'entrée de glucose mais vous pouvez créer des catégories personnalisées dans paramètres pour assortir vos besoins uniques. Vérifiez souvent Glucosio assistant fournit des conseils réguliers et va continuer à améliorer, il faut donc toujours vérifier ici pour des actions utiles, que vous pouvez prendre pour améliorer votre expérience de Glucosio et pour d\'autres conseils utiles. - Envoyer un commentaire + Envoyer un commentaire Si vous trouvez des problèmes techniques ou avez des commentaires sur Glucosio nous vous encourageons à nous les transmettre dans le menu réglages afin de nous aider à améliorer Glucosio. Ajouter une lecture N\'oubliez pas d\'ajouter régulièrement vos lectures de glucose, donc nous pouvons vous aider à suivre votre taux de glucose dans le temps. @@ -199,6 +199,12 @@ Lutte Randonnée Jardinage + + + + + + Glucides : Protéines : @@ -227,6 +233,7 @@ Copie d\'écran enregistrée dans la galerie photo Erreur à l\'enregistrement de la copie d\'écran dans la galerie photo Fourchette d\'exportation + Il y a eu un problème à l\'exportation des lectures. Veuillez réessayer. Aucun enregistrement à exporter. Nouvel enregistrement ajouté Poids @@ -311,6 +318,6 @@ historique enregistrer Rappels - Il est temps de mesurer votre glycémie ! + Ajouter une lecture Aucun rappel de la valeur. Ajouter un nouveau rappel ici. diff --git a/app/src/main/res/values-fra-rDE/strings.xml b/app/src/main/res/values-fra-rDE/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-fra-rDE/strings.xml +++ b/app/src/main/res/values-fra-rDE/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-frp-rIT/strings.xml b/app/src/main/res/values-frp-rIT/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-frp-rIT/strings.xml +++ b/app/src/main/res/values-frp-rIT/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-fur-rIT/strings.xml b/app/src/main/res/values-fur-rIT/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-fur-rIT/strings.xml +++ b/app/src/main/res/values-fur-rIT/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-fy-rNL/strings.xml b/app/src/main/res/values-fy-rNL/strings.xml index 35b0fa5a..c2a04093 100644 --- a/app/src/main/res/values-fy-rNL/strings.xml +++ b/app/src/main/res/values-fy-rNL/strings.xml @@ -70,10 +70,15 @@ ÚTLÊZING TAFOEGJE Kategoryen meitsje Sjoch hjir regelmjittich - Weromkeppeling ferstjoere In útlêzing tafoegje + + + + + + diff --git a/app/src/main/res/values-ga-rIE/strings.xml b/app/src/main/res/values-ga-rIE/strings.xml index d5257239..482d7ab7 100644 --- a/app/src/main/res/values-ga-rIE/strings.xml +++ b/app/src/main/res/values-ga-rIE/strings.xml @@ -136,7 +136,6 @@ Tagann Glucosio le catagóirí réamhshocraithe le haghaidh ionchurtha glúcóis, ach is féidir leat catagóirí de do chuid féin a chruthú sna socruithe. Féach anseo go minic Tugann Cúntóir Glucosio leideanna duit go rialta, agus rachaidh sé i bhfeabhas de réir a chéile. Mar sin, ba chóir duit filleadh anseo anois is arís le gníomhartha agus leideanna úsáideacha a fháil. - Seol aiseolas Má fheiceann tú aon fhadhb theicniúil, nó más mian leat aiseolas faoi Glucosio a thabhairt dúinn, is féidir é sin a dhéanamh sa roghchlár Socruithe, chun cabhrú linn Glucosio a fheabhsú. Tomhas nua Ba chóir duit do leibhéal glúcos fola a thástáil go rialta sa chaoi go mbeidh tú in ann an leibhéal a leanúint thar thréimhse ama. @@ -198,6 +197,12 @@ Iomrascáil Cnocadóireacht Garraíodóireacht + + + + + + Carbaihiodráití: Próitéin: diff --git a/app/src/main/res/values-gaa-rGH/strings.xml b/app/src/main/res/values-gaa-rGH/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-gaa-rGH/strings.xml +++ b/app/src/main/res/values-gaa-rGH/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-gd-rGB/strings.xml b/app/src/main/res/values-gd-rGB/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-gd-rGB/strings.xml +++ b/app/src/main/res/values-gd-rGB/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-gl-rES/strings.xml b/app/src/main/res/values-gl-rES/strings.xml index 16137e33..4cf97c76 100644 --- a/app/src/main/res/values-gl-rES/strings.xml +++ b/app/src/main/res/values-gl-rES/strings.xml @@ -136,7 +136,6 @@ Glucosio ten xa unhas categorías predefinidas para a entrada de rexistros, mais sempre podes crear outras personalizadas que se adapten ás túas necesidades. Comprobar a miúdo O asistente de Glucosio ofrece consellos periodicamente e seguirá mellorando, polo que ten ansia de revisar esta sección para mellorar a túa experiencia coa aplicación e recibir consellos útiles. - Enviar comentarios Se dás con calquera problema técnico ou tes comentarios sobre Glucosio, animámoste a envialos desde o menú dos axustes co fin de contribuír á mellora e evolución de Glucosio. Engadir un rexistro Procura ir engadindo periodicamente os teus rexistros ou lecturas de glicosa para que así poidamos axudarche a levar conta deles no tempo. @@ -198,6 +197,12 @@ Loita Excursionismo Xardinaría + + + + + + Carbohidratos: Proteínas: @@ -312,7 +317,6 @@ historial gardar Recordatorios - É hora de rexistrar o nivel de glucosa! Engadir unha lectura Recordatorios non definidos. Engadir aquí un novo. diff --git a/app/src/main/res/values-gn-rPY/strings.xml b/app/src/main/res/values-gn-rPY/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-gn-rPY/strings.xml +++ b/app/src/main/res/values-gn-rPY/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-gu-rIN/strings.xml b/app/src/main/res/values-gu-rIN/strings.xml index c76dc2da..4ad93fc7 100644 --- a/app/src/main/res/values-gu-rIN/strings.xml +++ b/app/src/main/res/values-gu-rIN/strings.xml @@ -47,9 +47,14 @@ છેલ્લી ચકાસણી: ગયા મહિના નું સરવૈયું: હમમ, સમજાઈ ગયું - પ્રતિક્રિયા મોકલો + + + + + + diff --git a/app/src/main/res/values-gv-rIM/strings.xml b/app/src/main/res/values-gv-rIM/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-gv-rIM/strings.xml +++ b/app/src/main/res/values-gv-rIM/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ha-rHG/strings.xml b/app/src/main/res/values-ha-rHG/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ha-rHG/strings.xml +++ b/app/src/main/res/values-ha-rHG/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-haw-rUS/strings.xml b/app/src/main/res/values-haw-rUS/strings.xml index 012bcd26..31867d0a 100644 --- a/app/src/main/res/values-haw-rUS/strings.xml +++ b/app/src/main/res/values-haw-rUS/strings.xml @@ -60,12 +60,17 @@ Ke ʻAno Haku i nā māhele E hoʻi pinepine - Hoʻouna i ka manaʻo Inā loaʻa i ka pilikia ʻoe a i ʻole loaʻa iā ʻoe ka manaʻo no Glucosio, hoʻopaipai mākou i ka waiho ʻana o ia mea āu i ka papa kauna i hiki mākou ke holomua iā Glucosio. Hoʻohui i ka heluhelu E hoʻohui pinepine i kou mau heluhelu monakō i hiki mākou ke kōkua i ka nānā ʻana o kou ana monakō ma o ka manawa holomua. + + + + + + diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 3dd49f6a..196b7204 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -112,7 +112,6 @@ अपने अनुसंधान में ऑप्ट अद्यतन श्रेणियों बनाएँ यहाँ अक्सर चेक - प्रतिक्रिया सबमिट करें एक पढ़ने जोड़ें पसंदीदा श्रेणी कस्टम श्रेणी @@ -120,6 +119,12 @@ अधिकतम मूल्य + + + + + + diff --git a/app/src/main/res/values-hil-rPH/strings.xml b/app/src/main/res/values-hil-rPH/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-hil-rPH/strings.xml +++ b/app/src/main/res/values-hil-rPH/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-hmn-rCN/strings.xml b/app/src/main/res/values-hmn-rCN/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-hmn-rCN/strings.xml +++ b/app/src/main/res/values-hmn-rCN/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ho-rPG/strings.xml b/app/src/main/res/values-ho-rPG/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ho-rPG/strings.xml +++ b/app/src/main/res/values-ho-rPG/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-hr-rHR/strings.xml b/app/src/main/res/values-hr-rHR/strings.xml index 20b38b4c..a3b4fcf4 100644 --- a/app/src/main/res/values-hr-rHR/strings.xml +++ b/app/src/main/res/values-hr-rHR/strings.xml @@ -131,7 +131,6 @@ Glucosio dolazi sa zadanim kategorijama za unos glukoze ali vi u postavkama možete stvoriti prilagođene kategorije koje odgovaraju vašim potrebama. Često provjerite ovdje Glucosio asistent pruža redovite savjete i nastavit će se poboljšavati, stoga često provjerite ovdje za korisne akcije koje možete poduzeti da poboljšanje svog Glucosio doživljaja te druge korisne savjete. - Pošalji povratnu informaciju Ako naiđete na tehničke pogreške ili imate druge povratne informacije o Glucosiu, molimo vas da ih pošaljete putem menija kako bismo unaprijedili Glucosio. Dodaj očitavanje Pobrinite se da redovno dodajete svoja očitavanja glukoze kako bismo vam pomogli da pratite vašu razinu glukoze tijekom vremena. @@ -190,6 +189,12 @@ Hrvanje Planinarenje Radovi u vrtu + + + + + + Ugljikohidrati: Proteini: diff --git a/app/src/main/res/values-hsb-rDE/strings.xml b/app/src/main/res/values-hsb-rDE/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-hsb-rDE/strings.xml +++ b/app/src/main/res/values-hsb-rDE/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ht-rHT/strings.xml b/app/src/main/res/values-ht-rHT/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ht-rHT/strings.xml +++ b/app/src/main/res/values-ht-rHT/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-hy-rAM/strings.xml b/app/src/main/res/values-hy-rAM/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-hy-rAM/strings.xml +++ b/app/src/main/res/values-hy-rAM/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-hz-rNA/strings.xml b/app/src/main/res/values-hz-rNA/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-hz-rNA/strings.xml +++ b/app/src/main/res/values-hz-rNA/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ig-rNG/strings.xml b/app/src/main/res/values-ig-rNG/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ig-rNG/strings.xml +++ b/app/src/main/res/values-ig-rNG/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ii-rCN/strings.xml b/app/src/main/res/values-ii-rCN/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ii-rCN/strings.xml +++ b/app/src/main/res/values-ii-rCN/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ilo-rPH/strings.xml b/app/src/main/res/values-ilo-rPH/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ilo-rPH/strings.xml +++ b/app/src/main/res/values-ilo-rPH/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index d132e088..5691b9ca 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -22,9 +22,11 @@ Pengaturan Kirim umpan balik + Undang teman Ikhtisar Riwayat Kiat + Tambahkan bacaan baru Halo. Halo. Ketentuan Penggunaan. @@ -55,6 +57,7 @@ Setelah makan siang Sebelum makan malam Setelah makan malam + Kudapan Malam Periksa kembali Lainnya @@ -73,6 +76,7 @@ Minggu Tentang Versi + Segera... Syarat penggunaan Tipe Berat @@ -106,6 +110,7 @@ Asisten PERBARUI SEKARANG JUGA OK, MENGERTI + KIRIM SARAN TAMBAHKAN BACAAN COBA SEKARANG JUGA Perbarui berat kamu @@ -116,16 +121,98 @@ Glucosio dilengkapi kategori baku untuk masukan glukosa namun kamu juga bisa membuat kategori lain di pengaturan untuk menyesuaikan kebutuhan unikmu. Sering-seringlah memeriksa Asisten Glucosio memberikan kiat berkala dan akan terus berkembang, jadi pastikan untuk selalu periksa disini untuk aksi bermanfaat yang bisa kamu lakukan demi meningkatkan pengalaman Glucosio dan kiat bermanfaat lainnya. - Kirim umpan balik Jika kamu menemukan masalah teknik atau umpan balik tentang Glucosio kami mengharapkan kamu untuk mengirimkannya pada menu pengaturan demi membantu kami meningkatkan Glucosio. Tambahkan bacaan Pastikan untuk menambahkan bacaan glukosamu secara berkala agar kami dapat membantu melacak level glukosamu. + Ekspor data Anda Kisaran yang diinginkan Nilai minimal Nilai maksimal + Bahasa + Tidak ada aplikasi email yang terpasang. Silakan kirim email ke hello@glucosio.org + Undang orang lain + Coba Glucosio, sebuah aplikasi sumber terbuka untuk manajemen diabetes dan penelitian. + Coba Glucosio + Privasi + Dengan menggunakan Glucosio, Anda setuju dengan + Tentang Glucosio + Lisensi sumber terbuka + Aktifkan dukungan FreeStyle Libre® + Rendah + Tinggi + Jalan cepat + Berlari + Renang + Menari + Bersepeda + Golf + Tinju + Tenis + Tenis meja + Panjat tebing + Gulat + Mendaki + + + + + + + Karbohidrat: + Protein: + Gula: + Lemak: + Berkontribusi + Dari: + EKSPOR + Ekspor Data + Berbagi menggunakan + Data Glucosio + "Mengekspor" + Tangkapan layar disimpan di Galeri + Ada masalah saat mengekspor bacaan. Silakan coba lagi. + Tidak ada bacaan untuk diekspor. Berat + Keton + Tekanan minimal + Tekanan maksimal + HbA1c + Tambahkan bacaan Glukosa + Ubah bacaan Glukosa + Tambahkan Berat Badan + Ubah Berat Badan + Tambahkan Tingkat Kolesterol + Ubah Tingkat Kolesterol + Tambahkan HbA1c + Ubah HbA1c + Tambahkan Keton + Ubah Keton + Tambahkan Tekanan Darah + Ubah Tekanan Darah + Berat Badan + Tekanan Darah + Tingkat Kolesterol + Tingkat Gula Darah + Anda sudah memiliki entri untuk saat ini. Silakan menghapusnya sebelum menambahkan koreksi. + Silakan meletakan ponsel Anda pada sensor dan jangan bergerak sampai itu bergetar. + Perangkat ini tidak mendukung NFC. + NFC dinonaktifkan. + Tambahkan dari FreeStyle Libre® + Berhasil menambahkan bacaan dari FreeStyle Libre® + HbA1c: + Ditambahkan dari FreeStyle Libre® Anda + RATA-RATA KADAR GULA DARAH + SIMPAN + Dukungan + Email + Cadangkan sekarang + Batal + riwayat + simpan + Pengingat + Tambahkan bacaan diff --git a/app/src/main/res/values-is-rIS/strings.xml b/app/src/main/res/values-is-rIS/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-is-rIS/strings.xml +++ b/app/src/main/res/values-is-rIS/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 5057973a..e785ba1f 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -137,7 +137,6 @@ Glucosio ha delle categorie di default per l\'immissione dei valori di glucosio, ma puoi creare categorie personalizzate nelle impostazioni per soddisfare le tue necessità. Controllare spesso qui L\'assistente di Glucosio fornisce constanti suggerimenti e continuerà a migliorare, perciò controlla sempre qui azioni che possono migliorare la tua esperienza d\'uso di Glucosio e altri utili consigli. - Invia feedback Se trovi eventuali problemi tecnici o hai feedback su Glucosio ti invitiamo a segnalarli nel menu impostazioni, al fine di aiutarci a migliorare Glucosio. Aggiungi una lettura Assicurati di aggiungere regolarmente le letture della tua glicemia, così possiamo aiutarti a monitorare i livelli di glucosio nel corso del tempo. @@ -199,6 +198,12 @@ Wrestling Escursionismo Lavori di casa + + + + + + Carboidrati: Proteine: @@ -313,7 +318,6 @@ cronologia salva Promemoria - È ora di aggiungere la tua glicemia! Aggiungi lettura Nessun promemoria impostato. Aggiungine uno qui. diff --git a/app/src/main/res/values-iu-rNU/strings.xml b/app/src/main/res/values-iu-rNU/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-iu-rNU/strings.xml +++ b/app/src/main/res/values-iu-rNU/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 8a696a0c..b186958a 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -131,7 +131,6 @@ Glucosio מגיע עם קטגוריות ברירת המחדל עבור קלט רמת הגלוקוז, אך באפשרותך ליצור קטגוריות מותאמות אישית הגדרות כדי להתאים לצרכים הייחודיים שלך. בדוק כאן לעיתים קרובות העוזר ב-Glucosio מספק עצות קבועות לשמור על שיפור, בידקו בתכיפות לגבי שימושי פעולות שבאפשרותך לבצע כדי לשפר את החוויה Glucosio שלך, טיפים שימושיים נוספים. - שלח משוב אם אתם מוצאים כל בעיות טכניות או לקבל משוב אודות Glucosio אנו מעודדים אותך להגיש את זה בתפריט \' הגדרות \' כדי לסייע לנו לשפר את Glucosio. הוסף מדידה הקפד להוסיף באופן קבוע את מדידות רמת הסוכר בדם שלך כדי שנוכל לעזור לך לעקוב אחר רמות הסוכר שלך לאורך זמן. @@ -186,6 +185,12 @@ היאבקות טיולי הליכה טיולים בחצר + + + + + + פחמימות: חלבון: diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index cfdae498..dec3d6b9 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -136,7 +136,6 @@ Glucosio は血糖値入力のデフォルトの分類が付属していますが、設定で、お客様固有のニーズに合わせてカスタム分類を作成することができます。 多くの場合はこちら Glucosio の体験を改善するために行うことができる便利なアクションや、その他の有用なヒントを常にここで確認するため、Glucosio アシスタントは、正規のヒントを提供して改善を維持します。 - フィードバックを送信 技術的な問題を見つけたり、Glucosio についてのフィードバックをしたい場合、 Glucosio を改善するため、設定メニューでそれを送信することをお勧めします。 測定値を追加 私たちが時間をかけてあなたの血糖値を追跡できるように、血糖値の測定値を定期的に追加するようにしてください。 @@ -198,6 +197,12 @@ レスリング ハイキング 庭仕事 + + + + + + 炭水化物: タンパク質: @@ -312,7 +317,6 @@ 履歴 保存 アラーム - 血糖値を記録する時間です! 測定値を追加 アラームは設定されていません。ここで新しいアラームを追加します。 diff --git a/app/src/main/res/values-jbo-rEN/strings.xml b/app/src/main/res/values-jbo-rEN/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-jbo-rEN/strings.xml +++ b/app/src/main/res/values-jbo-rEN/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ji-rDE/strings.xml b/app/src/main/res/values-ji-rDE/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ji-rDE/strings.xml +++ b/app/src/main/res/values-ji-rDE/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-jv-rID/strings.xml b/app/src/main/res/values-jv-rID/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-jv-rID/strings.xml +++ b/app/src/main/res/values-jv-rID/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ka-rGE/strings.xml b/app/src/main/res/values-ka-rGE/strings.xml index 127a87ef..bc4bb0da 100644 --- a/app/src/main/res/values-ka-rGE/strings.xml +++ b/app/src/main/res/values-ka-rGE/strings.xml @@ -101,7 +101,6 @@ Take your medicine as prescribed by your doctor even small lapses in your medicine can impact your blood glucose level and cause other side effects. If having difficulty remembering ask your doctor about medication management and reminder options. კაი, გავიგე - უკუკავშირის გაგზავნა მონაცემთა ექსპორტირება ენა კონფედენციალურობა @@ -121,6 +120,12 @@ ფრენბურთი კრიკეტი ტენისი + + + + + + ცხიმი: diff --git a/app/src/main/res/values-kab/strings.xml b/app/src/main/res/values-kab/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-kab/strings.xml +++ b/app/src/main/res/values-kab/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-kdh/strings.xml b/app/src/main/res/values-kdh/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-kdh/strings.xml +++ b/app/src/main/res/values-kdh/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-kg-rCG/strings.xml b/app/src/main/res/values-kg-rCG/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-kg-rCG/strings.xml +++ b/app/src/main/res/values-kg-rCG/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-kj-rAO/strings.xml b/app/src/main/res/values-kj-rAO/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-kj-rAO/strings.xml +++ b/app/src/main/res/values-kj-rAO/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-kk-rKZ/strings.xml b/app/src/main/res/values-kk-rKZ/strings.xml index 7b65f874..2e808709 100644 --- a/app/src/main/res/values-kk-rKZ/strings.xml +++ b/app/src/main/res/values-kk-rKZ/strings.xml @@ -84,6 +84,12 @@ өрмелеу Күрес Аулада жұмыс істеу + + + + + + Қанты: Майлылығы: diff --git a/app/src/main/res/values-kl-rGL/strings.xml b/app/src/main/res/values-kl-rGL/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-kl-rGL/strings.xml +++ b/app/src/main/res/values-kl-rGL/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-km-rKH/strings.xml b/app/src/main/res/values-km-rKH/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-km-rKH/strings.xml +++ b/app/src/main/res/values-km-rKH/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-kmr-rTR/strings.xml b/app/src/main/res/values-kmr-rTR/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-kmr-rTR/strings.xml +++ b/app/src/main/res/values-kmr-rTR/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-kn-rIN/strings.xml b/app/src/main/res/values-kn-rIN/strings.xml index 3921aecb..af4eca6c 100644 --- a/app/src/main/res/values-kn-rIN/strings.xml +++ b/app/src/main/res/values-kn-rIN/strings.xml @@ -63,6 +63,12 @@ ರದ್ದು ಮಾಡು + + + + + + ಗ್ಲುಕೋಸ್ ರೀಡಿಂಗ್ ನಮೂದಿಸಿ diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 0085f60a..9ee068e0 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -26,6 +26,7 @@ 미리보기 기록 Tips + 새로운 수치 추가 안녕하세요 안녕하세요 이용 약관 @@ -94,32 +95,37 @@ 체중 측정 카테고리 선택 - Eat more fresh, unprocessed foods to help reduce carbohydrate and sugar intake. - Read the nutritional label on packaged foods and beverages to control sugar and carbohydrate intake. - When eating out, ask for fish or meat broiled with no extra butter or oil. - When eating out, ask if they have low sodium dishes. - When eating out, eat the same portion sizes you would at home and take the leftovers to go. - When eating out ask for low-calorie items, such as salad dressings, even if they\'re not on the menu. - When eating out ask for substitutions. Instead of French fries, request a double order of a vegetable like salad, green beans or broccoli. - When eating out, order foods that are not breaded or fried. - When eating out ask for sauces, gravy and salad dressings "on the side." - Sugar free doesn’t really mean sugar free. It means 0.5 grams (g) of sugar per serving, so be careful to not indulge in too many sugar free items. - Moving toward a healthy weight helps control blood sugars. Your doctor, a dietitian, and a fitness trainer can get you started on a plan that will work for you. - Checking your blood level and tracking it in an app like Glucosio twice a day will help you be aware of outcomes from food and lifestyle choices. - Get HbA1c blood tests to find out your average blood sugar for the past 2 to 3 months. Your doctor should tell you how frequently this test will be needed to be performed. + 더 신선하고, 가공되지 않은 음식을 먹는 것은 탄수화물과 당 섭취를 줄이는데 도움을 줍니다. + 당과 탕수화물 섭취를 조절하기 위해 포장된 식품과 음료에 있는 영양성분표를 읽으세요. + 외식할 때, 생선이나 고기를 추가적인 버터나 기름없이 구워달라고 요청하세요. + 외식할 때, 저염식 요리가 있는지 물어보세요. + 외식을 할 때는 집에서 먹는 양만큼만 먹고 남은 것은 싸가시기 바랍니다. + 외식할 때, 메뉴에 없더라도 샐러드 드레싱과 같은 저칼로리 품목을 요청하세요. + 외식을 할 때는 다른 것으로 교체하세요. 감자튀김 대신에 샐러드, 콩 또는 브로콜리 같은 채소를 요청하십시오. + 외식할 때, 빵가루를 입히지 않거나 기름에 튀기지 않은 음식을 주문하세요. + 외식을 할 때는 육즙으로 만든 소스를 요청하시고 샐러드 드레싱은 따로 달라고 요청하십시오. + 무설탕은 정말로 설탕이 안들어갔다는 의미가 아닙니다. 1회 제공량에 0.5그램(g)의 설탕이 있다는 의미이므로, 너무 많은 무설탕 품목에 빠지지 않도록 조심하세요. + 건강한 몸무게로 유지하는 것은 혈당 수치를 관리하는 데에 도움이 됩니다. 의사, 영양사 그리고 헬스 트레이너가 몸무게 관리 계획에 도움을 줄 것입니다. + 혈액 수치를 측정하고 그 결과를 Glucosio앱을 통해 하루에 2번 추적하는 것은 음식과 생활 양식의 선택으로부터 나온 결과를 인식하는 데 도움을 줄 것입니다. + 지난 2 ~ 3개월동안의 평균 혈당 수치를 알아보려면 HbA1c 혈액 검사를 받으세요. 의사가 검사결과를 보고 이 검사를 얼마나 자주 받아야 할지 알려줄 것입니다. 탄수화물은 혈당 레벨에 영향을 미치므로 얼마나 많은 탄수화물을 소비하는지를 추적하는 것은 혈액 레벨을 확인하는 것 만큼 중요하다고 할 수 있습니다. 탄수화물 섭취에 관해 의사 또는 영양학자와 이야기해 보세요. - Controlling blood pressure, cholesterol, and triglyceride levels is important since diabetics are susceptible to heart disease. - There are several diet approaches you can take to eating healthier and helping improve your diabetes outcomes. Seek advice from a dietician on what will work best for you and your budget. - Working on getting regular exercise is especially important for those with diabetes and can help you maintain a healthy weight. Talk to your doctor about exercises that will be appropriate for you. - Being sleep-deprived can make you eat more especially things like junk food and as a result can negatively impact your health. Be sure to get a good night sleep and consult a sleep specialist if you are having difficulty. - Stress can have a negative impact on diabetes. Talk to your doctor or other health care professional about coping with stress. - Visiting your doctor once a year and having regular communication throughout the year is important for diabetics to prevent any sudden onset of associated health problems. + 당뇨병은 심장질환으로 이어지기 쉽기 때문에 혈압, 콜레스테롤, 트라이글리세라이드 수치를 관리하는 것이 중요합니다. + 식이요법중에는 더 건강한 식단이나 당뇨 수치 개선에 도움을 줄 수 있는 것들이 있습니다. 영양사와 상담하여 어떠한 식단이 적절한 예산안에서 당신에게 가장 유용할지 조언 받으시기 바랍니다. + 규칙적인 운동은 당뇨병 환자들에게 중요하며, 건강한 몸무게를 유지하는데에 도움을 줍니다. 의사와 상담하여 당신에게 적절한 운동에 대해 조언을 받으십시오. + 부족한 수면은 불량 식품 같은 것을 더 먹도록 하며, 이는 건강에 안좋은 영향을 끼치게 될 것입니다. 잠을 편히 잘 수 있도록 노력하시고, 만약 잠을 잘 못주무신다면 수면 전문가와 상담하시기 바랍니다. + 스트레스는 당뇨병에 부정적인 영향을 줄 수 있습니다. 담당 의사나 전문 의료진과 스트레스 대처법에 관해 상담하세요. + 의사에게 지속적으로 정기적인 상담을 받는 것은, 당뇨와 관련하여 일어날 수 있는 갑작스런 건강문제를 방지하기 위해 중요합니다. 비록 약 복용한지 조금 경과하여도 혈당 레벨에 영향을 주고 다른 부작용의 원인이 될지라도 의사에게 처방받은 대로 약을 복용합니다. 기억하기 어려운 경우에는 복약 관리 및 미리 알려주는 옵션에 대해 의사에게 요청합니다. + + 나이가 많은 당뇨병 환자는 당뇨와 관련된 건강문제에 큰 위험이 있을 수 있습니다. 당신의 나이에 존재하는 당뇨병의 문제와 어떤 것에 대해 조심해야 할 지 의사와 상담하시기 바랍니다. + 음식을 만들 때 사용하는 소금과 요리된 음식에 넣을 소금의 양을 제한합니다. + 보조 기능 지금 업데이트 네, 알겠습니다 의견 보내기 + 라이브 채팅 읽기 추가 지금 사용해 보기 체중 업데이트 @@ -130,26 +136,29 @@ Glucosio는 포도당 입력에 대한 디폴트 카테고리를 제공하지만 개별적인 요구에 맞추기 위해 설정에서 사용자정의 카테고리를 생성할 수 있습니다. 여기에서 자주 확인 Glucosio 보조는 정기적인 팁을 제공하며 지속적으로 개선되고 있습니다. 따라서 Glucosio 사용경험을 개선하고 다른 유용한 팁을 위해 취할 수 있는 유용한 작업에 대해 여기를 항상 확인해 주세요. - 피드백 보내기 기술적인 이슈를 찾거나 Glucosio에 대한 피드백이 있을 때 Glucosio를 개선하도록 돕기 위해 설정 메뉴에서 제출해 주시기를 권장합니다. 읽기 추가 주기적으로 포도당 읽기를 추가하여 시간이 지남에 따른 포도당 레벨을 추적하는 데 돕도록 해야 합니다. 데이터 내보내기 내보내기 기능을 사용하여 의사에게 데이터를 공유하거나 데이터를 Google Drive에 백업합니다. A1C 계산 + 이제 Glucosio의 HbA1c 계산기를 네비게이션 메뉴에서 사용하실 수 있습니다. 당신의 평균 혈액 포도당 수치를 입력하고 간단하게 HbA1c 값을 저장하세요. 선호 범위 사용자 정의 범위 최소값 최대값 언어 + 이메일 어플리케이션이 설치되어 있지 않습니다. hello@glucosio.org 로 직접 메일을 보내주시기 바랍니다. 다른 사람 초대 당뇨 관리 및 연구를 위한 오픈 소스 앱인 Glucosio를 사용해 보세요. Glucosio를 사용해 보세요 + 구글 드라이브 백업 개인 정보 Glucosio를 사용함으로써 다음 사항을 동의합니다 구글 드라이브 Glucosio에 대하여 Glucosio 등급 + 오픈소스 라이센스 FreeStyle Libre® 지원 활성화 실험 기능: FreeStyle Libre® 지원 활성화 실험 기능: 읽기 어려운 사용자에 대한 가독성 증가 @@ -187,6 +196,12 @@ 레슬링 하이킹 정원 일 + + + + + + 탄수화물: 단백질: @@ -215,6 +230,7 @@ 스크린샷을 갤러리에 저장하였습니다 스크린샷을 갤러리에 저장하는데 오류가 발생하였습니다 범위 내보내기 + 수치를 내보내는 중에 문제가 생겼습니다.\n다시 시도 하세요. 내보내기할 읽기가 없습니다. 새로운 읽기를 추가하였습니다 체중 @@ -228,10 +244,15 @@ 포도 당 독서를 추가 포도당 읽기 편집 몸무게 추가 + 몸무게 수정하기 콜레스테롤 레벨 추가 + 콜레스테롤 수치 수정하기 HBA1C 추가 + HbA1C 수정하기 케톤 추가 + 케톤 수정하기 혈압 추가 + 혈압 수정하기 신체 체중 케톤 혈압 @@ -240,20 +261,61 @@ 혈당 레벨 해당 시간에 대한 항목을 이미 갖고 있습니다. 수정사항을 추가하기 전에 먼저 삭제하십시오. 폰을 센서에 가져다대고 진동이 울릴 때까지 움직이지 마십시오. + 이 장치는 NFC를 지원하지 않습니다. NFC가 비활성화 되었습니다. + FreeStyle Libre®에서 추가하기 NFC 연결을 여는데 오류가 발생하였습니다! + FreeStyle Libre®에서 성공적으로 수치를 추가했습니다. HBA1C를 계산하기 위한 데이터가 충분하지 않습니다 HBA1C: + FreeStyle Libre®에서 추가하였습니다 평균 혈당 레벨 A1C A1C 계산기 저장 지원 + 어떻게 도와 드릴까요? Email 라이브 채팅 지원 포럼 혈당 레벨을 기록할 시간입니다! + 약을 복용할 시간입니다. + 이것은 추정치이며 지난달 기록의 평균으로 부터 계산되었습니다. 이 추정치는 HbA1c 추정치 계산에 널리 쓰이는 계산식을 사용한 것이므로 단순히 추정치로만 참고하시기 바랍니다. 참고 + 백업 및 내보내기 + 구글 드라이브에 백업 + 복원하기 + CSV 형식으로 내보내기 자동 백업 + 구글 드라이브에 당신의 데이터를 백업해서 당신이 장치를 잃어버렸거나 바꿨을때 당신의 수치들을 복원할 수 있습니다. + 변경 내용을 적용하기 위해 다시 시작합니다... + Google Drive와 Glucosio 데이터 베이스를 동기화 합니다. + Glucosio의 데이터를 동기화하면 기기를 잃어버리시거나 변경하시더라도 모든 기록을 복원할 수 있습니다. + 데이터베이스가 드라이브에 성공적으로 백업되었습니다 + 드라이브에서 성공적으로 데이터베이스를 복원하였습니다 + 문제가 발생했습니다. 다시 시도하십시오 :/ + 마지막 백업: + 백업 폴더 + 미설정 + 지금 백업하기 + 최근 백업 + 더 많은 백업들 보기 + 이전 버전으로 되돌리기 + 백업을 복원하면 모든 기존의 데이터를 덮어쓸 것입니다. + 백업 세부 정보 + 취소 + 백업 복원 + 드라이브에서 복원 + 드라이브에서 복원이 가능한 백업을 찾을 수 없습니다. + 구글드라이브에 백업하려면 구글 플레이 서비스를 사용 해야 합니다. + CSV 파일로 내보내기 + 드라이브 관리 + mmol/L mmol/L + 이전의 그래프로 되돌리기 + 히스토리 + 저장 + 알림 + 수치 추가 + 설정된 알람이 없습니다. 새로운 알람을 등록하세요. diff --git a/app/src/main/res/values-kok-rIN/strings.xml b/app/src/main/res/values-kok-rIN/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-kok-rIN/strings.xml +++ b/app/src/main/res/values-kok-rIN/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ks-rIN/strings.xml b/app/src/main/res/values-ks-rIN/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ks-rIN/strings.xml +++ b/app/src/main/res/values-ks-rIN/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ks-rPK/strings.xml b/app/src/main/res/values-ks-rPK/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ks-rPK/strings.xml +++ b/app/src/main/res/values-ks-rPK/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ku-rTR/strings.xml b/app/src/main/res/values-ku-rTR/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ku-rTR/strings.xml +++ b/app/src/main/res/values-ku-rTR/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-kv-rKO/strings.xml b/app/src/main/res/values-kv-rKO/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-kv-rKO/strings.xml +++ b/app/src/main/res/values-kv-rKO/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-kw-rGB/strings.xml b/app/src/main/res/values-kw-rGB/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-kw-rGB/strings.xml +++ b/app/src/main/res/values-kw-rGB/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ky-rKG/strings.xml b/app/src/main/res/values-ky-rKG/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ky-rKG/strings.xml +++ b/app/src/main/res/values-ky-rKG/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-la-rLA/strings.xml b/app/src/main/res/values-la-rLA/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-la-rLA/strings.xml +++ b/app/src/main/res/values-la-rLA/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-lb-rLU/strings.xml b/app/src/main/res/values-lb-rLU/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-lb-rLU/strings.xml +++ b/app/src/main/res/values-lb-rLU/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-lg-rUG/strings.xml b/app/src/main/res/values-lg-rUG/strings.xml index 5a1d3c34..7fbb0752 100644 --- a/app/src/main/res/values-lg-rUG/strings.xml +++ b/app/src/main/res/values-lg-rUG/strings.xml @@ -65,9 +65,14 @@ Sabiiti Ekyikka Obuzito - Waayo endowooza yo + + + + + + Entunnmuusi diff --git a/app/src/main/res/values-li-rLI/strings.xml b/app/src/main/res/values-li-rLI/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-li-rLI/strings.xml +++ b/app/src/main/res/values-li-rLI/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-lij-rIT/strings.xml b/app/src/main/res/values-lij-rIT/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-lij-rIT/strings.xml +++ b/app/src/main/res/values-lij-rIT/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ln-rCD/strings.xml b/app/src/main/res/values-ln-rCD/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ln-rCD/strings.xml +++ b/app/src/main/res/values-ln-rCD/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-lo-rLA/strings.xml b/app/src/main/res/values-lo-rLA/strings.xml index 77b8a559..21036c7b 100644 --- a/app/src/main/res/values-lo-rLA/strings.xml +++ b/app/src/main/res/values-lo-rLA/strings.xml @@ -136,7 +136,6 @@ Glucosio ມາພ້ອມກັບປະເພດກລູໂຄສແບບພື້ນຖານ ແຕ່ວ່າທ່ານສາມາດສ້າງຂື້ນມາໃຫມ່ໃນກາານຕັ້ງຄ່າເພື່ອໃຫ້ເຫມາະສົມກັບຄວາມຕ້ອງການຂອງທ່ານ. ໃຫ້ເຂົ້າມາກວດເບິງຢູ່ນີ້ຢ່າງເປັນປົກກະຕິ ຜູ້ຊ່ວຍ Glucosio ຈະສະຫນອງເຄັດລັບຕ່າງໆ ແລະ ປັບປຸງມັນຢ່າງເປັນປະຈຳ. ສະນັ້ນມັນເຂົ້າມາກວດສອບຢູ່ນີ້ສຳລັບຂໍ້ມູນທີ່ສຳຄັນຕ່າງໆທີ່ທ່ານສາມາດນຳເອົາໄປປັບປຸງປະສົບການໃຊ້ງານ Glucosio ຂອງທ່ານ ແລະ ເຄັດລັບອື່ນໆທີ່ເປັນປະໂຫຍດ. - ສົ່ງຄໍາຄິດເຫັນ ເພື່ອເປັນການຊ່ວຍໃຫ້ເຮົາສາມາດປັບປຸງ Glucosio ໃຫ້ດີຂື້ນ ຫາກວ່າທ່ານພົບເຫັນບັນຫາທາງເຕັກນິກ ຫລື ຄຳແນະນຳໃດໆ ທ່ານສາມາດສົ່ງຂໍ້ມູນມາໃຫ້ພວກເຮົາໄດ້ໃນເມນູການຕັ້ງຄ່າ. ເພີ່ມການອ່ານ ກວດສອບເບິງໃຫ້ແນ່ໃຈວ່າໄດ້ບັນທຶກລະດັບນ້ຳຕານກລູໂຄສເປັນປະຈຳ ເພື່ອທີ່ພວກເຮົາຈະສາມາດຊ່ວຍທ່ານຕິດຕາມລະດັບນ້ຳຕານກລູໂຄສຕະລອດເວລາ. @@ -198,6 +197,12 @@ ກິລາມວຍປໍ້າ ການຢ່າງຫລີ້ນໄລຍະໃກ ອະນາໄມເດີນບ້ານ + + + + + + ທາດຄາໂບໄຮເດຣທ: ທາດໂປຣຕີນ: @@ -312,7 +317,6 @@ ປະຫວັດການນຳໃຊ້ ບັນທຶກ ການແຈ້ງເຕືອນ - ເຖິງເວລາບັນທຶກລະດັບນໍ້າຕານຂອງທ່ານ! ເພີ່ມການອ່ານ ບໍ່ໄດ້ຕັ້ງຄ່າການແຈ້ງເຕືອນ. ເພີ່ມການແຈ້ງເຕືອນໃຫມ່ໄດ້ບ່ອນນີ້. diff --git a/app/src/main/res/values-lt-rLT/strings.xml b/app/src/main/res/values-lt-rLT/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-lt-rLT/strings.xml +++ b/app/src/main/res/values-lt-rLT/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-luy-rKE/strings.xml b/app/src/main/res/values-luy-rKE/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-luy-rKE/strings.xml +++ b/app/src/main/res/values-luy-rKE/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-lv-rLV/strings.xml b/app/src/main/res/values-lv-rLV/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-lv-rLV/strings.xml +++ b/app/src/main/res/values-lv-rLV/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-mai-rIN/strings.xml b/app/src/main/res/values-mai-rIN/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-mai-rIN/strings.xml +++ b/app/src/main/res/values-mai-rIN/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-me-rME/strings.xml b/app/src/main/res/values-me-rME/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-me-rME/strings.xml +++ b/app/src/main/res/values-me-rME/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-mg-rMG/strings.xml b/app/src/main/res/values-mg-rMG/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-mg-rMG/strings.xml +++ b/app/src/main/res/values-mg-rMG/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-mh-rMH/strings.xml b/app/src/main/res/values-mh-rMH/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-mh-rMH/strings.xml +++ b/app/src/main/res/values-mh-rMH/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-mi-rNZ/strings.xml b/app/src/main/res/values-mi-rNZ/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-mi-rNZ/strings.xml +++ b/app/src/main/res/values-mi-rNZ/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-mk-rMK/strings.xml b/app/src/main/res/values-mk-rMK/strings.xml index 50d49dcf..aba874ba 100644 --- a/app/src/main/res/values-mk-rMK/strings.xml +++ b/app/src/main/res/values-mk-rMK/strings.xml @@ -73,6 +73,12 @@ ДОДАЈ МЕРЕЊЕ + + + + + + diff --git a/app/src/main/res/values-ml-rIN/strings.xml b/app/src/main/res/values-ml-rIN/strings.xml index 55c7e975..08719626 100644 --- a/app/src/main/res/values-ml-rIN/strings.xml +++ b/app/src/main/res/values-ml-rIN/strings.xml @@ -82,8 +82,13 @@ ഇപ്പോൾ പുതുക്കുക + + + + + + തൂക്കം - ഗ്ലൂക്കോസ് ചേര്‍ക്കുക diff --git a/app/src/main/res/values-mn-rMN/strings.xml b/app/src/main/res/values-mn-rMN/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-mn-rMN/strings.xml +++ b/app/src/main/res/values-mn-rMN/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-moh-rCA/strings.xml b/app/src/main/res/values-moh-rCA/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-moh-rCA/strings.xml +++ b/app/src/main/res/values-moh-rCA/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-mos/strings.xml b/app/src/main/res/values-mos/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-mos/strings.xml +++ b/app/src/main/res/values-mos/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-mr-rIN/strings.xml b/app/src/main/res/values-mr-rIN/strings.xml index 492bbda9..0bdf5074 100644 --- a/app/src/main/res/values-mr-rIN/strings.xml +++ b/app/src/main/res/values-mr-rIN/strings.xml @@ -65,6 +65,12 @@ वजन + + + + + + वजन diff --git a/app/src/main/res/values-ms-rMY/strings.xml b/app/src/main/res/values-ms-rMY/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ms-rMY/strings.xml +++ b/app/src/main/res/values-ms-rMY/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-mt-rMT/strings.xml b/app/src/main/res/values-mt-rMT/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-mt-rMT/strings.xml +++ b/app/src/main/res/values-mt-rMT/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-my-rMM/strings.xml b/app/src/main/res/values-my-rMM/strings.xml index 221250b7..e3e702ec 100644 --- a/app/src/main/res/values-my-rMM/strings.xml +++ b/app/src/main/res/values-my-rMM/strings.xml @@ -122,7 +122,6 @@ ဂလူးကို့စ် အချက်အလက်အတွက် Glucosio က ပုံသေ ကဏ္ဍများဖြင့် ထည့်သွင်းထားပါသည် သို့ရာတွင် သင်၏လိုအပ်ချက်နှင့် ကိုက်ညီရန် စိတ်ကြိုက်ကဏ္ဍများကို အပြင်အဆင်များထဲတွင် ဖန်တီးနိုင်ပါသည်. ဒီနေရာကို မကြာခဏ စစ်ဆေးပါ Glucosio လက်ထောက်သည် ပုံမှန်အကြံပြုချက်များကို ပေးပါသည်။ ထို့ပြင် ဆက်လက်တိုးတက်အောင် ဆောင်ရွက်နေပါသည်။ ထို့ကြောင့် သင့်Glucosio သုံးစွဲမှုအတွေ့အကြုံများနှင့် အခြားအသုံးဝင်သည့် အကြံပြုချက်များအတွက် သင်ဆောင်ရွက်နိုင်သည်များကို အဲဒီမှာ အမြဲ လာရောက်ကြည့်ရှုပါ။ - အကြံပြုချက် ပေးပို့ရန် နည်းပညာ အခက်အခဲများ သို့မဟုတ် Glucosio နှင့် ပတ်သက်၍ တုံ့ပြန်လိုပါက Glucosio ကို ပိုမိုကောင်းမွန်ဖို့ ကူညီရန် အပြင်အဆင် စာရင်းတွင် ကျွန်ုပ်တို့ကို ပေးပို့ပါ. ပြန်ဆိုချက် တစ်ခု ထည့်ပါ သင်၏ ဂလူးကို့စ် ဖတ်ခြင်းကို ပုံမှန် ဖြစ်အောင်လုပ်ပေးပါ အဲလိုဆိုရင် ကျွန်ုပ်တို့က သင်၏ဂလူးကို့စ် ပမာဏကို အချိန်တိုင်း စောင့်ကြည့်ဖို့ ကူညီမှာပါ. @@ -177,6 +176,12 @@ နပန်း ခရီး​ဝေးလမ်း​လျှောက်ခြင်း ခြံရှင်းအလုပ် + + + + + + ကစီဓါတ်ပါ​သော အစာများ အသားဓါတ် diff --git a/app/src/main/res/values-na-rNR/strings.xml b/app/src/main/res/values-na-rNR/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-na-rNR/strings.xml +++ b/app/src/main/res/values-na-rNR/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-nds-rDE/strings.xml b/app/src/main/res/values-nds-rDE/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-nds-rDE/strings.xml +++ b/app/src/main/res/values-nds-rDE/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ne-rNP/strings.xml b/app/src/main/res/values-ne-rNP/strings.xml index 7017b116..13691db0 100644 --- a/app/src/main/res/values-ne-rNP/strings.xml +++ b/app/src/main/res/values-ne-rNP/strings.xml @@ -76,10 +76,15 @@ ल ठिक छ आफ्नो वजन अद्यावधिक गर्नुहोस् विभाग सिर्जना - प्रतिक्रिया बुझाउनुहोस् रुचाइएको सीमा + + + + + + diff --git a/app/src/main/res/values-ng-rNA/strings.xml b/app/src/main/res/values-ng-rNA/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ng-rNA/strings.xml +++ b/app/src/main/res/values-ng-rNA/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 5c69feac..3df037bf 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -46,7 +46,7 @@ Glucose-eenheid van voorkeur mg/dl mmol/l - A1C-eenheid van voorkeur + HbA1c-eenheid van voorkeur percentage Gewichtseenheid van voorkeur kilogram @@ -71,7 +71,7 @@ Bedtijd Nacht Nuchtere glucose - Opnieuw controleren + Nieuwe controle Anders ANNULEREN TOEVOEGEN @@ -108,7 +108,7 @@ Suikervrij betekent niet echt suikervrij. Het betekent 0,5 gram (g) suiker per portie, dus voorkom dat u zich met te veel suikervrije items verwent. Streven naar een gezond gewicht helpt bloedsuikers te beheersen. Uw arts, een diëtist en een fitnesstrainer kunnen u op weg helpen met een schema dat voor u werkt. Twee maal per dag controleren en bijhouden van uw bloedspiegel in een app als Glucosio helpt u bewust te worden van resultaten van keuzes in voedsel en levensstijl. - Vraag om A1c-bloedtests om achter uw gemiddelde bloedsuikerspiegel van de afgelopen 2 tot 3 maanden te komen. Uw arts kan vertellen hoe vaak deze test dient te worden uitgevoerd. + Vraag om HbA1c-bloedtests om achter uw gemiddelde bloedsuikerspiegel van de afgelopen 2 tot 3 maanden te komen. Uw arts kan vertellen hoe vaak deze test dient te worden uitgevoerd. Bijhouden hoeveel koolhydraten u verbruikt kan net zo belangrijk zijn als het controleren van bloedspiegels, omdat koolhydraten bloedsuikerspiegels beïnvloeden. Praat met uw arts of een diëtist over de inname van koolhydraten. Het beheersen van bloeddruk-, cholesterol- en triglyceridenniveaus is belangrijk, omdat diabetici gevoelig zijn voor hartziekten. Er zijn diverse dieetbenaderingen die u kunt nemen om gezonder te eten en uw diabetesresultaten te verbeteren. Zoek advies bij een diëtist over wat het beste voor u en uw budget werkt. @@ -137,14 +137,13 @@ Glucosio bevat standaardcategorieën voor glucose-invoer, maar in de instellingen kunt u eigen categorieën maken die aan uw unieke behoeften voldoen. Kijk hier regelmatig Glucosio-assistent levert regelmatig tips en wordt continu verbeterd, dus kijk altijd hier voor nuttige acties die u kunt nemen om uw Glucosio-ervaring te verbeteren en voor andere nuttige tips. - Feedback indienen Als u technische problemen tegenkomt of feedback over Glucosio hebt, zien we graag dat u deze indient om Glucosio te helpen verbeteren. Een uitlezing toevoegen Zorg ervoor dat u regelmatig uw glucose-uitlezingen toevoegt, zodat we kunnen helpen uw glucosegehalten na verloop van tijd bij te houden. Uw gegevens exporteren Deel uw gegevens met uw arts of plaats een back-up ervan op Google Drive via de exportfunctie. - A1C berekenen - Glucosio’s ingebouwde A1C-calculator is nu in het zijmenu beschikbaar. Voer uw gemiddelde bloedsuikerspiegel in en sla direct de berekende A1C-waarde op. + HbA1c berekenen + Glucosio’s ingebouwde HbA1c-calculator is nu in het zijmenu beschikbaar. Voer uw gemiddelde bloedsuikerspiegel in en sla direct de berekende HbA1c-waarde op. Voorkeursbereik Aangepast bereik Min. waarde @@ -199,6 +198,12 @@ Worstelen Wandelen Tuinieren + + + + + + Koolhydraten: Proteïnen: @@ -226,7 +231,7 @@ Glucosio heeft een opslagmachtiging nodig om een schermafbeelding op te slaan Schermafbeelding opgeslagen naar galerij Fout bij opslaan van schermafbeelding naar galerij - Exportbereik + Bereik exporteren Er was een probleem bij het exporteren van de uitlezingen. Probeer het opnieuw. Geen uitlezingen te exporteren. Nieuwe uitlezing toegevoegd @@ -237,15 +242,15 @@ Totale cholesterol LDL-cholesterol HDL-cholesterol - HB1AC + HbA1c Glucose-uitlezing toevoegen Glucose-uitlezing bewerken Lichaamsgewicht toevoegen Lichaamsgewicht bewerken Cholesterolspiegel toevoegen Cholesterolniveau bewerken - HB1AC toevoegen - HBA1C bewerken + HbA1c toevoegen + HbA1c bewerken Ketonen toevoegen Ketonen bewerken Bloeddruk toevoegen @@ -254,7 +259,7 @@ Ketonen Bloeddruk Cholesterolspiegel - HB1AC-uitlezing + HbA1c-uitlezing Bloedsuikerspiegel U hebt al een vermelding voor deze tijd. Verwijder deze voordat u een correctie toevoegt. Houd uw telefoon voor de sensor en beweeg niet totdat deze trilt. @@ -263,12 +268,12 @@ Toevoegen vanuit FreeStyle Libre® Fout bij openen van NFC-verbinding! Uitlezing met succes toegevoegd vanuit FreeStyle Libre® - Onvoldoende gegevens om HBA1C te berekenen - HBA1C: + Onvoldoende gegevens om HbA1c te berekenen + HbA1c: Toegevoegd vanuit uw FreeStyle Libre® GEMIDDELDE BLOEDSUIKERSPIEGEL - A1C - A1C-calculator + HbA1c + HbA1c-calculator OPSLAAN Ondersteuning Hoe kunnen we u helpen? @@ -277,7 +282,7 @@ Ondersteuningsforum Het is tijd om uw bloedsuikerspiegel vast te leggen! Het is tijd voor uw medicatie! - Dit is slechts een schatting en is berekend op basis van de gemiddelden van uitlezingen in de afgelopen maand. Hoewel deze schatting een algemeen erkende formule voor HbA1C-schatting gebruikt, raden we gebruikers aan om dit alleen als een schatting te gebruiken. + Dit is slechts een schatting en is berekend op basis van de gemiddelden van uitlezingen in de afgelopen maand. Hoewel deze schatting een algemeen erkende formule voor HbA1c-schatting gebruikt, raden we gebruikers aan dit alleen als een schatting te gebruiken. Notities Back-up maken en exporteren Back-up maken op Google Drive @@ -313,7 +318,6 @@ geschiedenis opslaan Herinneringen - Tijd om uw glucosespiegel vast te leggen! Uitlezing toevoegen Geen herinneringen ingesteld. Voeg hier nieuwe herinneringen toe. diff --git a/app/src/main/res/values-nn-rNO/strings.xml b/app/src/main/res/values-nn-rNO/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-nn-rNO/strings.xml +++ b/app/src/main/res/values-nn-rNO/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-nr-rZA/strings.xml b/app/src/main/res/values-nr-rZA/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-nr-rZA/strings.xml +++ b/app/src/main/res/values-nr-rZA/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ns-rZA/strings.xml b/app/src/main/res/values-ns-rZA/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ns-rZA/strings.xml +++ b/app/src/main/res/values-ns-rZA/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ny-rMW/strings.xml b/app/src/main/res/values-ny-rMW/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ny-rMW/strings.xml +++ b/app/src/main/res/values-ny-rMW/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-oc-rFR/strings.xml b/app/src/main/res/values-oc-rFR/strings.xml index 66b946f6..923aef76 100644 --- a/app/src/main/res/values-oc-rFR/strings.xml +++ b/app/src/main/res/values-oc-rFR/strings.xml @@ -68,6 +68,12 @@ D\'acòrdi + + + + + + Pes diff --git a/app/src/main/res/values-oj-rCA/strings.xml b/app/src/main/res/values-oj-rCA/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-oj-rCA/strings.xml +++ b/app/src/main/res/values-oj-rCA/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-om-rET/strings.xml b/app/src/main/res/values-om-rET/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-om-rET/strings.xml +++ b/app/src/main/res/values-om-rET/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-or-rIN/strings.xml b/app/src/main/res/values-or-rIN/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-or-rIN/strings.xml +++ b/app/src/main/res/values-or-rIN/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-os-rSE/strings.xml b/app/src/main/res/values-os-rSE/strings.xml index 62045343..15550bbb 100644 --- a/app/src/main/res/values-os-rSE/strings.xml +++ b/app/src/main/res/values-os-rSE/strings.xml @@ -39,6 +39,12 @@ ОК + + + + + + Email diff --git a/app/src/main/res/values-pa-rIN/strings.xml b/app/src/main/res/values-pa-rIN/strings.xml index 06c377fb..85c0845b 100644 --- a/app/src/main/res/values-pa-rIN/strings.xml +++ b/app/src/main/res/values-pa-rIN/strings.xml @@ -117,7 +117,6 @@ ਵਰਗ ਬਣਾਓ ਗਲੂਕੋਜ਼ ਇਨਪੁੱਟ ਲਈ Glucosio ਮੂਲ ਵਰਗਾਂ ਨਾਲ ਆਉਂਦਾ ਹੈ ਪਰ ਤੁਸੀਂ ਆਪਣੀਆਂ ਜ਼ਰੂਰਤਾਂ ਮੁਤਾਬਿਕ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਤਰਜੀਹੀ ਵਰਗ ਬਣਾ ਸਕਦੇ ਹੋ। ਇੱਥੇ ਅਕਸਰ ਵੇਖੋ - ਫੀਡਬੈਕ ਭੇਜੋ ਜੇਕਰ ਤੁਹਾਨੂ ਕੋਈ ਤਕਨੀਕੀ ਸਮੱਸਿਆ ਆਈ ਜਾਂ Glucosio ਬਾਰੇ ਫੀਡਬੈਕ ਭੇਜਣਾ ਚਾਹੁੰਦੇ ਹੋ Glucosio ਨੂੰ ਵਧੀਆ ਬਣਾਉਣ ਵਿੱਚ ਸਾਡੀ ਸਹਾਇਤਾ ਲਈ ਅਸੀਂ ਤੁਹਾਨੂੰ ਇਸ ਨੂੰ ਸੈਟਿੰਗ ਮੀਨੂੰ ਤੋਂ ਭੇਜਣ ਲਈ ਉਤਸ਼ਾਹਿਤ ਕਰਦੇ ਹਾਂ। ਰੀਡਿੰਗ ਸ਼ਾਮਲ ਕਰੋ ਨਿਯਮਿਤ ਤੌਰ ਤੇ ਆਪਣੀ ਗਲੋਕੂਜ਼ ਰੀਡਿੰਗ ਸ਼ਾਮਲ ਕਰਨਾ ਯਕੀਨੀ ਬਣਾਓ ਤਾਂ ਕੀ ਅਸੀਂ ਤੁਹਾਡੀ ਗਲੂਕੋਜ਼ ਪੱਧਰਾਂ ਤੇ ਨਜ਼ਰ ਰੱਖਣ ਵਿੱਚ ਸਹਾਇਤਾ ਕਰ ਸਕੀਏ। @@ -127,6 +126,12 @@ ਵੱਧੋ-ਵੱਧ ਮੁੱਲ + + + + + + ਭਾਰ diff --git a/app/src/main/res/values-pa-rPK/strings.xml b/app/src/main/res/values-pa-rPK/strings.xml index 06c377fb..85c0845b 100644 --- a/app/src/main/res/values-pa-rPK/strings.xml +++ b/app/src/main/res/values-pa-rPK/strings.xml @@ -117,7 +117,6 @@ ਵਰਗ ਬਣਾਓ ਗਲੂਕੋਜ਼ ਇਨਪੁੱਟ ਲਈ Glucosio ਮੂਲ ਵਰਗਾਂ ਨਾਲ ਆਉਂਦਾ ਹੈ ਪਰ ਤੁਸੀਂ ਆਪਣੀਆਂ ਜ਼ਰੂਰਤਾਂ ਮੁਤਾਬਿਕ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਤਰਜੀਹੀ ਵਰਗ ਬਣਾ ਸਕਦੇ ਹੋ। ਇੱਥੇ ਅਕਸਰ ਵੇਖੋ - ਫੀਡਬੈਕ ਭੇਜੋ ਜੇਕਰ ਤੁਹਾਨੂ ਕੋਈ ਤਕਨੀਕੀ ਸਮੱਸਿਆ ਆਈ ਜਾਂ Glucosio ਬਾਰੇ ਫੀਡਬੈਕ ਭੇਜਣਾ ਚਾਹੁੰਦੇ ਹੋ Glucosio ਨੂੰ ਵਧੀਆ ਬਣਾਉਣ ਵਿੱਚ ਸਾਡੀ ਸਹਾਇਤਾ ਲਈ ਅਸੀਂ ਤੁਹਾਨੂੰ ਇਸ ਨੂੰ ਸੈਟਿੰਗ ਮੀਨੂੰ ਤੋਂ ਭੇਜਣ ਲਈ ਉਤਸ਼ਾਹਿਤ ਕਰਦੇ ਹਾਂ। ਰੀਡਿੰਗ ਸ਼ਾਮਲ ਕਰੋ ਨਿਯਮਿਤ ਤੌਰ ਤੇ ਆਪਣੀ ਗਲੋਕੂਜ਼ ਰੀਡਿੰਗ ਸ਼ਾਮਲ ਕਰਨਾ ਯਕੀਨੀ ਬਣਾਓ ਤਾਂ ਕੀ ਅਸੀਂ ਤੁਹਾਡੀ ਗਲੂਕੋਜ਼ ਪੱਧਰਾਂ ਤੇ ਨਜ਼ਰ ਰੱਖਣ ਵਿੱਚ ਸਹਾਇਤਾ ਕਰ ਸਕੀਏ। @@ -127,6 +126,12 @@ ਵੱਧੋ-ਵੱਧ ਮੁੱਲ + + + + + + ਭਾਰ diff --git a/app/src/main/res/values-pam-rPH/strings.xml b/app/src/main/res/values-pam-rPH/strings.xml index ad3e2137..11828fac 100644 --- a/app/src/main/res/values-pam-rPH/strings.xml +++ b/app/src/main/res/values-pam-rPH/strings.xml @@ -117,7 +117,6 @@ Ang Glucosio ay mga kategoryang kalakip para sa glucose input, ngunit maaari kang gumawa ng sarili mong kategorya kung nanaisin. Pumunta dito ng madalas Nagbibigay ang Glucosio assistant ng mga payo kung paano gaganda ang iyong kalusugan at kung paano mo makukuha ang benepisyo ng paggamit ng Glucosio. - I-submit ang feedback Kung may mga katanungang pangteknikal or may mga puna at suhesyon para sa Glucosio, pumunta sa settings menu. Magdagdag ng reading Siguraduhing palaging magdagdag ng iyong glucose readings para ikaw matulungan naming i-track ang iyong glucose levels. @@ -127,6 +126,12 @@ Max value + + + + + + Timbang diff --git a/app/src/main/res/values-pap/strings.xml b/app/src/main/res/values-pap/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-pap/strings.xml +++ b/app/src/main/res/values-pap/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-pcm-rNG/strings.xml b/app/src/main/res/values-pcm-rNG/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-pcm-rNG/strings.xml +++ b/app/src/main/res/values-pcm-rNG/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-pi-rIN/strings.xml b/app/src/main/res/values-pi-rIN/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-pi-rIN/strings.xml +++ b/app/src/main/res/values-pi-rIN/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index e2094fe1..3e28ebbe 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -71,6 +71,12 @@ 1 czytanie usunięte + + + + + + diff --git a/app/src/main/res/values-ps-rAF/strings.xml b/app/src/main/res/values-ps-rAF/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ps-rAF/strings.xml +++ b/app/src/main/res/values-ps-rAF/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index ba424118..e006680f 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -26,6 +26,7 @@ Visão geral Histórico Dicas + Adicionar nova leitura Olá. Olá. Termos de uso. @@ -135,7 +136,6 @@ Glucosio vem com categorias padrão para a entrada de glicose, mas você pode criar categorias personalizadas nas configurações para atender às suas necessidades exclusivas. Confira aqui frequentemente O assistente Glucosio fornece dicas regulares e vai continuar melhorando, portanto, sempre confira aqui ações úteis que você pode tomar para melhorar a sua experiência com o Glucosio e outras dicas úteis. - Enviar comentários Se você encontrar quaisquer problemas técnicos ou tiver comentários sobre o Glucosio, nós encorajamos você a apresentá-los no menu de configuraçõesm, a fim de nos ajudar a melhorar o Glucosio. Adicionar uma leitura Não se esqueça de adicionar regularmente as leituras de glicemia, para podermos ajudá-lo a controlar seus níveis de glicemia ao longo do tempo. @@ -197,6 +197,12 @@ Luta Caminhada Jardinagem + + + + + + Carboidratos: Proteína: @@ -225,6 +231,7 @@ Captura de tela salva na galeria Erro ao salvar a captura de tela na galeria Intervalo de exportação + Houve um problema ao exportar as leituras. Por favor, tente novamente. Nenhuma leitura para exportar. Nova leitura adicionada Peso @@ -238,10 +245,15 @@ Adicionar leitura de glicose Editar leitura de glicose Adicionar o peso corporal + Editar peso corporal Adicionar o nível de colesterol + Editar nível de colesterol Adicionar HB1AC + Editar HbA1c Adicionar cetonas + Editar cetonas Adicionar a pressão arterial + Editar pressão arterial Peso corporal Cetonas Pressão arterial @@ -285,6 +297,7 @@ Algo deu errado. Por favor, tente novamente :/ Último backup: Pasta de backup + Indefinido Fazer o backup agora Backups recentes Ver mais backups @@ -300,4 +313,10 @@ Editar no Drive mmol/mol mmol/L + Reverter para o gráfico antigo + histórico + salvar + Lembretes + Adicionar leitura + Nenhum conjunto de lembretes. Adicione um novo lembrete aqui. diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-qu-rPE/strings.xml b/app/src/main/res/values-qu-rPE/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-qu-rPE/strings.xml +++ b/app/src/main/res/values-qu-rPE/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-quc-rGT/strings.xml b/app/src/main/res/values-quc-rGT/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-quc-rGT/strings.xml +++ b/app/src/main/res/values-quc-rGT/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-qya-rAA/strings.xml b/app/src/main/res/values-qya-rAA/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-qya-rAA/strings.xml +++ b/app/src/main/res/values-qya-rAA/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-rm-rCH/strings.xml b/app/src/main/res/values-rm-rCH/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-rm-rCH/strings.xml +++ b/app/src/main/res/values-rm-rCH/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-rn-rBI/strings.xml b/app/src/main/res/values-rn-rBI/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-rn-rBI/strings.xml +++ b/app/src/main/res/values-rn-rBI/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 3a5e8bc7..57b03dac 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -69,7 +69,7 @@ Gustare Ora de culcare Noapte - Nivel de glucoză pe nemâncate + Nivel de glucoză pe nemâncate (preprandial) Reverifică Altceva RENUNȚĂ @@ -136,7 +136,6 @@ Glucosio vine cu categorii implicite pentru glucoză, dar puteţi crea categorii particularizate în setări pentru a se potrivi nevoilor dumneavoastră unice. Reveniți des Asistentul Glucosio oferă sfaturi regulate şi se va îmbunătăți, astfel încât întotdeauna reveniți aici pentru acţiuni utile pe care puteţi lua pentru a îmbunătăţi experienţa dumneavoastră Glucosio şi pentru alte sfaturi utile. - Trimite feedback Dacă găsiţi orice probleme tehnice sau aveți feedback despre Glucosio vă recomandăm să-l trimiteți prin meniul de setări, pentru a ne ajuta să îmbunătăţim Glucosio. Adaugă o citire Asigură-te că adaugi în mod regulat citirile de glucoză ca să te putem ajuta să urmărești nivelul de glucoză în timp. @@ -198,6 +197,12 @@ Lupte Drumeții Muncă în curte + + + + + + Carbohidrați: Proteine: @@ -226,6 +231,7 @@ Captură salvată în galerie Eroare la salvarea capturii în galerie Exportă în intervalul + A existat o problema la exportul citirilor. Va rugam sa incercati din nou. Nu sunt citiri de exportat. Noua citire a fost adăugată Greutate @@ -308,4 +314,5 @@ mmol/mol mmol/L Revino la graficul vechi + istoric diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 1fcbccc9..405ae50f 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -136,7 +136,6 @@ Glucosio содержит категории по умолчанию, но в настройках вы можете создать собственные категории так, чтобы они подходили под ваши нужды. Регулярно обращайтесь сюда Помощник Glucosio предоставляет регулярные советы. Мы работаем над усовершенствованием нашего помощника, поэтому обращайтесь сюда за советами, которые вы сможете использовать для того, чтобы получить большую пользу от Glucosio, а также за другими полезными советами. - Отправьте отзыв Если вы обнаружите какие-либо технические проблемы или захотите отправить отзыв о работе Glucosio, вы можете сделать это в меню настроек. Это поможет нам улучшить Glucosio. Добавить данные Регулярно вводите данные об уровне глюкозы, в течением времени это поможет вам отслеживать уровень глюкозы. @@ -198,6 +197,12 @@ Борьба Пешие прогулки Работа во дворе + + + + + + Углеводы: Белок: @@ -312,7 +317,6 @@ история сохранить Напоминания - Пора зарегистрировать ваш уровень глюкозы! Добавить данные Нет напоминаний. Добавьте новое напоминание здесь. diff --git a/app/src/main/res/values-rw-rRW/strings.xml b/app/src/main/res/values-rw-rRW/strings.xml index f24e26c3..d40c223b 100644 --- a/app/src/main/res/values-rw-rRW/strings.xml +++ b/app/src/main/res/values-rw-rRW/strings.xml @@ -56,6 +56,12 @@ Ongeraho + + + + + + mmol/L diff --git a/app/src/main/res/values-ry-rUA/strings.xml b/app/src/main/res/values-ry-rUA/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ry-rUA/strings.xml +++ b/app/src/main/res/values-ry-rUA/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-sa-rIN/strings.xml b/app/src/main/res/values-sa-rIN/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-sa-rIN/strings.xml +++ b/app/src/main/res/values-sa-rIN/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-sat-rIN/strings.xml b/app/src/main/res/values-sat-rIN/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-sat-rIN/strings.xml +++ b/app/src/main/res/values-sat-rIN/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-sc-rIT/strings.xml b/app/src/main/res/values-sc-rIT/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-sc-rIT/strings.xml +++ b/app/src/main/res/values-sc-rIT/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-sco-rGB/strings.xml b/app/src/main/res/values-sco-rGB/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-sco-rGB/strings.xml +++ b/app/src/main/res/values-sco-rGB/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-sd-rPK/strings.xml b/app/src/main/res/values-sd-rPK/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-sd-rPK/strings.xml +++ b/app/src/main/res/values-sd-rPK/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-se-rNO/strings.xml b/app/src/main/res/values-se-rNO/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-se-rNO/strings.xml +++ b/app/src/main/res/values-se-rNO/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-sg-rCF/strings.xml b/app/src/main/res/values-sg-rCF/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-sg-rCF/strings.xml +++ b/app/src/main/res/values-sg-rCF/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-sh-rHR/strings.xml b/app/src/main/res/values-sh-rHR/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-sh-rHR/strings.xml +++ b/app/src/main/res/values-sh-rHR/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-si-rLK/strings.xml b/app/src/main/res/values-si-rLK/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-si-rLK/strings.xml +++ b/app/src/main/res/values-si-rLK/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index 0fc59a01..18ae01a8 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -111,7 +111,6 @@ Aktualizujte vašu hmotnosť Uistite sa, aby bola vaša váha vždy aktuálna, aby mal Glucosio čo najpresnejšie údaje. Vytvoriť kategórie - Odoslať spätnú väzbu Ak nájdete nejaké technické problémy, alebo nám chcete zanechať spätnú väzbu o Glucosio odporúčame vám ju odoslať cez položku v nastaveniach. Pomôžete tak vylepšiť Glucosio. Pridať meranie Uistite sa, aby ste pravidelne pridávali hodnoty hladiny glykémie tak, aby sme vám mohli pomôcť priebežne sledovať hladiny glukózy. @@ -127,6 +126,12 @@ Používaním Glucosio sa zaväzujete, že + + + + + + Váha diff --git a/app/src/main/res/values-sl-rSI/strings.xml b/app/src/main/res/values-sl-rSI/strings.xml index fdca8a3c..889da02b 100644 --- a/app/src/main/res/values-sl-rSI/strings.xml +++ b/app/src/main/res/values-sl-rSI/strings.xml @@ -136,7 +136,6 @@ Aplikacija Glucosio ima privzete kategorije za vnos glukoze, vendar si lahko ustvarite svoje lastne kategorije in jih v nastavitvah uredite, da bodo ustrezale vašim potrebam. Pogosto preverite Asistent v aplikaciji Glucosio vam redno ponuja nasvete. Ker se zavedamo pomembnosti, ga bomo redno nadgrajevali, zato ga večkrat preverite in se seznanite z nasveti, ki bodo omogočili boljšo uporabniško izkušnjo in vam bili v dodatno pomoč. - Pošlji povratno informacijo Če boste imeli katero koli tehnično vprašanje ali povratno informacijo, vas prosimo, da nam jo pošljete preko menija v nastavitvah. Samo tako bomo lahko aplikacijo Glucosio redno izboljševali. Dodaj meritev Poskrbite, da redno dodajate vaše odčitke glukoze, da vam lahko pomagamo slediti vaši ravni glukoze. @@ -198,6 +197,12 @@ Rokoborba Pohodništvo Delo na vrtu + + + + + + Ogljikovi hidrati: Beljakovine: @@ -312,7 +317,6 @@ zgodovina shrani Opomniki - Čas je za beleženje vaše ravni glukoze! Dodaj meritev Opomniki niso nastavljeni. Tu dodajte novega. diff --git a/app/src/main/res/values-sma-rNO/strings.xml b/app/src/main/res/values-sma-rNO/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-sma-rNO/strings.xml +++ b/app/src/main/res/values-sma-rNO/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-sn-rZW/strings.xml b/app/src/main/res/values-sn-rZW/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-sn-rZW/strings.xml +++ b/app/src/main/res/values-sn-rZW/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-so-rSO/strings.xml b/app/src/main/res/values-so-rSO/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-so-rSO/strings.xml +++ b/app/src/main/res/values-so-rSO/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-son-rZA/strings.xml b/app/src/main/res/values-son-rZA/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-son-rZA/strings.xml +++ b/app/src/main/res/values-son-rZA/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-sq-rAL/strings.xml b/app/src/main/res/values-sq-rAL/strings.xml index ec4b9071..01be21a0 100644 --- a/app/src/main/res/values-sq-rAL/strings.xml +++ b/app/src/main/res/values-sq-rAL/strings.xml @@ -135,7 +135,6 @@ Glucosio vjenë me kategori të parazgjedhura për inputet e glukozës por ju mund të krijoni kategori të zakonshme tek parametrat që të përputhen me nevojat tuaja të veçanta. Kontrolloni këtu shpesh Ndihmësi nga Glucosio siguron këshilla të rregullta dhe do vazhdojë të përmirësohet, kështu që gjithmonë kontrolloni këtu për veprime të dobishme që mund të kryeni për të përmirësuar eksperiencën tuaj me Glucosio dhe për këshilla të tjera të dobishme. - Dërgo komente Nëse keni ndonjë problem teknik ose doni të ndani përshtypjen tuaj rreth Glucosio ne ju inkurajojm që ti dërgoni ato në menun e parametrave në mënyrë që të na ndihmoni që ta përmirësojmë Glucosion. Shto një lexim Sigurohuni që ti shtoni rregullisht leximet tuaja rreth glukozës në mënyrë që ne të mund t\'ju ndihmojm të gjurmoni nivelet tuaja të glukozës me kalimin e kohës. @@ -197,6 +196,12 @@ Mundje Udhëtim i gjetë në këmbë Punë në kopsht + + + + + + Karbohidrate: Proteina: diff --git a/app/src/main/res/values-sr-rCS/strings.xml b/app/src/main/res/values-sr-rCS/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-sr-rCS/strings.xml +++ b/app/src/main/res/values-sr-rCS/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ss-rZA/strings.xml b/app/src/main/res/values-ss-rZA/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ss-rZA/strings.xml +++ b/app/src/main/res/values-ss-rZA/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-st-rZA/strings.xml b/app/src/main/res/values-st-rZA/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-st-rZA/strings.xml +++ b/app/src/main/res/values-st-rZA/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-su-rID/strings.xml b/app/src/main/res/values-su-rID/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-su-rID/strings.xml +++ b/app/src/main/res/values-su-rID/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-sv-rFI/strings.xml b/app/src/main/res/values-sv-rFI/strings.xml index 81bf925a..383831be 100644 --- a/app/src/main/res/values-sv-rFI/strings.xml +++ b/app/src/main/res/values-sv-rFI/strings.xml @@ -122,7 +122,6 @@ Glucosio levereras med standardkategorier för glukos-indata, men du kan skapa egna kategorier i inställningarna för att matcha dina unika behov. Kolla här ofta Glucosio assistent ger regelbundna tips och kommer att fortsätta att förbättras, så kontrolera alltid här för nyttiga åtgärder som du kan vidta för att förbättra din erfarenhet av Glucosio och andra användbara tips. - Skicka in feedback Om du hittar några tekniska problem eller har synpunkter om Glucosio rekommenderar vi att du skickar in den i inställningsmenyn för att hjälpa oss att förbättra Glucosio. Lägga till ett värde Var noga med att regelbundet lägga till dina glukosvärden så att vi kan hjälpa dig att spåra dina glukosnivåer över tiden. @@ -174,6 +173,12 @@ Brottning Vandring Gårdsarbete + + + + + + Kolhydrater: Protein: diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 690f6796..6469c22e 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -122,7 +122,6 @@ Glucosio levereras med standardkategorier för glukos-indata, men du kan skapa egna kategorier i inställningarna för att matcha dina unika behov. Kolla här ofta Glucosio assistent ger regelbundna tips och kommer att fortsätta att förbättras, så kontrolera alltid här för nyttiga åtgärder som du kan vidta för att förbättra din erfarenhet av Glucosio och andra användbara tips. - Skicka in feedback Om du hittar några tekniska problem eller har synpunkter om Glucosio rekommenderar vi att du skickar in den i inställningsmenyn för att hjälpa oss att förbättra Glucosio. Lägga till ett värde Var noga med att regelbundet lägga till dina glukosvärden så att vi kan hjälpa dig att spåra dina glukosnivåer över tiden. @@ -174,6 +173,12 @@ Brottning Vandring Gårdsarbete + + + + + + Kolhydrater: Protein: diff --git a/app/src/main/res/values-sw-rKE/strings.xml b/app/src/main/res/values-sw-rKE/strings.xml index abc4fe12..11be644a 100644 --- a/app/src/main/res/values-sw-rKE/strings.xml +++ b/app/src/main/res/values-sw-rKE/strings.xml @@ -109,6 +109,12 @@ Sasisha uzito wako + + + + + + Uzito diff --git a/app/src/main/res/values-sw-rTZ/strings.xml b/app/src/main/res/values-sw-rTZ/strings.xml index 860984b6..10b3f08b 100644 --- a/app/src/main/res/values-sw-rTZ/strings.xml +++ b/app/src/main/res/values-sw-rTZ/strings.xml @@ -116,7 +116,6 @@ Glucosio yaja na makundi yaliyoundwa tayari kwa ajili ya kuingiza kiwango cha glukosi ila unaweza pia kutengeneza makundi maalum kwneye mpangilio ili kuendana na upekee wa mahitaji yako. Angalia hapa mara nyingi Wasaidizi wa Glucosio hutoa vidokezo vya mara kwa mara ambavyo vitaendelea kuboreshwa, kwa hivyo angalia hapa mara kwa mara ilikuchua nini cha kufanya ili kuboresha uzoefu wako wa Glucosio na kwa kupata vidokezo vingine muhimu. - Wasilisha mrejesho Kama una tatizo lolote la kiufundi au mrejesho wowote kuhusu Glucosio tunakutia moyo uyawasilishe kwenye menyu ya mpangilio ili tuweze kuboresha Glucosio. Ongeza kipimo Hakikisha kwamba una ongeza idadi ya kipimo cha glukosi kilichopo mwilini kila wakati ili tukusaidie kufautilia viwango vyako vya glukosi muda kwa muda. @@ -126,6 +125,12 @@ Thamani ya juu + + + + + + diff --git a/app/src/main/res/values-syc-rSY/strings.xml b/app/src/main/res/values-syc-rSY/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-syc-rSY/strings.xml +++ b/app/src/main/res/values-syc-rSY/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ta-rIN/strings.xml b/app/src/main/res/values-ta-rIN/strings.xml index 899c5c0b..f98f611c 100644 --- a/app/src/main/res/values-ta-rIN/strings.xml +++ b/app/src/main/res/values-ta-rIN/strings.xml @@ -62,6 +62,12 @@ விருப்ப அளவீடு வகை + + + + + + diff --git a/app/src/main/res/values-tay-rTW/strings.xml b/app/src/main/res/values-tay-rTW/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-tay-rTW/strings.xml +++ b/app/src/main/res/values-tay-rTW/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-te-rIN/strings.xml b/app/src/main/res/values-te-rIN/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-te-rIN/strings.xml +++ b/app/src/main/res/values-te-rIN/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-tg-rTJ/strings.xml b/app/src/main/res/values-tg-rTJ/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-tg-rTJ/strings.xml +++ b/app/src/main/res/values-tg-rTJ/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-th-rTH/strings.xml b/app/src/main/res/values-th-rTH/strings.xml index bd2f397f..f6fef3bb 100644 --- a/app/src/main/res/values-th-rTH/strings.xml +++ b/app/src/main/res/values-th-rTH/strings.xml @@ -101,7 +101,6 @@ อัพเดตเดี๋ยวนี้ ได้ ฉันเข้าใจ ปรับปรุงน้ำหนักของคุณ - ส่งคำติชม ในการที่จะช่วยให้เราปรับปรุง Glucosio หากคุณพบปัญหาทางเทคนิคหรือมีข้อเสนอแนะใด ๆ คุณสามารถส่งข้อมูลให้เราได้ในเมนูการตั้งค่า เพิ่มข้อมูล ตรวจสอบให้แน่ใจว่าได้บันทึกระดับน้ำตาลกลูโคสเป็นประจำ เพื่อที่เราสามารถช่วยคุณติดตามระดับน้ำตาลกลูโคสตลอดเวลา @@ -111,6 +110,12 @@ ค่าสูงสุด + + + + + + น้ำหนัก diff --git a/app/src/main/res/values-ti-rER/strings.xml b/app/src/main/res/values-ti-rER/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ti-rER/strings.xml +++ b/app/src/main/res/values-ti-rER/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-tk-rTM/strings.xml b/app/src/main/res/values-tk-rTM/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-tk-rTM/strings.xml +++ b/app/src/main/res/values-tk-rTM/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-tl-rPH/strings.xml b/app/src/main/res/values-tl-rPH/strings.xml index 703722e8..0bfdea13 100644 --- a/app/src/main/res/values-tl-rPH/strings.xml +++ b/app/src/main/res/values-tl-rPH/strings.xml @@ -97,6 +97,12 @@ + + + + + + diff --git a/app/src/main/res/values-tn-rZA/strings.xml b/app/src/main/res/values-tn-rZA/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-tn-rZA/strings.xml +++ b/app/src/main/res/values-tn-rZA/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 2814bba1..6eb4afeb 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -131,7 +131,6 @@ Glucosio glikoz girişi için varsayılan kategoriler bulundurmaktadır ancak benzersiz gereksinimlerinize ayarlarında özel kategoriler oluşturabilirsiniz. Burayı sık sık kontrol et Glucosio Yardımcısı düzenli ipuçları sağlar ve ilerlemeyi kaydeder, bu yüzden her zaman burayı, Glucosio deneyiminizi geliştirmek için yapabileceğiniz faydalı işlemler ve diğer yararlı ipuçları için kontrol edin. - Geribildirim Gönder Eğer herhangi bir teknik sorun bulursanız veya Glucosio hakkında geribildiriminiz varsa Glucosio\'yu geliştirmemize yardımcı olmak için Ayarlar menüsünden geribildirim göndermeyi öneririz. Bir okuma Ekle Glikoz değerlerinizi düzenli olarak eklediğinizden emin olun böylece glikoz seviyenizi takip edebilelim. @@ -180,6 +179,12 @@ Dağ tırmanışı Güreş Bahçe işleri + + + + + + Karbonhidrat: Protein: diff --git a/app/src/main/res/values-ts-rZA/strings.xml b/app/src/main/res/values-ts-rZA/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ts-rZA/strings.xml +++ b/app/src/main/res/values-ts-rZA/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-tt-rRU/strings.xml b/app/src/main/res/values-tt-rRU/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-tt-rRU/strings.xml +++ b/app/src/main/res/values-tt-rRU/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-tw-rTW/strings.xml b/app/src/main/res/values-tw-rTW/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-tw-rTW/strings.xml +++ b/app/src/main/res/values-tw-rTW/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ty-rPF/strings.xml b/app/src/main/res/values-ty-rPF/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ty-rPF/strings.xml +++ b/app/src/main/res/values-ty-rPF/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-tzl/strings.xml b/app/src/main/res/values-tzl/strings.xml index 2a28fbd3..29428f61 100644 --- a/app/src/main/res/values-tzl/strings.xml +++ b/app/src/main/res/values-tzl/strings.xml @@ -45,6 +45,12 @@ Axhutor + + + + + + diff --git a/app/src/main/res/values-ug-rCN/strings.xml b/app/src/main/res/values-ug-rCN/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ug-rCN/strings.xml +++ b/app/src/main/res/values-ug-rCN/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index ac0ba740..340e1669 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -123,7 +123,6 @@ Оновити свою вагу Не забудьте оновити свою вагу, аби Glucosio мав найточнішу інформацію. Додати категорії - Відправити відгук Якщо ви знайшли будь-які технічні недоліки або хочете написати відгук про Glucosio то ви можете зробити це в меню \"Параметри\", що допоможе нам покращити Glucosio. Додати вимірювання Переконайтеся, що ви регулярно подаєте ваші показники глюкози, щоб ми могли допомогти вам відстежувати ваш рівень глюкози з часом. @@ -171,6 +170,12 @@ Боротьба Піші прогулянки Роботу у дворі + + + + + + Вуглеводи: Протеїн: diff --git a/app/src/main/res/values-ur-rPK/strings.xml b/app/src/main/res/values-ur-rPK/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ur-rPK/strings.xml +++ b/app/src/main/res/values-ur-rPK/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-uz-rUZ/strings.xml b/app/src/main/res/values-uz-rUZ/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-uz-rUZ/strings.xml +++ b/app/src/main/res/values-uz-rUZ/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-val-rES/strings.xml b/app/src/main/res/values-val-rES/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-val-rES/strings.xml +++ b/app/src/main/res/values-val-rES/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-ve-rZA/strings.xml b/app/src/main/res/values-ve-rZA/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-ve-rZA/strings.xml +++ b/app/src/main/res/values-ve-rZA/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-vec-rIT/strings.xml b/app/src/main/res/values-vec-rIT/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-vec-rIT/strings.xml +++ b/app/src/main/res/values-vec-rIT/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 6e610978..8c3f5b1a 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -113,6 +113,12 @@ Leo núi Đấu vật Đi bộ đường dài + + + + + + Xuất dữ liệu diff --git a/app/src/main/res/values-vls-rBE/strings.xml b/app/src/main/res/values-vls-rBE/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-vls-rBE/strings.xml +++ b/app/src/main/res/values-vls-rBE/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-wa-rBE/strings.xml b/app/src/main/res/values-wa-rBE/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-wa-rBE/strings.xml +++ b/app/src/main/res/values-wa-rBE/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-wo-rSN/strings.xml b/app/src/main/res/values-wo-rSN/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-wo-rSN/strings.xml +++ b/app/src/main/res/values-wo-rSN/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-xh-rZA/strings.xml b/app/src/main/res/values-xh-rZA/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-xh-rZA/strings.xml +++ b/app/src/main/res/values-xh-rZA/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-yo-rNG/strings.xml b/app/src/main/res/values-yo-rNG/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-yo-rNG/strings.xml +++ b/app/src/main/res/values-yo-rNG/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-zea/strings.xml b/app/src/main/res/values-zea/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-zea/strings.xml +++ b/app/src/main/res/values-zea/strings.xml @@ -22,6 +22,12 @@ + + + + + + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 70bf1c8c..a4a52489 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -27,6 +27,7 @@ 概览 历史记录 小提示 + 添加新读数 你好 你好 使用条款。 @@ -87,6 +88,7 @@ 关于 这些实验性功能不保证能稳定工作,仅面向早期测试用户。您可以摇动手机以给我们发送反馈。 版本 + 即将到来…… 使用条款 类型 体重 @@ -134,7 +136,6 @@ Glucosio 默认带有血糖读数分类,您还可以在设置中创建自定义的分类以满足您的独特需求。 经常检查这里 Glucosio 助理提供定期的提示并将不断改善,因此请经常检查这里的提示,这有助您采取措施来提高使用 Glucosio 的经验和技巧。 - 提交反馈 如果您发现了任何技术问题,或有关于 Glucosio 的反馈,我们鼓励您在设置菜单中提交它,以帮助我们改进 Glucosio。 添加阅读 一定要定期添加您的血糖读数,以便我们帮助您随时间跟踪您的血糖水平。 @@ -196,6 +197,12 @@ 摔跤 徒步旅行 院子里工作 + + + + + + 碳水化合物: 蛋白质: @@ -224,6 +231,7 @@ 截图已保存到图库 保存截图到图库出错 导出范围 + 导出读数出错。请再试一次。 没有读数可导出。 新读数已添加 体重 @@ -235,11 +243,17 @@ 高密度脂蛋白胆固醇 糖化血红蛋白 添加血糖读数 + 编辑血糖读数 增加体重 + 编辑体重 添加胆固醇水平 + 编辑胆固醇水平 添加糖化血红蛋白 + 编辑 HbA1c 添加酮体 + 编辑酮 添加血压 + 编辑血压 体重 酮体 血压 @@ -267,16 +281,40 @@ 支持论坛 该记录您的血糖水平了! 现在是您的服药时间! + 备注 备份和导出 在 Google Drive 上备份 恢复 CSV 导出 + 自动备份 + 备份您的数据到谷歌驱动器允许您恢复您的读数,以防丢失或变更设备。 重启以应用更改... 用 Google Drive 云同步 Glucosio 的数据库。 如果您丢失或者变更手机,或者在您的设备之间同步 Glucosio 的数据,将可以恢复您的所有读数。 + 数据库已成功备份到谷歌驱动器 + 驱动器已成功从谷歌数据库恢复 出现错误。请重试。 + 上次备份: + 备份文件夹 + 未设置 立即备份 + 最近的备份 + 查看更多备份 + 恢复到以前的版本 + 恢复备份将使用备份覆盖现有的所有数据。 + 备份详细信息 + 取消 + 恢复备份 从 Drive 恢复 无法在 Drive 找到有效的备份以恢复 + Glucosio 需要 Play 服务才能启用谷歌驱动器备份。 + 导出到 CSV 文件 + 在 Drive 上管理 毫摩尔/升 + 回到旧图 + 历史 + 保存 + 提醒 + 添加读数 + 未设置提醒。在这里添加新的提示。 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 651e7e47..01bc8b06 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -135,7 +135,6 @@ Glucosio 有一些血糖值的預設分類,您也還是可以在設定中自訂分類來滿足您的需求。 常看看這裡 Glucosio 血糖小幫手提供控制血糖的小祕訣,並會持續改善。請常回來看看有沒有什麼能改善您的 Glucosio 使用體驗的新鮮事,或是其他有用的小祕訣。 - 送出意見回饋 若您發現任何技術問題,或是對 Glucosio 有任何意見想說,我們相當歡迎您在設定選單告訴我們,以幫助我們改善 Glucosio。 新增測量值 務必定期紀錄血糖測量值,這樣才能幫助您追蹤血糖值。 @@ -197,6 +196,12 @@ 摔跤 登山 園藝工作 + + + + + + 碳水化合物: 蛋白質: diff --git a/app/src/main/res/values-zu-rZA/strings.xml b/app/src/main/res/values-zu-rZA/strings.xml index 5ad451ae..2a3b7f4f 100644 --- a/app/src/main/res/values-zu-rZA/strings.xml +++ b/app/src/main/res/values-zu-rZA/strings.xml @@ -22,6 +22,12 @@ + + + + + + From da0d48343c15edc99458c950a7005fb341302aa1 Mon Sep 17 00:00:00 2001 From: Paolo Rotolo Date: Sat, 7 Jan 2017 08:42:16 +0100 Subject: [PATCH 82/82] Releasing Glucosio 1.3.1. --- app/build.gradle | 4 ++-- app/src/main/res/values/strings.xml | 2 +- wear/build.gradle | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 17771f49..8537540c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -34,8 +34,8 @@ android { defaultConfig { minSdkVersion 16 targetSdkVersion 25 - versionCode 38 - versionName '1.3.0' + versionCode 39 + versionName '1.3.1' applicationId 'org.glucosio.android' vectorDrawables.useSupportLibrary = true diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 949193ec..1d9df1dc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -159,7 +159,7 @@ About Here be dragons :/ These features are experimental and may not fully work and are for early testing by users. Remember that you can shake your phone to send us feedback. - 1.3.0 (Chutney) + 1.3.1 (Chutney) Version Coming soon... Terms of use diff --git a/wear/build.gradle b/wear/build.gradle index 02c235f5..46d7cddb 100644 --- a/wear/build.gradle +++ b/wear/build.gradle @@ -29,8 +29,8 @@ android { applicationId "org.glucosio.android" minSdkVersion 21 targetSdkVersion 25 - versionCode 38 - versionName '1.3.0' + versionCode 39 + versionName '1.3.1' } buildTypes { debug {