diff --git a/android_app/app/src/main/AndroidManifest.xml b/android_app/app/src/main/AndroidManifest.xml
index 4a721b13..c19207b5 100644
--- a/android_app/app/src/main/AndroidManifest.xml
+++ b/android_app/app/src/main/AndroidManifest.xml
@@ -8,6 +8,7 @@
+
@@ -17,7 +18,7 @@
android:label="@string/app_name"
android:theme="@style/AppTheme" >
@@ -25,9 +26,15 @@
-
+
+
+
+
+
+
+
diff --git a/android_app/app/src/main/java/com/health/openscale/gui/ReminderBootReceiver.java b/android_app/app/src/main/java/com/health/openscale/gui/ReminderBootReceiver.java
new file mode 100644
index 00000000..f71b1c8e
--- /dev/null
+++ b/android_app/app/src/main/java/com/health/openscale/gui/ReminderBootReceiver.java
@@ -0,0 +1,72 @@
+/* Copyright (C) 2014 olie.xdev
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
+
+package com.health.openscale.gui;
+
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+import android.support.v4.app.NotificationCompat;
+
+import com.health.openscale.R;
+import com.health.openscale.gui.preferences.ReminderPreferences;
+
+import static android.content.Context.NOTIFICATION_SERVICE;
+
+public class ReminderBootReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+
+ if (intent.hasExtra("alarmIntent")) {
+
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+
+ String notifyText = prefs.getString("reminderNotifyText", context.getResources().getString(R.string.default_value_reminder_notify_text));
+
+ NotificationCompat.Builder mBuilder =
+ new NotificationCompat.Builder(context)
+ .setSmallIcon(R.drawable.ic_launcher)
+ .setContentTitle("openScale")
+ .setContentText(notifyText)
+ .setAutoCancel(true);
+
+ Intent notifyIntent = new Intent(context, MainActivity.class);
+
+ PendingIntent notifyPendingIntent =
+ PendingIntent.getActivity(
+ context,
+ 0,
+ notifyIntent,
+ PendingIntent.FLAG_UPDATE_CURRENT
+ );
+
+ mBuilder.setContentIntent(notifyPendingIntent);
+
+ NotificationManager mNotifyMgr = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
+ mNotifyMgr.notify(0x01, mBuilder.build());
+ }
+
+ if (intent.getAction() != null) {
+ if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
+ ReminderPreferences.scheduleAlarms(context);
+ }
+ }
+ }
+}
diff --git a/android_app/app/src/main/java/com/health/openscale/gui/SettingsActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/SettingsActivity.java
index 314a08ab..ccb75b72 100644
--- a/android_app/app/src/main/java/com/health/openscale/gui/SettingsActivity.java
+++ b/android_app/app/src/main/java/com/health/openscale/gui/SettingsActivity.java
@@ -15,165 +15,28 @@
*/
package com.health.openscale.gui;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
-import android.os.Bundle;
-import android.preference.EditTextPreference;
-import android.preference.ListPreference;
-import android.preference.MultiSelectListPreference;
-import android.preference.Preference;
import android.preference.PreferenceActivity;
-import android.preference.PreferenceCategory;
-import android.preference.PreferenceGroup;
-import android.preference.PreferenceManager;
import com.health.openscale.R;
-import com.health.openscale.core.OpenScale;
-import com.health.openscale.core.ScaleUser;
import java.util.ArrayList;
+import java.util.List;
-public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener {
+public class SettingsActivity extends PreferenceActivity {
+ private static List fragments = new ArrayList();
-@Override
-protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- addPreferencesFromResource(R.xml.preferences);
- initSummary(getPreferenceScreen());
-
- updateUserPreferences();
-}
-
-
- private void updateUserPreferences()
- {
- PreferenceCategory usersCategory = (PreferenceCategory)findPreference("catUsers");
-
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
- int selectedUserId = prefs.getInt("selectedUserId", -1);
-
- usersCategory.removeAll();
-
- OpenScale openScale = OpenScale.getInstance(this);
-
- ArrayList scaleUserList = openScale.getScaleUserList();
-
- for (ScaleUser scaleUser : scaleUserList)
- {
- Preference prefUser = new Preference(this);
- prefUser.setOnPreferenceClickListener(new onClickListenerUserSelect());
-
- if (scaleUser.id == selectedUserId) {
- prefUser.setTitle("> " + scaleUser.user_name);
- } else
- {
- prefUser.setTitle(scaleUser.user_name);
- }
-
- prefUser.setKey(Integer.toString(scaleUser.id));
-
- usersCategory.addPreference(prefUser);
- }
-
-
- Preference prefAddUser = new Preference(this);
-
- prefAddUser.setOnPreferenceClickListener(new onClickListenerAddUser());
- prefAddUser.setTitle("+ " + getResources().getString(R.string.label_add_user));
-
- usersCategory.addPreference(prefAddUser);
- }
-
-@Override
-protected void onResume() {
- super.onResume();
- // Set up a listener whenever a key changes
- getPreferenceScreen().getSharedPreferences()
- .registerOnSharedPreferenceChangeListener(this);
-}
-
-@Override
-protected void onPause() {
- super.onPause();
- // Unregister the listener whenever a key changes
- getPreferenceScreen().getSharedPreferences()
- .unregisterOnSharedPreferenceChangeListener(this);
-}
-
-@Override
-public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
- updatePrefSummary(findPreference(key));
-}
-
-private void initSummary(Preference p) {
- if (p instanceof PreferenceGroup) {
- PreferenceGroup pGrp = (PreferenceGroup) p;
- for (int i = 0; i < pGrp.getPreferenceCount(); i++) {
- initSummary(pGrp.getPreference(i));
- }
- } else {
- updatePrefSummary(p);
- }
-}
-
-private void updatePrefSummary(Preference p) {
- if (p instanceof ListPreference) {
- ListPreference listPref = (ListPreference) p;
- p.setSummary(listPref.getEntry());
- }
- if (p instanceof EditTextPreference) {
- EditTextPreference editTextPref = (EditTextPreference) p;
- if (p.getTitle().toString().contains("assword"))
- {
- p.setSummary("******");
- } else {
- p.setSummary(editTextPref.getText());
- }
- }
- if (p instanceof MultiSelectListPreference) {
- EditTextPreference editTextPref = (EditTextPreference) p;
- p.setSummary(editTextPref.getText());
- }
-}
@Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data)
- {
- if (requestCode == UserSettingsActivity.ADD_USER_REQUEST) {
- if(resultCode == RESULT_OK){
- updateUserPreferences();
- }
- }
+ public void onBuildHeaders(List target) {
+ loadHeadersFromResource(R.xml.header_preferences, target);
-
- if (requestCode == UserSettingsActivity.EDIT_USER_REQUEST) {
- if(resultCode == RESULT_OK){
- updateUserPreferences();
- }
+ fragments.clear();
+ for (Header header : target) {
+ fragments.add(header.fragment);
}
}
- private class onClickListenerUserSelect implements Preference.OnPreferenceClickListener {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- Intent intent = new Intent(preference.getContext(), UserSettingsActivity.class);
- intent.putExtra("mode", UserSettingsActivity.EDIT_USER_REQUEST);
- intent.putExtra("id", Integer.parseInt(preference.getKey()));
- startActivityForResult(intent, UserSettingsActivity.EDIT_USER_REQUEST);
-
- return false;
- }
+ @Override
+ protected boolean isValidFragment (String fragmentName) {
+ return fragments.contains(fragmentName);
}
-
- private class onClickListenerAddUser implements Preference.OnPreferenceClickListener {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- Intent intent = new Intent(preference.getContext(), UserSettingsActivity.class);
- intent.putExtra("mode", UserSettingsActivity.ADD_USER_REQUEST);
- startActivityForResult(intent, UserSettingsActivity.ADD_USER_REQUEST);
-
- return false;
- }
- }
-
}
diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothPreferences.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothPreferences.java
new file mode 100644
index 00000000..70ad8635
--- /dev/null
+++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothPreferences.java
@@ -0,0 +1,103 @@
+/* Copyright (C) 2014 olie.xdev
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
+package com.health.openscale.gui.preferences;
+
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.preference.EditTextPreference;
+import android.preference.ListPreference;
+import android.preference.MultiSelectListPreference;
+import android.preference.Preference;
+import android.preference.PreferenceFragment;
+import android.preference.PreferenceGroup;
+
+import com.health.openscale.R;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+public class BluetoothPreferences extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ addPreferencesFromResource(R.xml.bluetooth_preferences);
+
+ initSummary(getPreferenceScreen());
+ }
+
+ private void initSummary(Preference p) {
+ if (p instanceof PreferenceGroup) {
+ PreferenceGroup pGrp = (PreferenceGroup) p;
+ for (int i = 0; i < pGrp.getPreferenceCount(); i++) {
+ initSummary(pGrp.getPreference(i));
+ }
+ } else {
+ updatePrefSummary(p);
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
+
+ }
+
+ @Override
+ public void onPause() {
+ getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
+ super.onPause();
+ }
+
+ @Override
+ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
+ updatePrefSummary(findPreference(key));
+ }
+
+ private void updatePrefSummary(Preference p) {
+ if (p instanceof ListPreference) {
+ ListPreference listPref = (ListPreference) p;
+ p.setSummary(listPref.getEntry());
+ }
+
+ if (p instanceof EditTextPreference) {
+ EditTextPreference editTextPref = (EditTextPreference) p;
+ if (p.getTitle().toString().contains("assword"))
+ {
+ p.setSummary("******");
+ } else {
+ p.setSummary(editTextPref.getText());
+ }
+ }
+
+ if (p instanceof MultiSelectListPreference) {
+ MultiSelectListPreference editMultiListPref = (MultiSelectListPreference) p;
+
+ CharSequence[] entries = editMultiListPref.getEntries();
+ CharSequence[] entryValues = editMultiListPref.getEntryValues();
+ List currentEntries = new ArrayList<>();
+ Set currentEntryValues = editMultiListPref.getValues();
+
+ for (int i = 0; i < entries.length; i++)
+ if (currentEntryValues.contains(entryValues[i]))
+ currentEntries.add(entries[i].toString());
+
+ p.setSummary(currentEntries.toString());
+ }
+ }
+}
diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/GraphPreferences.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/GraphPreferences.java
new file mode 100644
index 00000000..e65473ee
--- /dev/null
+++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/GraphPreferences.java
@@ -0,0 +1,30 @@
+/* Copyright (C) 2014 olie.xdev
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
+package com.health.openscale.gui.preferences;
+
+import android.os.Bundle;
+import android.preference.PreferenceFragment;
+
+import com.health.openscale.R;
+
+public class GraphPreferences extends PreferenceFragment {
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ addPreferencesFromResource(R.xml.graph_preferences);
+ }
+}
diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/MeasurementPreferences.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/MeasurementPreferences.java
new file mode 100644
index 00000000..667a6969
--- /dev/null
+++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/MeasurementPreferences.java
@@ -0,0 +1,30 @@
+/* Copyright (C) 2014 olie.xdev
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
+package com.health.openscale.gui.preferences;
+
+import android.os.Bundle;
+import android.preference.PreferenceFragment;
+
+import com.health.openscale.R;
+
+public class MeasurementPreferences extends PreferenceFragment {
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ addPreferencesFromResource(R.xml.measurement_preferences);
+ }
+}
diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/ReminderPreferences.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/ReminderPreferences.java
new file mode 100644
index 00000000..0f1ea751
--- /dev/null
+++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/ReminderPreferences.java
@@ -0,0 +1,230 @@
+/* Copyright (C) 2014 olie.xdev
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
+package com.health.openscale.gui.preferences;
+
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+import android.preference.CheckBoxPreference;
+import android.preference.EditTextPreference;
+import android.preference.ListPreference;
+import android.preference.MultiSelectListPreference;
+import android.preference.Preference;
+import android.preference.PreferenceFragment;
+import android.preference.PreferenceGroup;
+import android.preference.PreferenceManager;
+
+import com.health.openscale.R;
+import com.health.openscale.gui.ReminderBootReceiver;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+public class ReminderPreferences extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
+
+ private CheckBoxPreference reminderEnable;
+ private MultiSelectListPreference reminderWeekdays;
+ private TimePreferenceDialog reminderTime;
+ private EditTextPreference reminderNotifyText;
+
+ private static ArrayList pendingAlarms = new ArrayList<>();
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ addPreferencesFromResource(R.xml.reminder_preferences);
+
+ reminderEnable = (CheckBoxPreference)findPreference("reminderEnable");
+ reminderWeekdays = (MultiSelectListPreference)findPreference("reminderWeekdays");
+ reminderTime = (TimePreferenceDialog)findPreference("reminderTime");
+ reminderNotifyText = (EditTextPreference)findPreference("reminderNotifyText");
+
+ updateAlarmPreferences();
+ initSummary(getPreferenceScreen());
+ }
+
+ private void initSummary(Preference p) {
+ if (p instanceof PreferenceGroup) {
+ PreferenceGroup pGrp = (PreferenceGroup) p;
+ for (int i = 0; i < pGrp.getPreferenceCount(); i++) {
+ initSummary(pGrp.getPreference(i));
+ }
+ } else {
+ updatePrefSummary(p);
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
+
+ }
+
+ @Override
+ public void onPause() {
+ getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
+ super.onPause();
+ }
+
+ @Override
+ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
+ updatePrefSummary(findPreference(key));
+ updateAlarmPreferences();
+ }
+
+ public void updateAlarmPreferences() {
+ ComponentName receiver = new ComponentName(getActivity().getApplicationContext(), ReminderBootReceiver.class);
+ PackageManager pm = getActivity().getApplicationContext().getPackageManager();
+
+ if (reminderEnable.isChecked()) {
+ scheduleAlarms(getActivity());
+
+ pm.setComponentEnabledSetting(receiver,
+ PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+ PackageManager.DONT_KILL_APP);
+
+ reminderWeekdays.setEnabled(true);
+ reminderTime.setEnabled(true);
+ reminderNotifyText.setEnabled(true);
+ } else {
+ disableAllAlarms(getActivity());
+
+ pm.setComponentEnabledSetting(receiver,
+ PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+ PackageManager.DONT_KILL_APP);
+
+ reminderWeekdays.setEnabled(false);
+ reminderTime.setEnabled(false);
+ reminderNotifyText.setEnabled(false);
+ }
+ }
+
+ private void updatePrefSummary(Preference p) {
+ if (p instanceof ListPreference) {
+ ListPreference listPref = (ListPreference) p;
+ p.setSummary(listPref.getEntry());
+ }
+
+ if (p instanceof EditTextPreference) {
+ EditTextPreference editTextPref = (EditTextPreference) p;
+ if (p.getTitle().toString().contains("assword"))
+ {
+ p.setSummary("******");
+ } else {
+ p.setSummary(editTextPref.getText());
+ }
+ }
+
+ if (p instanceof MultiSelectListPreference) {
+ MultiSelectListPreference editMultiListPref = (MultiSelectListPreference) p;
+
+ CharSequence[] entries = editMultiListPref.getEntries();
+ CharSequence[] entryValues = editMultiListPref.getEntryValues();
+ List currentEntries = new ArrayList<>();
+ Set currentEntryValues = editMultiListPref.getValues();
+
+ for (int i = 0; i < entries.length; i++)
+ if (currentEntryValues.contains(entryValues[i]))
+ currentEntries.add(entries[i].toString());
+
+ p.setSummary(currentEntries.toString());
+ }
+ }
+
+ public static void scheduleAlarms(Context context) {
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+
+ Set reminderWeekdays = prefs.getStringSet("reminderWeekdays", new HashSet());
+ Long reminderTimeInMillis = prefs.getLong("reminderTime", System.currentTimeMillis());
+
+ Iterator iterWeekdays = reminderWeekdays.iterator();
+
+ disableAllAlarms(context);
+
+ while (iterWeekdays.hasNext()) {
+ String strWeekdays = iterWeekdays.next().toString();
+
+ switch (Integer.parseInt(strWeekdays)){
+ case 0:
+ pendingAlarms.add(enableAlarm(context, Calendar.MONDAY, reminderTimeInMillis));
+ break;
+ case 1:
+ pendingAlarms.add(enableAlarm(context, Calendar.TUESDAY, reminderTimeInMillis));
+ break;
+ case 2:
+ pendingAlarms.add(enableAlarm(context, Calendar.WEDNESDAY, reminderTimeInMillis));
+ break;
+ case 3:
+ pendingAlarms.add(enableAlarm(context, Calendar.THURSDAY, reminderTimeInMillis));
+ break;
+ case 4:
+ pendingAlarms.add(enableAlarm(context, Calendar.FRIDAY, reminderTimeInMillis));
+ break;
+ case 5:
+ pendingAlarms.add(enableAlarm(context, Calendar.SATURDAY, reminderTimeInMillis));
+ break;
+ case 6:
+ pendingAlarms.add(enableAlarm(context, Calendar.SUNDAY, reminderTimeInMillis));
+ break;
+ }
+ }
+
+ }
+
+ public static PendingIntent enableAlarm(Context context, int dayOfWeek, long timeInMillis) {
+ Calendar calendar = Calendar.getInstance();
+ calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek);
+
+ // Check we aren't setting it in the past which would trigger it to fire instantly
+ if(calendar.getTimeInMillis() < System.currentTimeMillis()) {
+ calendar.add(Calendar.DAY_OF_YEAR, 7);
+ }
+
+ AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
+
+ Intent alarmIntent = new Intent(context, ReminderBootReceiver.class);
+ alarmIntent.putExtra("alarmIntent", true);
+
+ PendingIntent alarmPendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+
+ alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, timeInMillis,
+ AlarmManager.INTERVAL_DAY * 7, alarmPendingIntent);
+
+ return alarmPendingIntent;
+ }
+
+ public static void disableAllAlarms(Context context) {
+ AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
+
+ for (int i=0; i
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
+package com.health.openscale.gui.preferences;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.preference.DialogPreference;
+import android.text.format.DateFormat;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.TimePicker;
+
+import com.health.openscale.R;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+
+public class TimePreferenceDialog extends DialogPreference {
+ private Calendar calendar;
+ private TimePicker picker = null;
+
+ public TimePreferenceDialog(Context ctxt) {
+ this(ctxt, null);
+ }
+
+ public TimePreferenceDialog(Context ctxt, AttributeSet attrs) {
+ this(ctxt, attrs, android.R.attr.dialogPreferenceStyle);
+ }
+
+ public TimePreferenceDialog(Context ctxt, AttributeSet attrs, int defStyle) {
+ super(ctxt, attrs, defStyle);
+
+ setPositiveButtonText(R.string.label_ok);
+ setNegativeButtonText(R.string.label_cancel);
+ calendar = new GregorianCalendar();
+ }
+
+ @Override
+ protected View onCreateDialogView() {
+ picker = new TimePicker(getContext());
+ return (picker);
+ }
+
+ @Override
+ protected void onBindDialogView(View v) {
+ super.onBindDialogView(v);
+ picker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY));
+ picker.setCurrentMinute(calendar.get(Calendar.MINUTE));
+ }
+
+ @Override
+ protected void onDialogClosed(boolean positiveResult) {
+ super.onDialogClosed(positiveResult);
+
+ if (positiveResult) {
+ calendar.set(Calendar.HOUR_OF_DAY, picker.getCurrentHour());
+ calendar.set(Calendar.MINUTE, picker.getCurrentMinute());
+
+ setSummary(getSummary());
+ if (callChangeListener(calendar.getTimeInMillis())) {
+ persistLong(calendar.getTimeInMillis());
+ notifyChanged();
+ }
+ }
+ }
+
+ @Override
+ protected Object onGetDefaultValue(TypedArray a, int index) {
+ return (a.getString(index));
+ }
+
+ @Override
+ protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
+
+ if (restoreValue) {
+ if (defaultValue == null) {
+ calendar.setTimeInMillis(getPersistedLong(System.currentTimeMillis()));
+ } else {
+ calendar.setTimeInMillis(Long.parseLong(getPersistedString((String) defaultValue)));
+ }
+ } else {
+ if (defaultValue == null) {
+ calendar.setTimeInMillis(System.currentTimeMillis());
+ } else {
+ calendar.setTimeInMillis(Long.parseLong((String) defaultValue));
+ }
+ }
+ setSummary(getSummary());
+ }
+
+ @Override
+ public CharSequence getSummary() {
+ if (calendar == null) {
+ return null;
+ }
+ return DateFormat.getTimeFormat(getContext()).format(new Date(calendar.getTimeInMillis()));
+ }
+
+ public long getTimeInMillis() {
+ return calendar.getTimeInMillis();
+ }
+}
\ No newline at end of file
diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/UsersPreferences.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/UsersPreferences.java
new file mode 100644
index 00000000..a6b99a63
--- /dev/null
+++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/UsersPreferences.java
@@ -0,0 +1,121 @@
+/* Copyright (C) 2014 olie.xdev
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
+package com.health.openscale.gui.preferences;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.preference.Preference;
+import android.preference.PreferenceFragment;
+import android.preference.PreferenceManager;
+
+import com.health.openscale.R;
+import com.health.openscale.core.OpenScale;
+import com.health.openscale.core.ScaleUser;
+import com.health.openscale.gui.UserSettingsActivity;
+
+import java.util.ArrayList;
+
+import static android.app.Activity.RESULT_OK;
+
+public class UsersPreferences extends PreferenceFragment {
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ addPreferencesFromResource(R.xml.users_preferences);
+
+ updateUserPreferences();
+ }
+
+ private void updateUserPreferences()
+ {
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext());
+ int selectedUserId = prefs.getInt("selectedUserId", -1);
+
+ getPreferenceScreen().removeAll();
+
+ OpenScale openScale = OpenScale.getInstance(getActivity().getApplicationContext());
+
+ ArrayList scaleUserList = openScale.getScaleUserList();
+
+ for (ScaleUser scaleUser : scaleUserList)
+ {
+ Preference prefUser = new Preference(getActivity().getBaseContext());
+ prefUser.setOnPreferenceClickListener(new onClickListenerUserSelect());
+
+ if (scaleUser.id == selectedUserId) {
+ prefUser.setTitle("> " + scaleUser.user_name);
+ } else
+ {
+ prefUser.setTitle(scaleUser.user_name);
+ }
+
+ prefUser.setKey(Integer.toString(scaleUser.id));
+
+ getPreferenceScreen().addPreference(prefUser);
+ }
+
+
+ Preference prefAddUser = new Preference(getActivity().getBaseContext());
+
+ prefAddUser.setOnPreferenceClickListener(new onClickListenerAddUser());
+ prefAddUser.setTitle("+ " + getResources().getString(R.string.label_add_user));
+
+ getPreferenceScreen().addPreference(prefAddUser);
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data)
+ {
+ if (requestCode == UserSettingsActivity.ADD_USER_REQUEST) {
+ if(resultCode == RESULT_OK){
+ updateUserPreferences();
+ }
+ }
+
+
+ if (requestCode == UserSettingsActivity.EDIT_USER_REQUEST) {
+ if(resultCode == RESULT_OK){
+ updateUserPreferences();
+ }
+ }
+ }
+
+ private class onClickListenerUserSelect implements Preference.OnPreferenceClickListener {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ Intent intent = new Intent(preference.getContext(), UserSettingsActivity.class);
+ intent.putExtra("mode", UserSettingsActivity.EDIT_USER_REQUEST);
+ intent.putExtra("id", Integer.parseInt(preference.getKey()));
+ startActivityForResult(intent, UserSettingsActivity.EDIT_USER_REQUEST);
+
+ return false;
+ }
+ }
+
+ private class onClickListenerAddUser implements Preference.OnPreferenceClickListener {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ Intent intent = new Intent(preference.getContext(), UserSettingsActivity.class);
+ intent.putExtra("mode", UserSettingsActivity.ADD_USER_REQUEST);
+ startActivityForResult(intent, UserSettingsActivity.ADD_USER_REQUEST);
+
+ return false;
+ }
+ }
+
+}
diff --git a/android_app/app/src/main/res/values-de/strings.xml b/android_app/app/src/main/res/values-de/strings.xml
index b6c12f8c..682682f6 100644
--- a/android_app/app/src/main/res/values-de/strings.xml
+++ b/android_app/app/src/main/res/values-de/strings.xml
@@ -105,4 +105,10 @@
Gerätetyp
Initializiere Bluetooth Gerät
Intelligente Benutzer Zuweisung
+ Zeit zum Wiegen
+ Erinnerung
+ Benachrichtigungstext
+ Zeit
+ Wochentage
+ Messwerte
\ No newline at end of file
diff --git a/android_app/app/src/main/res/values-ja/strings.xml b/android_app/app/src/main/res/values-ja/strings.xml
index 63089b1c..cb6101e9 100644
--- a/android_app/app/src/main/res/values-ja/strings.xml
+++ b/android_app/app/src/main/res/values-ja/strings.xml
@@ -105,4 +105,10 @@
デバイスタイプ
Bluetooth接続を初期化する
スマートユーザーのアサイン
+ 重量までの時間
+ リマインダー
+ 通知テキスト
+ 時刻
+ 平日
+ 観測
\ No newline at end of file
diff --git a/android_app/app/src/main/res/values/strings.xml b/android_app/app/src/main/res/values/strings.xml
index b974de7d..05e38107 100644
--- a/android_app/app/src/main/res/values/strings.xml
+++ b/android_app/app/src/main/res/values/strings.xml
@@ -7,6 +7,7 @@
Table
Users
Data
+ Measurements
Settings
Bluetooth Status
@@ -114,6 +115,12 @@
Label on data point
+ Reminder
+ Weekdays
+ Time
+ Notification text
+ Time to weight
+
Your weight was
Your body fat was
Your water percentage was
diff --git a/android_app/app/src/main/res/values/btdevtypes.xml b/android_app/app/src/main/res/values/type_btdevices.xml
similarity index 78%
rename from android_app/app/src/main/res/values/btdevtypes.xml
rename to android_app/app/src/main/res/values/type_btdevices.xml
index 12669b1d..bf08b649 100644
--- a/android_app/app/src/main/res/values/btdevtypes.xml
+++ b/android_app/app/src/main/res/values/type_btdevices.xml
@@ -1,11 +1,11 @@
-
+
- Xiaomi Mi Scale
- openScale Custom Scale
-
+
- 0
- 1
diff --git a/android_app/app/src/main/res/values/type_weekdays.xml b/android_app/app/src/main/res/values/type_weekdays.xml
new file mode 100644
index 00000000..68aecbf4
--- /dev/null
+++ b/android_app/app/src/main/res/values/type_weekdays.xml
@@ -0,0 +1,24 @@
+
+
+
+ - Monday
+ - Tuesday
+ - Wednesday
+ - Thursday
+ - Friday
+ - Saturday
+ - Sunday
+
+
+
+ - 0
+ - 1
+ - 2
+ - 3
+ - 4
+ - 5
+ - 6
+
+
+
+
\ No newline at end of file
diff --git a/android_app/app/src/main/res/xml/bluetooth_preferences.xml b/android_app/app/src/main/res/xml/bluetooth_preferences.xml
new file mode 100644
index 00000000..4af0b824
--- /dev/null
+++ b/android_app/app/src/main/res/xml/bluetooth_preferences.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android_app/app/src/main/res/xml/graph_preferences.xml b/android_app/app/src/main/res/xml/graph_preferences.xml
new file mode 100644
index 00000000..f4ad80bb
--- /dev/null
+++ b/android_app/app/src/main/res/xml/graph_preferences.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/android_app/app/src/main/res/xml/header_preferences.xml b/android_app/app/src/main/res/xml/header_preferences.xml
new file mode 100644
index 00000000..9a8258ef
--- /dev/null
+++ b/android_app/app/src/main/res/xml/header_preferences.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android_app/app/src/main/res/xml/measurement_preferences.xml b/android_app/app/src/main/res/xml/measurement_preferences.xml
new file mode 100644
index 00000000..08ab0487
--- /dev/null
+++ b/android_app/app/src/main/res/xml/measurement_preferences.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android_app/app/src/main/res/xml/preferences.xml b/android_app/app/src/main/res/xml/preferences.xml
deleted file mode 100644
index c49dc5d8..00000000
--- a/android_app/app/src/main/res/xml/preferences.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/android_app/app/src/main/res/xml/reminder_preferences.xml b/android_app/app/src/main/res/xml/reminder_preferences.xml
new file mode 100644
index 00000000..0da86328
--- /dev/null
+++ b/android_app/app/src/main/res/xml/reminder_preferences.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android_app/app/src/main/res/xml/users_preferences.xml b/android_app/app/src/main/res/xml/users_preferences.xml
new file mode 100644
index 00000000..624ed13a
--- /dev/null
+++ b/android_app/app/src/main/res/xml/users_preferences.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file