diff --git a/.travis.yml b/.travis.yml index 93ac265c..31ea52d5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,6 +20,10 @@ branches: except: - /^travis-.*-build$/ +before_install: + - yes | sdkmanager "platforms;android-29" + - yes | sdkmanager "platform-tools" + before_script: - sed -i -r -e 's/applicationId "[^"]+/\0.'${DEV}'/' diff --git a/android_app/app/build.gradle b/android_app/app/build.gradle index 2e92d284..fe5ebf45 100644 --- a/android_app/app/build.gradle +++ b/android_app/app/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.application' +apply plugin: "androidx.navigation.safeargs" android { compileSdkVersion 29 @@ -119,21 +120,28 @@ android { } dependencies { - implementation 'com.google.android.material:material:1.2.0-alpha06' + implementation 'com.google.android.material:material:1.3.0-alpha01' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.1.0' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.preference:preference:1.1.1' + implementation 'androidx.navigation:navigation-fragment:2.3.0-rc01' + implementation 'androidx.navigation:navigation-ui:2.3.0-rc01' + implementation "android.arch.lifecycle:extensions:1.1.1" + annotationProcessor "android.arch.lifecycle:compiler:1.1.1" + // MPAndroidChart implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' // Simple CSV - implementation 'com.j256.simplecsv:simplecsv:2.3' + implementation 'com.j256.simplecsv:simplecsv:2.6' // Blessed Android - implementation 'com.github.weliem:blessed-android:1.15' + implementation 'com.github.weliem:blessed-android:1.18' // CustomActivityOnCrash implementation 'cat.ereza:customactivityoncrash:2.2.0' // AppIntro - implementation 'com.github.AppIntro:AppIntro:6.0.0-alpha3' - implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.3.71' + implementation 'com.github.AppIntro:AppIntro:6.0.0' + implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.3.72' // Room implementation 'androidx.room:room-runtime:2.2.5' annotationProcessor 'androidx.room:room-compiler:2.2.5' @@ -141,7 +149,7 @@ dependencies { // Timber implementation 'com.jakewharton.timber:timber:4.7.1' // Local unit tests - testImplementation 'junit:junit:4.12' + testImplementation 'junit:junit:4.13' // Instrumented unit tests androidTestImplementation 'androidx.annotation:annotation:1.1.0' androidTestImplementation 'androidx.test.ext:junit:1.1.1' diff --git a/android_app/app/src/androidTest/java/com/health/openscale/gui/AddMeasurementTest.java b/android_app/app/src/androidTest/java/com/health/openscale/gui/AddMeasurementTest.java index 7b240af8..08565732 100644 --- a/android_app/app/src/androidTest/java/com/health/openscale/gui/AddMeasurementTest.java +++ b/android_app/app/src/androidTest/java/com/health/openscale/gui/AddMeasurementTest.java @@ -22,31 +22,36 @@ import android.widget.DatePicker; import android.widget.EditText; import android.widget.TimePicker; +import androidx.test.espresso.contrib.PickerActions; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.filters.LargeTest; +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.rule.ActivityTestRule; + import com.health.openscale.R; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleMeasurement; import com.health.openscale.core.datatypes.ScaleUser; import com.health.openscale.core.utils.Converters; -import com.health.openscale.gui.activities.BaseAppCompatActivity; -import com.health.openscale.gui.views.BicepsMeasurementView; -import com.health.openscale.gui.views.BoneMeasurementView; -import com.health.openscale.gui.views.Caliper1MeasurementView; -import com.health.openscale.gui.views.Caliper2MeasurementView; -import com.health.openscale.gui.views.Caliper3MeasurementView; -import com.health.openscale.gui.views.ChestMeasurementView; -import com.health.openscale.gui.views.CommentMeasurementView; -import com.health.openscale.gui.views.DateMeasurementView; -import com.health.openscale.gui.views.FatMeasurementView; -import com.health.openscale.gui.views.HipMeasurementView; -import com.health.openscale.gui.views.LBMMeasurementView; -import com.health.openscale.gui.views.MuscleMeasurementView; -import com.health.openscale.gui.views.NeckMeasurementView; -import com.health.openscale.gui.views.ThighMeasurementView; -import com.health.openscale.gui.views.TimeMeasurementView; -import com.health.openscale.gui.views.VisceralFatMeasurementView; -import com.health.openscale.gui.views.WaistMeasurementView; -import com.health.openscale.gui.views.WaterMeasurementView; -import com.health.openscale.gui.views.WeightMeasurementView; +import com.health.openscale.gui.measurement.BicepsMeasurementView; +import com.health.openscale.gui.measurement.BoneMeasurementView; +import com.health.openscale.gui.measurement.Caliper1MeasurementView; +import com.health.openscale.gui.measurement.Caliper2MeasurementView; +import com.health.openscale.gui.measurement.Caliper3MeasurementView; +import com.health.openscale.gui.measurement.ChestMeasurementView; +import com.health.openscale.gui.measurement.CommentMeasurementView; +import com.health.openscale.gui.measurement.DateMeasurementView; +import com.health.openscale.gui.measurement.FatMeasurementView; +import com.health.openscale.gui.measurement.HipMeasurementView; +import com.health.openscale.gui.measurement.LBMMeasurementView; +import com.health.openscale.gui.measurement.MuscleMeasurementView; +import com.health.openscale.gui.measurement.NeckMeasurementView; +import com.health.openscale.gui.measurement.ThighMeasurementView; +import com.health.openscale.gui.measurement.TimeMeasurementView; +import com.health.openscale.gui.measurement.VisceralFatMeasurementView; +import com.health.openscale.gui.measurement.WaistMeasurementView; +import com.health.openscale.gui.measurement.WaterMeasurementView; +import com.health.openscale.gui.measurement.WeightMeasurementView; import org.hamcrest.Matchers; import org.junit.AfterClass; @@ -58,12 +63,6 @@ import org.junit.runner.RunWith; import java.util.Calendar; import java.util.List; -import androidx.test.espresso.contrib.PickerActions; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.filters.LargeTest; -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.rule.ActivityTestRule; - import static androidx.test.espresso.Espresso.onView; import static androidx.test.espresso.action.ViewActions.click; import static androidx.test.espresso.action.ViewActions.replaceText; @@ -97,7 +96,7 @@ public class AddMeasurementTest { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); prefs.edit() .putBoolean("firstStart", false) - .putString(BaseAppCompatActivity.PREFERENCE_LANGUAGE, "en") + .putString(MainActivity.PREFERENCE_LANGUAGE, "en") .putBoolean(VisceralFatMeasurementView.KEY + "Enable", true) .putBoolean(LBMMeasurementView.KEY + "Enable", true) .putBoolean(BoneMeasurementView.KEY + "Enable", true) diff --git a/android_app/app/src/androidTest/java/com/health/openscale/gui/AddUserTest.java b/android_app/app/src/androidTest/java/com/health/openscale/gui/AddUserTest.java index 57167bfb..7ee87ccc 100644 --- a/android_app/app/src/androidTest/java/com/health/openscale/gui/AddUserTest.java +++ b/android_app/app/src/androidTest/java/com/health/openscale/gui/AddUserTest.java @@ -23,10 +23,16 @@ import android.view.ViewGroup; import android.view.ViewParent; import android.widget.DatePicker; +import androidx.test.espresso.ViewInteraction; +import androidx.test.espresso.contrib.PickerActions; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.filters.LargeTest; +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.rule.ActivityTestRule; + import com.health.openscale.R; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleUser; -import com.health.openscale.gui.activities.BaseAppCompatActivity; import org.hamcrest.Description; import org.hamcrest.Matcher; @@ -40,13 +46,6 @@ import org.junit.runner.RunWith; import java.util.Calendar; -import androidx.test.espresso.ViewInteraction; -import androidx.test.espresso.contrib.PickerActions; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.filters.LargeTest; -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.rule.ActivityTestRule; - import static androidx.test.espresso.Espresso.onView; import static androidx.test.espresso.action.ViewActions.click; import static androidx.test.espresso.action.ViewActions.closeSoftKeyboard; @@ -75,7 +74,7 @@ public class AddUserTest { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); prefs.edit() .putBoolean("firstStart", true) - .putString(BaseAppCompatActivity.PREFERENCE_LANGUAGE, "en") + .putString(MainActivity.PREFERENCE_LANGUAGE, "en") .commit(); } diff --git a/android_app/app/src/androidTest/java/com/health/openscale/gui/ScreenshotRecorder.java b/android_app/app/src/androidTest/java/com/health/openscale/gui/ScreenshotRecorder.java index 44f9909a..f5119f5b 100644 --- a/android_app/app/src/androidTest/java/com/health/openscale/gui/ScreenshotRecorder.java +++ b/android_app/app/src/androidTest/java/com/health/openscale/gui/ScreenshotRecorder.java @@ -22,12 +22,20 @@ import android.graphics.Bitmap; import android.preference.PreferenceManager; import android.view.Gravity; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.filters.LargeTest; +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.rule.ActivityTestRule; +import androidx.test.rule.GrantPermissionRule; +import androidx.test.runner.screenshot.BasicScreenCaptureProcessor; +import androidx.test.runner.screenshot.ScreenCapture; +import androidx.test.runner.screenshot.Screenshot; + import com.health.openscale.R; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleMeasurement; import com.health.openscale.core.datatypes.ScaleUser; import com.health.openscale.core.utils.CsvHelper; -import com.health.openscale.gui.activities.BaseAppCompatActivity; import org.junit.Before; import org.junit.Rule; @@ -44,14 +52,6 @@ import java.util.Calendar; import java.util.List; import java.util.Locale; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.filters.LargeTest; -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.rule.ActivityTestRule; -import androidx.test.rule.GrantPermissionRule; -import androidx.test.runner.screenshot.BasicScreenCaptureProcessor; -import androidx.test.runner.screenshot.ScreenCapture; -import androidx.test.runner.screenshot.Screenshot; import timber.log.Timber; import static android.os.Environment.DIRECTORY_PICTURES; @@ -107,23 +107,23 @@ public class ScreenshotRecorder { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - String language = prefs.getString(BaseAppCompatActivity.PREFERENCE_LANGUAGE, "default"); + String language = prefs.getString(MainActivity.PREFERENCE_LANGUAGE, "default"); prefs.edit() .remove("lastFragmentId") - .putString(BaseAppCompatActivity.PREFERENCE_LANGUAGE, "en") + .putString(MainActivity.PREFERENCE_LANGUAGE, "en") .commit(); screenshotRecorder(); prefs.edit() .remove("lastFragmentId") - .putString(BaseAppCompatActivity.PREFERENCE_LANGUAGE, "de") + .putString(MainActivity.PREFERENCE_LANGUAGE, "de") .commit(); screenshotRecorder(); // Restore language setting prefs.edit() - .putString(BaseAppCompatActivity.PREFERENCE_LANGUAGE, language) + .putString(MainActivity.PREFERENCE_LANGUAGE, language) .commit(); } @@ -230,7 +230,7 @@ public class ScreenshotRecorder { List scaleMeasurementList = getTestMeasurements(); for (ScaleMeasurement measurement : scaleMeasurementList) { - openScale.addScaleData(measurement, true); + openScale.addScaleMeasurement(measurement, true); } } diff --git a/android_app/app/src/main/AndroidManifest.xml b/android_app/app/src/main/AndroidManifest.xml index a775fedc..12ae3269 100644 --- a/android_app/app/src/main/AndroidManifest.xml +++ b/android_app/app/src/main/AndroidManifest.xml @@ -22,24 +22,23 @@ + android:theme="@style/AppTheme" > + android:label="@string/app_name" + android:theme="@style/AppTheme.NoActionBar"> - - - - - + + diff --git a/android_app/app/src/main/java/com/health/openscale/core/Application.java b/android_app/app/src/main/java/com/health/openscale/core/Application.java index cb006941..529162f0 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/Application.java +++ b/android_app/app/src/main/java/com/health/openscale/core/Application.java @@ -16,6 +16,11 @@ package com.health.openscale.core; +import android.content.SharedPreferences; + +import androidx.appcompat.app.AppCompatDelegate; +import androidx.preference.PreferenceManager; + import com.health.openscale.BuildConfig; import timber.log.Timber; @@ -39,6 +44,13 @@ public class Application extends android.app.Application { Timber.plant(new TimberLogAdapter()); + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); + String prefTheme = sharedPreferences.getString("app_theme", "Light"); + + if (prefTheme.equals("Dark")) { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); + } + // Create OpenScale instance OpenScale.createInstance(getApplicationContext()); diff --git a/android_app/app/src/main/java/com/health/openscale/core/OpenScale.java b/android_app/app/src/main/java/com/health/openscale/core/OpenScale.java index 002c6f06..6b9e13e0 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/OpenScale.java +++ b/android_app/app/src/main/java/com/health/openscale/core/OpenScale.java @@ -32,7 +32,7 @@ import android.text.format.DateFormat; import android.widget.Toast; import androidx.core.content.ContextCompat; -import androidx.fragment.app.Fragment; +import androidx.lifecycle.LiveData; import androidx.room.Room; import androidx.room.RoomDatabase; import androidx.sqlite.db.SupportSQLiteDatabase; @@ -51,11 +51,10 @@ import com.health.openscale.core.datatypes.ScaleMeasurement; import com.health.openscale.core.datatypes.ScaleUser; import com.health.openscale.core.utils.Converters; import com.health.openscale.core.utils.CsvHelper; -import com.health.openscale.gui.fragments.FragmentUpdateListener; -import com.health.openscale.gui.views.FatMeasurementView; -import com.health.openscale.gui.views.LBMMeasurementView; -import com.health.openscale.gui.views.MeasurementViewSettings; -import com.health.openscale.gui.views.WaterMeasurementView; +import com.health.openscale.gui.measurement.FatMeasurementView; +import com.health.openscale.gui.measurement.LBMMeasurementView; +import com.health.openscale.gui.measurement.MeasurementViewSettings; +import com.health.openscale.gui.measurement.WaterMeasurementView; import com.health.openscale.gui.widget.WidgetProvider; import java.io.BufferedReader; @@ -94,17 +93,13 @@ public class OpenScale { private Context context; - private ArrayList fragmentList; - private OpenScale(Context context) { this.context = context; alarmHandler = new AlarmHandler(); btDeviceDriver = null; - fragmentList = new ArrayList<>(); + scaleMeasurementList = new ArrayList<>(); reopenDatabase(false); - - updateScaleData(); } public static void createInstance(Context context) { @@ -232,41 +227,51 @@ public class OpenScale { selectedScaleUser = null; } - public List getScaleMeasurementList() { - if (!scaleMeasurementList.isEmpty()) { - if (scaleMeasurementList.get(0).getUserId() != getSelectedScaleUserId()) { - scaleMeasurementList = measurementDAO.getAll(getSelectedScaleUserId()); - } + public boolean isScaleMeasurementListEmpty() { + if (measurementDAO.getCount(getSelectedScaleUserId()) == 0) { + return true; } - return scaleMeasurementList; + return false; } - public ScaleMeasurement getLatestScaleMeasurement(int userId) { + public ScaleMeasurement getLastScaleMeasurement() { + return measurementDAO.getLatest(getSelectedScaleUserId()); + } + + public ScaleMeasurement getLastScaleMeasurement(int userId) { return measurementDAO.getLatest(userId); } - public ScaleMeasurement[] getTupleScaleData(int id) + public ScaleMeasurement getFirstScaleMeasurement() { + return measurementDAO.getFirst(getSelectedScaleUserId()); + } + + public List getScaleMeasurementList() { + return measurementDAO.getAll(getSelectedScaleUserId()); + } + + public ScaleMeasurement[] getTupleOfScaleMeasurement(int id) { - ScaleMeasurement[] tupleScaleData = new ScaleMeasurement[3]; + ScaleMeasurement[] tupleScaleMeasurement = new ScaleMeasurement[3]; - tupleScaleData[0] = null; - tupleScaleData[1] = measurementDAO.get(id); - tupleScaleData[2] = null; + tupleScaleMeasurement[0] = null; + tupleScaleMeasurement[1] = measurementDAO.get(id); + tupleScaleMeasurement[2] = null; - if (tupleScaleData[1] != null) { - tupleScaleData[0] = measurementDAO.getPrevious(id, tupleScaleData[1].getUserId()); - tupleScaleData[2] = measurementDAO.getNext(id, tupleScaleData[1].getUserId()); + if (tupleScaleMeasurement[1] != null) { + tupleScaleMeasurement[0] = measurementDAO.getPrevious(id, tupleScaleMeasurement[1].getUserId()); + tupleScaleMeasurement[2] = measurementDAO.getNext(id, tupleScaleMeasurement[1].getUserId()); } - return tupleScaleData; + return tupleScaleMeasurement; } - public int addScaleData(final ScaleMeasurement scaleMeasurement) { - return addScaleData(scaleMeasurement, false); + public int addScaleMeasurement(final ScaleMeasurement scaleMeasurement) { + return addScaleMeasurement(scaleMeasurement, false); } - public int addScaleData(final ScaleMeasurement scaleMeasurement, boolean silent) { + public int addScaleMeasurement(final ScaleMeasurement scaleMeasurement, boolean silent) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); if (scaleMeasurement.getUserId() == -1) { @@ -325,7 +330,6 @@ public class OpenScale { syncInsertMeasurement(scaleMeasurement); alarmHandler.entryChanged(context, scaleMeasurement); - updateScaleData(); triggerWidgetUpdate(); } else { Timber.d("to be added measurement is thrown away because measurement with the same date and time already exist"); @@ -377,22 +381,18 @@ public class OpenScale { return getSelectedScaleUser().getId(); } - public void updateScaleData(ScaleMeasurement scaleMeasurement) { + public void updateScaleMeasurement(ScaleMeasurement scaleMeasurement) { Timber.d("Update measurement: %s", scaleMeasurement); measurementDAO.update(scaleMeasurement); alarmHandler.entryChanged(context, scaleMeasurement); syncUpdateMeasurement(scaleMeasurement); - updateScaleData(); triggerWidgetUpdate(); } - public void deleteScaleData(int id) - { + public void deleteScaleMeasurement(int id) { syncDeleteMeasurement(measurementDAO.get(id).getDateTime()); measurementDAO.delete(id); - - updateScaleData(); } public String getFilenameFromUriMayThrow(Uri uri) { @@ -438,7 +438,6 @@ public class OpenScale { if (!getScaleUserList().isEmpty()) { selectScaleUser(getScaleUserList().get(0).getId()); - updateScaleData(); } } catch (SQLiteDatabaseCorruptException e) { copyFile(Uri.fromFile(tmpExportFile), Uri.fromFile(exportFile)); @@ -491,7 +490,6 @@ public class OpenScale { } measurementDAO.insertAll(csvScaleMeasurementList); - updateScaleData(); runUiToastMsg(context.getString(R.string.info_data_imported) + " " + filename); } catch (IOException | ParseException e) { runUiToastMsg(context.getString(R.string.error_importing) + ": " + e.getMessage()); @@ -510,13 +508,11 @@ public class OpenScale { return false; } - public void clearScaleData(int userId) { + public void clearScaleMeasurements(int userId) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); prefs.edit().putInt("uniqueNumber", 0x00).apply(); syncClearMeasurements(); measurementDAO.deleteAll(userId); - - updateScaleData(); } public int[] getCountsOfMonth(int year) { @@ -538,7 +534,7 @@ public class OpenScale { return numOfMonth; } - public List getScaleDataOfStartDate(int year, int month, int day) { + public List getScaleMeasurementOfStartDate(int year, int month, int day) { int selectedUserId = getSelectedScaleUserId(); Calendar startCalender = Calendar.getInstance(); @@ -549,7 +545,7 @@ public class OpenScale { return measurementDAO.getAllInRange(startCalender.getTime(), endCalender.getTime(), selectedUserId); } - public List getScaleDataOfDay(int year, int month, int day) { + public List getScaleMeasurementOfDay(int year, int month, int day) { int selectedUserId = getSelectedScaleUserId(); Calendar startCalender = Calendar.getInstance(); @@ -562,7 +558,7 @@ public class OpenScale { return measurementDAO.getAllInRange(startCalender.getTime(), endCalender.getTime(), selectedUserId); } - public List getScaleDataOfMonth(int year, int month) { + public List getScaleMeasurementOfMonth(int year, int month) { int selectedUserId = getSelectedScaleUserId(); Calendar startCalender = Calendar.getInstance(); @@ -575,7 +571,7 @@ public class OpenScale { return measurementDAO.getAllInRange(startCalender.getTime(), endCalender.getTime(), selectedUserId); } - public List getScaleDataOfYear(int year) { + public List getScaleMeasurementOfYear(int year) { int selectedUserId = getSelectedScaleUserId(); Calendar startCalender = Calendar.getInstance(); @@ -625,32 +621,10 @@ public class OpenScale { return true; } - public void registerFragment(FragmentUpdateListener fragment) { - fragmentList.add(fragment); - + public LiveData> getScaleMeasurementsLiveData() { int selectedUserId = getSelectedScaleUserId(); - scaleMeasurementList = measurementDAO.getAll(selectedUserId); - - fragment.updateOnView(scaleMeasurementList); - } - - public void unregisterFragment(FragmentUpdateListener fragment) { - fragmentList.remove(fragment); - } - - public void updateScaleData() { - int selectedUserId = getSelectedScaleUserId(); - - scaleMeasurementList = measurementDAO.getAll(selectedUserId); - - for (FragmentUpdateListener fragment : fragmentList) { - if (fragment != null) { - if (((Fragment)fragment).isAdded()) { - fragment.updateOnView(scaleMeasurementList); - } - } - } + return measurementDAO.getAllAsLiveData(selectedUserId); } // As getScaleUserList(), but as a Cursor for export via a Content Provider. diff --git a/android_app/app/src/main/java/com/health/openscale/core/alarm/AlarmBackupHandler.java b/android_app/app/src/main/java/com/health/openscale/core/alarm/AlarmBackupHandler.java index 69780530..d2880147 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/alarm/AlarmBackupHandler.java +++ b/android_app/app/src/main/java/com/health/openscale/core/alarm/AlarmBackupHandler.java @@ -91,6 +91,7 @@ public class AlarmBackupHandler SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + // TODO to disable in the AndroidManfiest the requestLegacyExternalStorage on SDK >= 29 we need store the files on shared storages File exportDir = new File(Environment.getExternalStorageDirectory(), prefs.getString("exportDir", "openScale Backup")); if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { diff --git a/android_app/app/src/main/java/com/health/openscale/core/database/ScaleMeasurementDAO.java b/android_app/app/src/main/java/com/health/openscale/core/database/ScaleMeasurementDAO.java index c02fcb86..48a3c3a7 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/database/ScaleMeasurementDAO.java +++ b/android_app/app/src/main/java/com/health/openscale/core/database/ScaleMeasurementDAO.java @@ -18,17 +18,18 @@ package com.health.openscale.core.database; import android.database.Cursor; -import com.health.openscale.core.datatypes.ScaleMeasurement; - -import java.util.Date; -import java.util.List; - +import androidx.lifecycle.LiveData; import androidx.room.Dao; import androidx.room.Insert; import androidx.room.OnConflictStrategy; import androidx.room.Query; import androidx.room.Update; +import com.health.openscale.core.datatypes.ScaleMeasurement; + +import java.util.Date; +import java.util.List; + @Dao public interface ScaleMeasurementDAO { @Query("SELECT * FROM scaleMeasurements WHERE datetime = :datetime AND userId = :userId") @@ -43,15 +44,24 @@ public interface ScaleMeasurementDAO { @Query("SELECT * FROM scaleMeasurements WHERE datetime > (SELECT datetime FROM scaleMeasurements WHERE id = :id) AND userId = :userId AND enabled = 1 LIMIT 0,1") ScaleMeasurement getNext(int id, int userId); + @Query("SELECT count(id) FROM scaleMeasurements WHERE userId = :userId AND enabled = 1") + long getCount(int userId); + @Query("SELECT * FROM scaleMeasurements WHERE userId = :userId AND enabled = 1 ORDER BY datetime DESC") List getAll(int userId); + @Query("SELECT * FROM scaleMeasurements WHERE userId = :userId AND enabled = 1 ORDER BY datetime DESC") + LiveData> getAllAsLiveData(int userId); + @Query("SELECT * FROM scaleMeasurements WHERE datetime >= :startYear AND datetime < :endYear AND userId = :userId AND enabled = 1 ORDER BY datetime DESC") List getAllInRange(Date startYear, Date endYear, int userId); @Query("SELECT * FROM scaleMeasurements WHERE userId = :userId AND enabled = 1 ORDER BY datetime DESC LIMIT 1") ScaleMeasurement getLatest(int userId); + @Query("SELECT * FROM scaleMeasurements WHERE userId = :userId AND enabled = 1 ORDER BY datetime ASC LIMIT 1") + ScaleMeasurement getFirst(int userId); + @Insert (onConflict = OnConflictStrategy.IGNORE) long insert(ScaleMeasurement measurement); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java index 5e505403..a1b86408 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java @@ -20,6 +20,7 @@ import android.app.AlertDialog; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothManager; import android.content.ActivityNotFoundException; +import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; @@ -30,49 +31,50 @@ import android.os.Handler; import android.os.Message; import android.preference.PreferenceManager; import android.text.Html; +import android.text.TextUtils; import android.text.method.LinkMovementMethod; import android.view.Menu; import android.view.MenuItem; +import android.view.View; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; -import androidx.appcompat.app.ActionBarDrawerToggle; +import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.core.content.FileProvider; import androidx.core.view.GravityCompat; import androidx.drawerlayout.widget.DrawerLayout; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentTransaction; +import androidx.navigation.NavController; +import androidx.navigation.Navigation; +import androidx.navigation.ui.AppBarConfiguration; +import androidx.navigation.ui.NavigationUI; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.google.android.material.navigation.NavigationView; import com.health.openscale.BuildConfig; +import com.health.openscale.MobileNavigationDirections; import com.health.openscale.R; import com.health.openscale.core.OpenScale; import com.health.openscale.core.bluetooth.BluetoothCommunication; import com.health.openscale.core.datatypes.ScaleMeasurement; import com.health.openscale.core.datatypes.ScaleUser; -import com.health.openscale.gui.activities.AppIntroActivity; -import com.health.openscale.gui.activities.BaseAppCompatActivity; -import com.health.openscale.gui.activities.BluetoothSettingsActivity; -import com.health.openscale.gui.activities.DataEntryActivity; -import com.health.openscale.gui.activities.SettingsActivity; -import com.health.openscale.gui.fragments.GraphFragment; -import com.health.openscale.gui.fragments.OverviewFragment; -import com.health.openscale.gui.fragments.StatisticsFragment; -import com.health.openscale.gui.fragments.TableFragment; +import com.health.openscale.gui.measurement.MeasurementEntryFragment; +import com.health.openscale.gui.preferences.BluetoothSettingsFragment; +import com.health.openscale.gui.preferences.UserSettingsFragment; +import com.health.openscale.gui.slides.AppIntroActivity; import java.io.File; -import java.util.List; +import java.util.Locale; import cat.ereza.customactivityoncrash.config.CaocConfig; import timber.log.Timber; -public class MainActivity extends BaseAppCompatActivity +public class MainActivity extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener{ + public static final String PREFERENCE_LANGUAGE = "language"; + private static Locale systemDefaultLocale = null; private SharedPreferences prefs; private static boolean firstAppStart = true; private static boolean valueOfCountModified = false; @@ -82,14 +84,53 @@ public class MainActivity extends BaseAppCompatActivity private static final int IMPORT_DATA_REQUEST = 100; private static final int EXPORT_DATA_REQUEST = 101; private static final int ENABLE_BLUETOOTH_REQUEST = 102; + private static final int APPINTRO_REQUEST = 103; + private AppBarConfiguration mAppBarConfiguration; private DrawerLayout drawerLayout; - private NavigationView navDrawer; - private BottomNavigationView navBottomDrawer; - private ActionBarDrawerToggle drawerToggle; + private NavController navController; + private NavigationView navigationView; + private BottomNavigationView navigationBottomView; private boolean settingsActivityRunning = false; + public static Context createBaseContext(Context context) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + + String language = prefs.getString(PREFERENCE_LANGUAGE, ""); + if (language.isEmpty() || language.equals("default")) { + if (systemDefaultLocale != null) { + Locale.setDefault(systemDefaultLocale); + systemDefaultLocale = null; + } + return context; + } + + if (systemDefaultLocale == null) { + systemDefaultLocale = Locale.getDefault(); + } + + Locale locale; + String[] localeParts = TextUtils.split(language, "-"); + if (localeParts.length == 2) { + locale = new Locale(localeParts[0], localeParts[1]); + } + else { + locale = new Locale(localeParts[0]); + } + Locale.setDefault(locale); + + Configuration config = context.getResources().getConfiguration(); + config.setLocale(locale); + + return context.createConfigurationContext(config); + } + + @Override + protected void attachBaseContext(Context context) { + super.attachBaseContext(createBaseContext(context)); + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -107,51 +148,79 @@ public class MainActivity extends BaseAppCompatActivity Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); - getSupportActionBar().setDisplayShowHomeEnabled(true); - getSupportActionBar().setDisplayHomeAsUpEnabled(true); + toolbar.setNavigationOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + onSupportNavigateUp(); + } + }); // Find our drawer view drawerLayout = findViewById(R.id.drawer_layout); // Find our drawer view - navDrawer = findViewById(R.id.navigation_view); + navigationView = findViewById(R.id.navigation_view); + navigationBottomView = findViewById(R.id.navigation_bottom_view); - navBottomDrawer = findViewById(R.id.navigation_bottom_view); - navBottomDrawer.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { + // Passing each menu ID as a set of Ids because each + // menu should be considered as top level destinations. + mAppBarConfiguration = new AppBarConfiguration.Builder( + R.id.nav_overview, R.id.nav_graph, R.id.nav_table, R.id.nav_statistic, R.id.nav_main_preferences) + .setOpenableLayout(drawerLayout) + .build(); + navController = Navigation.findNavController(this, R.id.nav_host_fragment); + NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration); + NavigationUI.setupWithNavController(navigationView, navController); + NavigationUI.setupWithNavController(navigationBottomView, navController); + + navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { - selectDrawerItem(item.getItemId()); + switch (item.getItemId()) { + case R.id.nav_donation: + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=H5KSTQA6TKTE4&source=url"))); + drawerLayout.closeDrawers(); + return true; + case R.id.nav_help: + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/oliexdev/openScale/wiki"))); + drawerLayout.closeDrawers(); + return true; + } + + prefs.edit().putInt("lastFragmentId", item.getItemId()).apply(); + NavigationUI.onNavDestinationSelected(item, navController); + + // Close the navigation drawer + drawerLayout.closeDrawers(); + return true; } }); - //Create Drawer Toggle - drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.open_drawer, R.string.close_drawer){ + navigationBottomView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { + @Override + public boolean onNavigationItemSelected(@NonNull MenuItem item) { + prefs.edit().putInt("lastFragmentId", item.getItemId()).apply(); + NavigationUI.onNavDestinationSelected(item, navController); + return true; + } + }); - }; - - drawerLayout.addDrawerListener(drawerToggle); - - // Setup drawer view - setupDrawerContent(navDrawer); - - selectDrawerItem(prefs.getInt("lastFragmentId", R.id.nav_overview)); - - navBottomDrawer.setSelectedItemId(prefs.getInt("lastFragmentId", R.id.nav_overview)); + navigationBottomView.setSelectedItemId(prefs.getInt("lastFragmentId", R.id.nav_overview)); if (BuildConfig.BUILD_TYPE == "light") { - ImageView launcherIcon = navDrawer.getHeaderView(0).findViewById(R.id.profileImageView); + ImageView launcherIcon = navigationView.getHeaderView(0).findViewById(R.id.profileImageView); launcherIcon.setImageResource(R.drawable.ic_launcher_openscale_light); - navDrawer.getMenu().findItem(R.id.nav_donation).setVisible(false); + navigationView.getMenu().findItem(R.id.nav_donation).setVisible(false); } else if (BuildConfig.BUILD_TYPE == "pro") { - ImageView launcherIcon = navDrawer.getHeaderView(0).findViewById(R.id.profileImageView); + ImageView launcherIcon = navigationView.getHeaderView(0).findViewById(R.id.profileImageView); launcherIcon.setImageResource(R.drawable.ic_launcher_openscale_pro); - navDrawer.getMenu().findItem(R.id.nav_donation).setVisible(false); + navigationView.getMenu().findItem(R.id.nav_donation).setVisible(false); } if (prefs.getBoolean("firstStart", true)) { Intent appIntroIntent = new Intent(this, AppIntroActivity.class); - startActivity(appIntroIntent); + startActivityForResult(appIntroIntent, APPINTRO_REQUEST); prefs.edit().putBoolean("firstStart", false).apply(); } @@ -193,6 +262,13 @@ public class MainActivity extends BaseAppCompatActivity } } + @Override + public boolean onSupportNavigateUp() { + NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); + return NavigationUI.navigateUp(navController, mAppBarConfiguration) + || super.onSupportNavigateUp(); + } + @Override public void onResume() { super.onResume(); @@ -264,106 +340,6 @@ public class MainActivity extends BaseAppCompatActivity dialog.show(); } - private void setupDrawerContent(NavigationView navigationView) { - navigationView.setNavigationItemSelectedListener( - - new NavigationView.OnNavigationItemSelectedListener() { - @Override - public boolean onNavigationItemSelected(MenuItem menuItem) { - selectDrawerItem(menuItem.getItemId()); - navBottomDrawer.setSelectedItemId(menuItem.getItemId()); - return true; - - } - - }); - } - - private void selectDrawerItem(int menuItemId) { - // Create a new fragment and specify the fragment to show based on nav item clicked - Class fragmentClass; - String fragmentTitle; - - switch (menuItemId) { - default: - case R.id.nav_overview: - fragmentClass = OverviewFragment.class; - fragmentTitle = getResources().getString(R.string.title_overview); - break; - case R.id.nav_graph: - fragmentClass = GraphFragment.class; - fragmentTitle = getResources().getString(R.string.title_graph); - break; - case R.id.nav_table: - fragmentClass = TableFragment.class; - fragmentTitle = getResources().getString(R.string.title_table); - break; - case R.id.nav_statistic: - fragmentClass = StatisticsFragment.class; - fragmentTitle = getResources().getString(R.string.title_statistics); - break; - case R.id.nav_settings: - drawerLayout.closeDrawer(navDrawer, false); - Intent settingsIntent = new Intent(this, SettingsActivity.class); - settingsActivityRunning = true; - startActivity(settingsIntent); - return; - case R.id.nav_donation: - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=H5KSTQA6TKTE4&source=url"))); - drawerLayout.closeDrawers(); - return; - case R.id.nav_help: - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/oliexdev/openScale/wiki"))); - drawerLayout.closeDrawers(); - return; - } - - prefs.edit().putInt("lastFragmentId", menuItemId).apply(); - - FragmentManager fragmentManager = getSupportFragmentManager(); - - // Make sure that any pending transaction completes so that added fragments are - // actually added and won't get added again (may happen during activity creation - // when this method is called twice). - fragmentManager.executePendingTransactions(); - - FragmentTransaction transaction = fragmentManager.beginTransaction(); - final String tag = String.valueOf(menuItemId); - - boolean found = false; - for (Fragment fragment : fragmentManager.getFragments()) { - if (fragment.getTag().equals(tag)) { - // Show selected fragment if already added - transaction.show(fragment); - found = true; - } - else if (!fragment.isHidden()) { - // Hide currently shown fragment - transaction.hide(fragment); - } - } - - // If fragment isn't found then add it - if (!found) { - try { - transaction.add(R.id.fragment_content, (Fragment) fragmentClass.newInstance(), tag); - } catch (Exception e) { - Timber.e(e, "Failed to add fragment %s", tag); - } - } - - transaction.commit(); - - // Set action bar title - setTitle(fragmentTitle); - - // Set checked item - navDrawer.setCheckedItem(menuItemId); - - // Close the navigation drawer - drawerLayout.closeDrawers(); - } - private void showNoSelectedUserDialog() { AlertDialog.Builder infoDialog = new AlertDialog.Builder(this); @@ -374,11 +350,6 @@ public class MainActivity extends BaseAppCompatActivity @Override public boolean onOptionsItemSelected(MenuItem item) { - - if (drawerToggle.onOptionsItemSelected(item)) { - return true; - } - switch (item.getItemId()) { case android.R.id.home: drawerLayout.openDrawer(GravityCompat.START); @@ -389,9 +360,10 @@ public class MainActivity extends BaseAppCompatActivity return true; } - Intent intent = new Intent(getApplicationContext(), DataEntryActivity.class); - intent.putExtra(DataEntryActivity.EXTRA_MODE, DataEntryActivity.ADD_MEASUREMENT_REQUEST); - startActivity(intent); + MobileNavigationDirections.ActionNavMobileNavigationToNavDataentry action = MobileNavigationDirections.actionNavMobileNavigationToNavDataentry(); + action.setMode(MeasurementEntryFragment.DATA_ENTRY_MODE.ADD); + action.setTitle(getString(R.string.label_add_measurement)); + Navigation.findNavController(this, R.id.nav_host_fragment).navigate(action); return true; case R.id.action_bluetooth_status: if (OpenScale.getInstance().disconnectFromBluetoothDevice()) { @@ -439,19 +411,7 @@ public class MainActivity extends BaseAppCompatActivity setBluetoothStatusIcon(bluetoothStatusIcon); } - return true; - } - - @Override - protected void onPostCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); - drawerToggle.syncState(); - } - - @Override - public void onConfigurationChanged(Configuration newConfig){ - super.onConfigurationChanged(newConfig); - drawerToggle.onConfigurationChanged(newConfig); + return super.onCreateOptionsMenu(menu); } private void invokeConnectToBluetoothDevice() { @@ -478,9 +438,9 @@ public class MainActivity extends BaseAppCompatActivity } String deviceName = prefs.getString( - BluetoothSettingsActivity.PREFERENCE_KEY_BLUETOOTH_DEVICE_NAME, ""); + BluetoothSettingsFragment.PREFERENCE_KEY_BLUETOOTH_DEVICE_NAME, ""); String hwAddress = prefs.getString( - BluetoothSettingsActivity.PREFERENCE_KEY_BLUETOOTH_HW_ADDRESS, ""); + BluetoothSettingsFragment.PREFERENCE_KEY_BLUETOOTH_HW_ADDRESS, ""); if (!BluetoothAdapter.checkBluetoothAddress(hwAddress)) { setBluetoothStatusIcon(R.drawable.ic_bluetooth_connection_lost); @@ -519,15 +479,13 @@ public class MainActivity extends BaseAppCompatActivity OpenScale openScale = OpenScale.getInstance(); if (prefs.getBoolean("mergeWithLastMeasurement", true)) { - List scaleMeasurementList = openScale.getScaleMeasurementList(); - - if (!scaleMeasurementList.isEmpty()) { - ScaleMeasurement lastMeasurement = scaleMeasurementList.get(0); + if (!openScale.isScaleMeasurementListEmpty()) { + ScaleMeasurement lastMeasurement = openScale.getLastScaleMeasurement(); scaleBtData.merge(lastMeasurement); } } - openScale.addScaleData(scaleBtData, true); + openScale.addScaleMeasurement(scaleBtData, true); break; case INIT_PROCESS: setBluetoothStatusIcon(R.drawable.ic_bluetooth_connection_success); @@ -715,6 +673,8 @@ public class MainActivity extends BaseAppCompatActivity public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); + OpenScale openScale = OpenScale.getInstance(); + if (requestCode == ENABLE_BLUETOOTH_REQUEST) { if (resultCode == RESULT_OK) { invokeConnectToBluetoothDevice(); @@ -725,11 +685,19 @@ public class MainActivity extends BaseAppCompatActivity return; } + if (requestCode == APPINTRO_REQUEST) { + if (openScale.getSelectedScaleUserId() == -1) { + MobileNavigationDirections.ActionNavMobileNavigationToNavUsersettings action = MobileNavigationDirections.actionNavMobileNavigationToNavUsersettings(); + action.setMode(UserSettingsFragment.USER_SETTING_MODE.ADD); + action.setTitle(getString(R.string.label_add_user)); + Navigation.findNavController(this, R.id.nav_host_fragment).navigate(action); + } + } + if (resultCode != RESULT_OK || data == null) { return; } - OpenScale openScale = OpenScale.getInstance(); switch (requestCode) { case IMPORT_DATA_REQUEST: diff --git a/android_app/app/src/main/java/com/health/openscale/gui/activities/BaseAppCompatActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/activities/BaseAppCompatActivity.java deleted file mode 100644 index 64558493..00000000 --- a/android_app/app/src/main/java/com/health/openscale/gui/activities/BaseAppCompatActivity.java +++ /dev/null @@ -1,87 +0,0 @@ -/* Copyright (C) 2018 Erik Johansson -* -* 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.activities; - -import android.content.Context; -import android.content.SharedPreferences; -import android.content.res.Configuration; -import android.os.Bundle; -import android.preference.PreferenceManager; -import androidx.appcompat.app.AppCompatActivity; -import android.text.TextUtils; - -import com.health.openscale.R; - -import java.util.Locale; - -public class BaseAppCompatActivity extends AppCompatActivity { - public static final String PREFERENCE_APP_THEME = "app_theme"; - public static final String PREFERENCE_LANGUAGE = "language"; - - private static Locale systemDefaultLocale = null; - - public static Context createBaseContext(Context context) { - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - - String language = prefs.getString(PREFERENCE_LANGUAGE, ""); - if (language.isEmpty() || language.equals("default")) { - if (systemDefaultLocale != null) { - Locale.setDefault(systemDefaultLocale); - systemDefaultLocale = null; - } - return context; - } - - if (systemDefaultLocale == null) { - systemDefaultLocale = Locale.getDefault(); - } - - Locale locale; - String[] localeParts = TextUtils.split(language, "-"); - if (localeParts.length == 2) { - locale = new Locale(localeParts[0], localeParts[1]); - } - else { - locale = new Locale(localeParts[0]); - } - Locale.setDefault(locale); - - Configuration config = context.getResources().getConfiguration(); - config.setLocale(locale); - - return context.createConfigurationContext(config); - } - - public static void applyTheme(Context context) { - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - - if (prefs.getString(PREFERENCE_APP_THEME, "").equals("Dark")) { - context.setTheme(R.style.AppTheme_Dark); - } - } - - @Override - protected void attachBaseContext(Context context) { - super.attachBaseContext(createBaseContext(context)); - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - applyTheme(this); - super.onCreate(savedInstanceState); - } -} diff --git a/android_app/app/src/main/java/com/health/openscale/gui/activities/SettingsActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/activities/SettingsActivity.java deleted file mode 100644 index 78681de0..00000000 --- a/android_app/app/src/main/java/com/health/openscale/gui/activities/SettingsActivity.java +++ /dev/null @@ -1,117 +0,0 @@ -/* 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.activities; - -import android.app.Fragment; -import android.content.Context; -import android.content.SharedPreferences; -import android.graphics.PorterDuff; -import android.graphics.drawable.Drawable; -import android.os.Bundle; -import android.preference.PreferenceActivity; -import android.preference.PreferenceManager; - -import com.health.openscale.R; -import com.health.openscale.gui.preferences.BackupPreferences; -import com.health.openscale.gui.preferences.BluetoothPreferences; -import com.health.openscale.gui.utils.ColorUtil; -import com.health.openscale.gui.utils.PermissionHelper; - -import java.util.ArrayList; -import java.util.List; - -public class SettingsActivity extends PreferenceActivity - implements SharedPreferences.OnSharedPreferenceChangeListener { - private static List fragments = new ArrayList<>(); - private Fragment currentFragment; - - @Override - protected void attachBaseContext(Context context) { - super.attachBaseContext(BaseAppCompatActivity.createBaseContext(context)); - if (!fragments.isEmpty()) { - invalidateHeaders(); - } - } - - @Override - public void onCreate(Bundle savedInstanceState) { - BaseAppCompatActivity.applyTheme(this); - super.onCreate(savedInstanceState); - } - - @Override - public void onResume() { - super.onResume(); - PreferenceManager.getDefaultSharedPreferences(this) - .registerOnSharedPreferenceChangeListener(this); - - } - - @Override - public void onPause() { - PreferenceManager.getDefaultSharedPreferences(this) - .unregisterOnSharedPreferenceChangeListener(this); - super.onPause(); - } - - @Override - public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { - if (key.equals(BaseAppCompatActivity.PREFERENCE_APP_THEME) - || key.equals(BaseAppCompatActivity.PREFERENCE_LANGUAGE)) { - recreate(); - } - } - - @Override - public void onBuildHeaders(List
target) { - loadHeadersFromResource(R.xml.header_preferences, target); - - int tintColor = ColorUtil.getTextColor(this); - - fragments.clear(); - for (Header header : target) { - Drawable icon = getResources().getDrawable(header.iconRes); - icon.setColorFilter(tintColor, PorterDuff.Mode.SRC_IN); - - fragments.add(header.fragment); - } - } - - @Override - protected boolean isValidFragment(String fragmentName) { - return fragments.contains(fragmentName); - } - - @Override - public void onAttachFragment(Fragment fragment) { - currentFragment = fragment; - super.onAttachFragment(fragment); - } - - @Override - public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { - // TODO HACK to call RequestPermissionResult(...) in PreferenceFragment otherwise API level > 23 is required - switch(requestCode) { - case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_READ_STORAGE: - case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_WRITE_STORAGE: - BackupPreferences backupPreferences = (BackupPreferences)currentFragment; - backupPreferences.onMyOwnRequestPermissionsResult(requestCode, permissions, grantResults); - break; - } - - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - } -} diff --git a/android_app/app/src/main/java/com/health/openscale/gui/fragments/FragmentUpdateListener.java b/android_app/app/src/main/java/com/health/openscale/gui/fragments/FragmentUpdateListener.java deleted file mode 100644 index adde37f4..00000000 --- a/android_app/app/src/main/java/com/health/openscale/gui/fragments/FragmentUpdateListener.java +++ /dev/null @@ -1,25 +0,0 @@ -/* 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.fragments; - -import com.health.openscale.core.datatypes.ScaleMeasurement; - -import java.util.List; - -public interface FragmentUpdateListener { - void updateOnView(List scaleMeasurementList); -} diff --git a/android_app/app/src/main/java/com/health/openscale/gui/fragments/GraphFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/graph/GraphFragment.java similarity index 87% rename from android_app/app/src/main/java/com/health/openscale/gui/fragments/GraphFragment.java rename to android_app/app/src/main/java/com/health/openscale/gui/graph/GraphFragment.java index 823ddd96..9a9880c4 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/fragments/GraphFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/graph/GraphFragment.java @@ -14,11 +14,10 @@ * along with this program. If not, see */ -package com.health.openscale.gui.fragments; +package com.health.openscale.gui.graph; import android.app.AlertDialog; import android.content.DialogInterface; -import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; @@ -34,6 +33,8 @@ import android.widget.TextView; import android.widget.Toast; import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.navigation.Navigation; import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.components.AxisBase; @@ -51,10 +52,10 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.health.openscale.R; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleMeasurement; -import com.health.openscale.gui.activities.DataEntryActivity; +import com.health.openscale.gui.measurement.ChartActionBarView; +import com.health.openscale.gui.measurement.ChartMeasurementView; +import com.health.openscale.gui.measurement.MeasurementEntryFragment; import com.health.openscale.gui.utils.ColorUtil; -import com.health.openscale.gui.views.ChartActionBarView; -import com.health.openscale.gui.views.ChartMeasurementView; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -62,7 +63,7 @@ import java.util.Calendar; import java.util.List; import java.util.Locale; -public class GraphFragment extends Fragment implements FragmentUpdateListener { +public class GraphFragment extends Fragment { private View graphView; private ChartMeasurementView chartView; private ChartActionBarView chartActionBarView; @@ -97,10 +98,9 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { openScale = OpenScale.getInstance(); if (savedInstanceState == null) { - List scaleMeasurementList = openScale.getScaleMeasurementList(); - if (!scaleMeasurementList.isEmpty()) { - calYears.setTime(scaleMeasurementList.get(0).getDateTime()); - calLastSelected.setTime(scaleMeasurementList.get(0).getDateTime()); + if (!openScale.isScaleMeasurementListEmpty()) { + calYears.setTime(openScale.getLastScaleMeasurement().getDateTime()); + calLastSelected.setTime(openScale.getLastScaleMeasurement().getDateTime()); } } else { @@ -128,7 +128,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { XAxis chartTopxAxis = chartTop.getXAxis(); chartTopxAxis.setPosition(XAxis.XAxisPosition.BOTTOM); chartTopxAxis.setDrawGridLines(false); - chartTopxAxis.setTextColor(ColorUtil.getTextColor(graphView.getContext())); + chartTopxAxis.setTextColor(ColorUtil.getTintColor(graphView.getContext())); chartTopxAxis.setValueFormatter(new ValueFormatter() { private final SimpleDateFormat mFormat = new SimpleDateFormat("MMM", Locale.getDefault()); @@ -167,7 +167,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { txtYear.setText(Integer.toString(calYears.get(Calendar.YEAR))); List scaleMeasurementList = - OpenScale.getInstance().getScaleDataOfYear(calYears.get(Calendar.YEAR)); + OpenScale.getInstance().getScaleMeasurementOfYear(calYears.get(Calendar.YEAR)); if (!scaleMeasurementList.isEmpty()) { calLastSelected.setTime(scaleMeasurementList.get(0).getDateTime()); } @@ -182,7 +182,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { txtYear.setText(Integer.toString(calYears.get(Calendar.YEAR))); List scaleMeasurementList = - OpenScale.getInstance().getScaleDataOfYear(calYears.get(Calendar.YEAR)); + OpenScale.getInstance().getScaleMeasurementOfYear(calYears.get(Calendar.YEAR)); if (!scaleMeasurementList.isEmpty()) { calLastSelected.setTime(scaleMeasurementList.get(scaleMeasurementList.size() - 1).getDateTime()); } @@ -255,12 +255,10 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { showMenu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - int id = markedMeasurement.getId(); - - Intent intent = new Intent(graphView.getContext(), DataEntryActivity.class); - intent.putExtra(DataEntryActivity.EXTRA_ID, id); - intent.putExtra(DataEntryActivity.EXTRA_MODE, DataEntryActivity.VIEW_MEASUREMENT_REQUEST); - startActivity(intent); + GraphFragmentDirections.ActionNavGraphToNavDataentry action = GraphFragmentDirections.actionNavGraphToNavDataentry(); + action.setMeasurementId(markedMeasurement.getId()); + action.setMode(MeasurementEntryFragment.DATA_ENTRY_MODE.VIEW); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigate(action); } }); @@ -268,12 +266,10 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { editMenu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - int id = markedMeasurement.getId(); - - Intent intent = new Intent(graphView.getContext(), DataEntryActivity.class); - intent.putExtra(DataEntryActivity.EXTRA_ID, id); - intent.putExtra(DataEntryActivity.EXTRA_MODE, DataEntryActivity.EDIT_MEASUREMENT_REQUEST); - startActivity(intent); + GraphFragmentDirections.ActionNavGraphToNavDataentry action = GraphFragmentDirections.actionNavGraphToNavDataentry(); + action.setMeasurementId(markedMeasurement.getId()); + action.setMode(MeasurementEntryFragment.DATA_ENTRY_MODE.EDIT); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigate(action); } }); deleteMenu = graphView.findViewById(R.id.deleteMenu); @@ -284,17 +280,16 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { } }); - openScale.registerFragment(this); + OpenScale.getInstance().getScaleMeasurementsLiveData().observe(getViewLifecycleOwner(), new Observer>() { + @Override + public void onChanged(List scaleMeasurements) { + generateGraphs(); + } + }); return graphView; } - @Override - public void onDestroyView() { - OpenScale.getInstance().unregisterFragment(this); - super.onDestroyView(); - } - @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); @@ -303,12 +298,6 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { outState.putLong(CAL_LAST_SELECTED_KEY, calLastSelected.getTimeInMillis()); } - @Override - public void updateOnView(List scaleMeasurementList) - { - generateGraphs(); - } - private void generateColumnData() { int[] numOfMonth = openScale.getCountsOfMonth(calYears.get(Calendar.YEAR)); @@ -345,14 +334,13 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { int firstYear = selectedYear; int lastYear = selectedYear; - List scaleMeasurementList = openScale.getScaleMeasurementList(); - if (!scaleMeasurementList.isEmpty()) { + if (!openScale.isScaleMeasurementListEmpty()) { Calendar cal = Calendar.getInstance(); - cal.setTime(scaleMeasurementList.get(scaleMeasurementList.size() - 1).getDateTime()); + cal.setTime(openScale.getFirstScaleMeasurement().getDateTime()); firstYear = cal.get(Calendar.YEAR); - cal.setTime(scaleMeasurementList.get(0).getDateTime()); + cal.setTime(openScale.getLastScaleMeasurement().getDateTime()); lastYear = cal.get(Calendar.YEAR); } btnLeftYear.setEnabled(selectedYear > firstYear); @@ -464,7 +452,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { } private void doDeleteMeasurement() { - OpenScale.getInstance().deleteScaleData(markedMeasurement.getId()); + OpenScale.getInstance().deleteScaleMeasurement(markedMeasurement.getId()); Toast.makeText(graphView.getContext(), getResources().getString(R.string.info_data_deleted), Toast.LENGTH_SHORT).show(); showMenu.setVisibility(View.GONE); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/BMIMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/BMIMeasurementView.java similarity index 97% rename from android_app/app/src/main/java/com/health/openscale/gui/views/BMIMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/BMIMeasurementView.java index bfeca00d..cfe4a570 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/BMIMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/BMIMeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/BMRMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/BMRMeasurementView.java similarity index 97% rename from android_app/app/src/main/java/com/health/openscale/gui/views/BMRMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/BMRMeasurementView.java index 5d28c611..56e0e187 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/BMRMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/BMRMeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/BicepsMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/BicepsMeasurementView.java similarity index 97% rename from android_app/app/src/main/java/com/health/openscale/gui/views/BicepsMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/BicepsMeasurementView.java index 25909d4a..9175fd0a 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/BicepsMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/BicepsMeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/BoneMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/BoneMeasurementView.java similarity index 98% rename from android_app/app/src/main/java/com/health/openscale/gui/views/BoneMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/BoneMeasurementView.java index cd13ec14..eb6f8ab8 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/BoneMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/BoneMeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/Caliper1MeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/Caliper1MeasurementView.java similarity index 98% rename from android_app/app/src/main/java/com/health/openscale/gui/views/Caliper1MeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/Caliper1MeasurementView.java index 7952e19c..3dbe35dc 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/Caliper1MeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/Caliper1MeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/Caliper2MeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/Caliper2MeasurementView.java similarity index 98% rename from android_app/app/src/main/java/com/health/openscale/gui/views/Caliper2MeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/Caliper2MeasurementView.java index 3909749a..16bb9451 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/Caliper2MeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/Caliper2MeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/Caliper3MeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/Caliper3MeasurementView.java similarity index 98% rename from android_app/app/src/main/java/com/health/openscale/gui/views/Caliper3MeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/Caliper3MeasurementView.java index 0f64ceb6..482feaba 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/Caliper3MeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/Caliper3MeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/CaloriesMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/CaloriesMeasurementView.java similarity index 97% rename from android_app/app/src/main/java/com/health/openscale/gui/views/CaloriesMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/CaloriesMeasurementView.java index 9c7d8316..50ad2cc3 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/CaloriesMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/CaloriesMeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/ChartActionBarView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/ChartActionBarView.java similarity index 99% rename from android_app/app/src/main/java/com/health/openscale/gui/views/ChartActionBarView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/ChartActionBarView.java index 050a2567..07162eaf 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/ChartActionBarView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/ChartActionBarView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.content.SharedPreferences; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/ChartMarkerView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/ChartMarkerView.java similarity index 98% rename from android_app/app/src/main/java/com/health/openscale/gui/views/ChartMarkerView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/ChartMarkerView.java index 4378e81c..e39e4d07 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/ChartMarkerView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/ChartMarkerView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.annotation.SuppressLint; import android.content.Context; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/ChartMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/ChartMeasurementView.java similarity index 97% rename from android_app/app/src/main/java/com/health/openscale/gui/views/ChartMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/ChartMeasurementView.java index 89fd13f8..6df1c01b 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/ChartMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/ChartMeasurementView.java @@ -14,7 +14,7 @@ * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.content.SharedPreferences; @@ -105,7 +105,7 @@ public class ChartMeasurementView extends LineChart { isRollingChart = rollingChart; if (isRollingChart) { - ScaleMeasurement lastMeasurement = openScale.getLatestScaleMeasurement(openScale.getSelectedScaleUserId()); + ScaleMeasurement lastMeasurement = openScale.getLastScaleMeasurement(); if (lastMeasurement != null) { Calendar lastMeasurementCalender = Calendar.getInstance(); @@ -128,7 +128,7 @@ public class ChartMeasurementView extends LineChart { throw new IllegalArgumentException("view mode not implemented"); } - setMeasurementList(openScale.getScaleDataOfStartDate(lastMeasurementCalender.get(Calendar.YEAR), lastMeasurementCalender.get(Calendar.MONTH), lastMeasurementCalender.get(Calendar.DAY_OF_MONTH))); + setMeasurementList(openScale.getScaleMeasurementOfStartDate(lastMeasurementCalender.get(Calendar.YEAR), lastMeasurementCalender.get(Calendar.MONTH), lastMeasurementCalender.get(Calendar.DAY_OF_MONTH))); } } else { setMeasurementList(openScale.getScaleMeasurementList()); @@ -144,7 +144,7 @@ public class ChartMeasurementView extends LineChart { public void setViewRange(int year, final ViewMode mode) { progressBar.setVisibility(VISIBLE); - setMeasurementList(openScale.getScaleDataOfYear(year)); + setMeasurementList(openScale.getScaleMeasurementOfYear(year)); setViewMode(mode); refresh(); @@ -152,7 +152,7 @@ public class ChartMeasurementView extends LineChart { public void setViewRange(int year, int month, final ViewMode mode) { progressBar.setVisibility(VISIBLE); - setMeasurementList(openScale.getScaleDataOfMonth(year, month)); + setMeasurementList(openScale.getScaleMeasurementOfMonth(year, month)); setViewMode(mode); refresh(); @@ -191,14 +191,14 @@ public class ChartMeasurementView extends LineChart { getLegend().setEnabled(prefs.getBoolean("legendEnable", true)); getLegend().setWordWrapEnabled(true); getLegend().setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - getLegend().setTextColor(ColorUtil.getTextColor(getContext())); + getLegend().setTextColor(ColorUtil.getTintColor(getContext())); getDescription().setEnabled(false); getAxisLeft().setEnabled(true); getAxisRight().setEnabled(true); - getAxisLeft().setTextColor(ColorUtil.getTextColor(getContext())); - getAxisRight().setTextColor(ColorUtil.getTextColor(getContext())); + getAxisLeft().setTextColor(ColorUtil.getTintColor(getContext())); + getAxisRight().setTextColor(ColorUtil.getTintColor(getContext())); getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM); - getXAxis().setTextColor(ColorUtil.getTextColor(getContext())); + getXAxis().setTextColor(ColorUtil.getTintColor(getContext())); setOnChartGestureListener(new OnChartGestureListener() { @Override @@ -643,7 +643,7 @@ public class ChartMeasurementView extends LineChart { measurementLine.setLineWidth(1.5f); measurementLine.setValueTextSize(10.0f); measurementLine.setColor(measurementView.getColor()); - measurementLine.setValueTextColor(ColorUtil.getTextColor(getContext())); + measurementLine.setValueTextColor(ColorUtil.getTintColor(getContext())); measurementLine.setCircleColor(measurementView.getColor()); measurementLine.setAxisDependency(measurementView.getSettings().isOnRightAxis() ? YAxis.AxisDependency.RIGHT : YAxis.AxisDependency.LEFT); measurementLine.setHighlightEnabled(true); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/ChestMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/ChestMeasurementView.java similarity index 97% rename from android_app/app/src/main/java/com/health/openscale/gui/views/ChestMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/ChestMeasurementView.java index 748ee80e..6575219d 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/ChestMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/ChestMeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/CommentMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/CommentMeasurementView.java similarity index 98% rename from android_app/app/src/main/java/com/health/openscale/gui/views/CommentMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/CommentMeasurementView.java index f731f75f..1b2baaba 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/CommentMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/CommentMeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.os.Bundle; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/DateMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/DateMeasurementView.java similarity index 98% rename from android_app/app/src/main/java/com/health/openscale/gui/views/DateMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/DateMeasurementView.java index 79833f6e..252c0ff5 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/DateMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/DateMeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.app.DatePickerDialog; import android.content.Context; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/FatCaliperMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/FatCaliperMeasurementView.java similarity index 98% rename from android_app/app/src/main/java/com/health/openscale/gui/views/FatCaliperMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/FatCaliperMeasurementView.java index 272c9266..cb5d31d8 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/FatCaliperMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/FatCaliperMeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/FatMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/FatMeasurementView.java similarity index 97% rename from android_app/app/src/main/java/com/health/openscale/gui/views/FatMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/FatMeasurementView.java index a4fc46a9..45ccd5a2 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/FatMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/FatMeasurementView.java @@ -13,11 +13,12 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; -import android.preference.ListPreference; + +import androidx.preference.ListPreference; import com.health.openscale.R; import com.health.openscale.core.bodymetric.EstimatedFatMetric; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/FloatMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/FloatMeasurementView.java similarity index 95% rename from android_app/app/src/main/java/com/health/openscale/gui/views/FloatMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/FloatMeasurementView.java index c0d4941c..4ee8da18 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/FloatMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/FloatMeasurementView.java @@ -14,23 +14,15 @@ * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; -import android.app.AlertDialog; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.content.res.Resources; -import android.database.DataSetObserver; import android.graphics.Color; import android.net.Uri; import android.os.Bundle; import android.os.Handler; -import android.preference.CheckBoxPreference; -import android.preference.ListPreference; -import android.preference.Preference; -import android.preference.PreferenceScreen; -import android.preference.SwitchPreference; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.style.ForegroundColorSpan; @@ -40,11 +32,18 @@ import android.view.MotionEvent; import android.view.View; import android.widget.Button; import android.widget.EditText; +import android.widget.ImageView; import android.widget.LinearLayout; -import android.widget.ListAdapter; import android.widget.TableRow; import android.widget.TextView; +import androidx.preference.CheckBoxPreference; +import androidx.preference.ListPreference; +import androidx.preference.Preference; +import androidx.preference.PreferenceScreen; +import androidx.preference.PreferenceViewHolder; +import androidx.preference.SwitchPreference; + import com.health.openscale.R; import com.health.openscale.core.datatypes.ScaleMeasurement; import com.health.openscale.core.evaluation.EvaluationResult; @@ -525,15 +524,19 @@ public abstract class FloatMeasurementView extends MeasurementView { private class ListPreferenceWithNeutralButton extends ListPreference { ListPreferenceWithNeutralButton(Context context) { super(context); + + setWidgetLayoutResource(R.layout.preference_info); } @Override - protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { - super.onPrepareDialogBuilder(builder); + public void onBindViewHolder(PreferenceViewHolder holder) { + super.onBindViewHolder(holder); - builder.setNeutralButton(R.string.label_help, new DialogInterface.OnClickListener() { + ImageView helpView = (ImageView)holder.findViewById(R.id.helpView); + + helpView.setOnClickListener(new OnClickListener() { @Override - public void onClick(DialogInterface dialog, int which) { + public void onClick(View v) { getContext().startActivity(new Intent( Intent.ACTION_VIEW, Uri.parse("https://github.com/oliexdev/openScale/wiki/Body-metric-estimations"))); @@ -577,6 +580,8 @@ public abstract class FloatMeasurementView extends MeasurementView { formula.setPersistent(true); formula.setDefaultValue(settings.getEstimationFormula()); prepareEstimationFormulaPreference(formula); + formula.setEnabled(estimate.isChecked()); + formula.setSummary(formula.getEntries()[formula.findIndexOfValue(settings.getEstimationFormula())]); formula.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { @@ -590,16 +595,18 @@ public abstract class FloatMeasurementView extends MeasurementView { } }); - final ListAdapter adapter = screen.getRootAdapter(); - adapter.registerDataSetObserver(new DataSetObserver() { + estimate.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override - public void onChanged() { - adapter.unregisterDataSetObserver(this); - - formula.setDependency(estimate.getKey()); - formula.setSummary(formula.getEntry()); + public boolean onPreferenceChange(Preference preference, Object newValue) { + if ((Boolean)newValue == true) { + formula.setEnabled(true); + } else { + formula.setEnabled(false); + } + return true; } }); + screen.addPreference(formula); } } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/HipMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/HipMeasurementView.java similarity index 97% rename from android_app/app/src/main/java/com/health/openscale/gui/views/HipMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/HipMeasurementView.java index 36e18fe1..c79f8bb2 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/HipMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/HipMeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/LBMMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/LBMMeasurementView.java similarity index 97% rename from android_app/app/src/main/java/com/health/openscale/gui/views/LBMMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/LBMMeasurementView.java index 7d25488b..4928adaf 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/LBMMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/LBMMeasurementView.java @@ -13,11 +13,12 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; -import android.preference.ListPreference; + +import androidx.preference.ListPreference; import com.health.openscale.R; import com.health.openscale.core.bodymetric.EstimatedLBMMetric; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/LinearGaugeView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/LinearGaugeView.java similarity index 99% rename from android_app/app/src/main/java/com/health/openscale/gui/views/LinearGaugeView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/LinearGaugeView.java index f8ccb47b..866505f4 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/LinearGaugeView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/LinearGaugeView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Canvas; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/MeasurementEntryFragment.java similarity index 75% rename from android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/MeasurementEntryFragment.java index 896c62d1..eb6ef489 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/MeasurementEntryFragment.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.activities; +package com.health.openscale.gui.measurement; import android.app.AlertDialog; import android.content.Context; @@ -23,41 +23,35 @@ import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.preference.PreferenceManager; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; +import android.view.ViewGroup; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TableLayout; import android.widget.TextView; import android.widget.Toast; -import androidx.appcompat.widget.Toolbar; import androidx.core.graphics.drawable.DrawableCompat; +import androidx.fragment.app.Fragment; +import androidx.navigation.Navigation; import com.health.openscale.R; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleMeasurement; -import com.health.openscale.gui.views.DateMeasurementView; -import com.health.openscale.gui.views.MeasurementView; -import com.health.openscale.gui.views.MeasurementViewUpdateListener; -import com.health.openscale.gui.views.TimeMeasurementView; -import com.health.openscale.gui.views.UserMeasurementView; -import com.health.openscale.gui.views.WeightMeasurementView; import java.text.DateFormat; import java.util.Date; import java.util.List; -public class DataEntryActivity extends BaseAppCompatActivity { - public static final String EXTRA_ID = "id"; - public static final String EXTRA_MODE = "mode"; +public class MeasurementEntryFragment extends Fragment { + public enum DATA_ENTRY_MODE {ADD, EDIT, VIEW}; private static final String PREF_EXPAND = "expandEvaluator"; - public static final int ADD_MEASUREMENT_REQUEST = 0; - public static final int EDIT_MEASUREMENT_REQUEST = 1; - public static final int VIEW_MEASUREMENT_REQUEST = 2; + private DATA_ENTRY_MODE mode = DATA_ENTRY_MODE.ADD; private MeasurementView.MeasurementViewMode measurementViewMode; @@ -80,26 +74,21 @@ public class DataEntryActivity extends BaseAppCompatActivity { private Context context; @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View root = inflater.inflate(R.layout.fragment_dataentry, container, false); - setContentView(R.layout.activity_dataentry); + setHasOptionsMenu(true); - Toolbar toolbar = findViewById(R.id.dataEntryToolbar); - setSupportActionBar(toolbar); + context = getContext(); - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - - context = this; - - TableLayout tableLayoutDataEntry = findViewById(R.id.tableLayoutDataEntry); + TableLayout tableLayoutDataEntry = root.findViewById(R.id.tableLayoutDataEntry); dataEntryMeasurements = MeasurementView.getMeasurementList( context, MeasurementView.DateTimeOrder.LAST); - txtDataNr = findViewById(R.id.txtDataNr); - btnLeft = findViewById(R.id.btnLeft); - btnRight = findViewById(R.id.btnRight); + txtDataNr = root.findViewById(R.id.txtDataNr); + btnLeft = root.findViewById(R.id.btnLeft); + btnRight = root.findViewById(R.id.btnRight); btnLeft.setVisibility(View.INVISIBLE); btnRight.setVisibility(View.INVISIBLE); @@ -117,25 +106,32 @@ public class DataEntryActivity extends BaseAppCompatActivity { } }); - int mode = getIntent().getExtras().getInt(EXTRA_MODE); MeasurementView.MeasurementViewMode measurementMode = MeasurementView.MeasurementViewMode.ADD; - if (mode == ADD_MEASUREMENT_REQUEST) { - measurementMode = MeasurementView.MeasurementViewMode.ADD; - } - else if (mode == VIEW_MEASUREMENT_REQUEST){ - measurementMode = MeasurementView.MeasurementViewMode.VIEW; + mode = MeasurementEntryFragmentArgs.fromBundle(getArguments()).getMode(); + + switch (mode) { + case ADD: + measurementMode = MeasurementView.MeasurementViewMode.ADD; + break; + case EDIT: + break; + case VIEW: + measurementMode = MeasurementView.MeasurementViewMode.VIEW; + break; } for (MeasurementView measurement : dataEntryMeasurements) { measurement.setEditMode(measurementMode); } - updateOnView(); + int id = MeasurementEntryFragmentArgs.fromBundle(getArguments()).getMeasurementId(); + + updateOnView(id); onMeasurementViewUpdateListener updateListener = new onMeasurementViewUpdateListener(); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - final boolean expand = mode == ADD_MEASUREMENT_REQUEST + final boolean expand = mode == DATA_ENTRY_MODE.ADD ? false : prefs.getBoolean(PREF_EXPAND, false); for (MeasurementView measurement : dataEntryMeasurements) { @@ -143,29 +139,13 @@ public class DataEntryActivity extends BaseAppCompatActivity { measurement.setOnUpdateListener(updateListener); measurement.setExpand(expand); } + + return root; } @Override - protected void onRestoreInstanceState(Bundle savedInstanceState) { - super.onRestoreInstanceState(savedInstanceState); - - for (MeasurementView measurement : dataEntryMeasurements) { - measurement.restoreState(savedInstanceState); - } - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - - for (MeasurementView measurement : dataEntryMeasurements) { - measurement.saveState(outState); - } - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - MenuInflater inflater = getMenuInflater(); + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.clear(); inflater.inflate(R.menu.dataentry_menu, menu); // Apply a tint to all icons in the toolbar @@ -196,18 +176,20 @@ public class DataEntryActivity extends BaseAppCompatActivity { expandButton = menu.findItem(R.id.expandButton); deleteButton = menu.findItem(R.id.deleteButton); - int mode = getIntent().getExtras().getInt(EXTRA_MODE); // Hide/show icons as appropriate for the view mode - if (mode == ADD_MEASUREMENT_REQUEST) { - setViewMode(MeasurementView.MeasurementViewMode.ADD); - } - else if (mode == VIEW_MEASUREMENT_REQUEST){ - setViewMode(MeasurementView.MeasurementViewMode.VIEW); - } else if (mode == EDIT_MEASUREMENT_REQUEST) { - setViewMode(MeasurementView.MeasurementViewMode.EDIT); + switch (mode) { + case ADD: + setViewMode(MeasurementView.MeasurementViewMode.ADD); + break; + case EDIT: + setViewMode(MeasurementView.MeasurementViewMode.EDIT); + break; + case VIEW: + setViewMode(MeasurementView.MeasurementViewMode.VIEW); + break; } - return super.onCreateOptionsMenu(menu); + super.onCreateOptionsMenu(menu, inflater); } @Override @@ -220,7 +202,7 @@ public class DataEntryActivity extends BaseAppCompatActivity { setViewMode(MeasurementView.MeasurementViewMode.VIEW); } else { - finish(); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigateUp(); } return true; @@ -241,36 +223,11 @@ public class DataEntryActivity extends BaseAppCompatActivity { case R.id.deleteButton: deleteMeasurement(); return true; - - // Override the default behaviour in order to return to the correct fragment - // (e.g. the table view) and not always go to the overview. - case android.R.id.home: - onBackPressed(); - return true; } return super.onOptionsItemSelected(item); } - @Override - public void onBackPressed() { - if (measurementViewMode == MeasurementView.MeasurementViewMode.EDIT) { - setViewMode(MeasurementView.MeasurementViewMode.VIEW); - if (isDirty) { - scaleMeasurement = null; - } - updateOnView(); - } - else { - super.onBackPressed(); - } - } - - private void updateOnView() { - int id = 0; - if (getIntent().hasExtra(EXTRA_ID)) { - id = getIntent().getExtras().getInt(EXTRA_ID); - } - + private void updateOnView(int id) { if (scaleMeasurement == null || scaleMeasurement.getId() != id) { isDirty = false; scaleMeasurement = null; @@ -283,7 +240,7 @@ public class DataEntryActivity extends BaseAppCompatActivity { if (id > 0) { // Show selected scale data if (scaleMeasurement == null) { - ScaleMeasurement[] tupleScaleData = openScale.getTupleScaleData(id); + ScaleMeasurement[] tupleScaleData = openScale.getTupleOfScaleMeasurement(id); previousMeasurement = tupleScaleData[0]; scaleMeasurement = tupleScaleData[1].clone(); nextMeasurement = tupleScaleData[2]; @@ -292,14 +249,14 @@ public class DataEntryActivity extends BaseAppCompatActivity { btnRight.setEnabled(nextMeasurement != null); } } else { - if (openScale.getScaleMeasurementList().isEmpty()) { + if (openScale.isScaleMeasurementListEmpty()) { // Show default values scaleMeasurement = new ScaleMeasurement(); scaleMeasurement.setWeight(openScale.getSelectedScaleUser().getInitialWeight()); } else { // Show the last scale data as default - scaleMeasurement = openScale.getScaleMeasurementList().get(0).clone(); + scaleMeasurement = openScale.getLastScaleMeasurement().clone(); scaleMeasurement.setId(0); scaleMeasurement.setDateTime(new Date()); scaleMeasurement.setComment(""); @@ -332,8 +289,6 @@ public class DataEntryActivity extends BaseAppCompatActivity { switch (viewMode) { case VIEW: - getSupportActionBar().setTitle(""); - saveButton.setVisible(false); editButton.setVisible(true); expandButton.setVisible(true); @@ -348,8 +303,6 @@ public class DataEntryActivity extends BaseAppCompatActivity { dateTimeVisibility = View.GONE; break; case EDIT: - getSupportActionBar().setTitle(""); - saveButton.setVisible(true); editButton.setVisible(false); expandButton.setVisible(true); @@ -362,8 +315,6 @@ public class DataEntryActivity extends BaseAppCompatActivity { btnRight.setEnabled(false); break; case ADD: - getSupportActionBar().setTitle(R.string.label_add_measurement); - saveButton.setVisible(true); editButton.setVisible(false); expandButton.setVisible(false); @@ -392,10 +343,10 @@ public class DataEntryActivity extends BaseAppCompatActivity { } if (scaleMeasurement.getId() > 0) { - openScale.updateScaleData(scaleMeasurement); + openScale.updateScaleMeasurement(scaleMeasurement); } else { - openScale.addScaleData(scaleMeasurement); + openScale.addScaleMeasurement(scaleMeasurement); } isDirty = false; } @@ -428,12 +379,12 @@ public class DataEntryActivity extends BaseAppCompatActivity { } private void doDeleteMeasurement() { - OpenScale.getInstance().deleteScaleData(scaleMeasurement.getId()); + OpenScale.getInstance().deleteScaleMeasurement(scaleMeasurement.getId()); Toast.makeText(context, getResources().getString(R.string.info_data_deleted), Toast.LENGTH_SHORT).show(); final boolean hasNext = moveLeft() || moveRight(); if (!hasNext) { - finish(); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigateUp(); } else if (measurementViewMode == MeasurementView.MeasurementViewMode.EDIT) { setViewMode(MeasurementView.MeasurementViewMode.VIEW); @@ -442,8 +393,7 @@ public class DataEntryActivity extends BaseAppCompatActivity { private boolean moveLeft() { if (previousMeasurement != null) { - getIntent().putExtra(EXTRA_ID, previousMeasurement.getId()); - updateOnView(); + updateOnView(previousMeasurement.getId()); return true; } @@ -452,8 +402,7 @@ public class DataEntryActivity extends BaseAppCompatActivity { private boolean moveRight() { if (nextMeasurement != null) { - getIntent().putExtra(EXTRA_ID, nextMeasurement.getId()); - updateOnView(); + updateOnView(nextMeasurement.getId()); return true; } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/MeasurementView.java similarity index 97% rename from android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/MeasurementView.java index 6c340e4d..cd13d5ea 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/MeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.app.AlertDialog; import android.content.Context; @@ -24,8 +24,6 @@ import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; import android.os.Bundle; -import android.preference.PreferenceManager; -import android.preference.PreferenceScreen; import android.text.SpannableStringBuilder; import android.text.TextUtils; import android.util.TypedValue; @@ -42,6 +40,8 @@ import android.widget.TableRow; import android.widget.TextView; import androidx.core.content.ContextCompat; +import androidx.preference.PreferenceManager; +import androidx.preference.PreferenceScreen; import com.health.openscale.R; import com.health.openscale.core.OpenScale; @@ -53,10 +53,10 @@ import com.health.openscale.gui.utils.ColorUtil; import java.util.ArrayList; import java.util.List; -import static com.health.openscale.gui.views.MeasurementView.MeasurementViewMode.ADD; -import static com.health.openscale.gui.views.MeasurementView.MeasurementViewMode.EDIT; -import static com.health.openscale.gui.views.MeasurementView.MeasurementViewMode.STATISTIC; -import static com.health.openscale.gui.views.MeasurementView.MeasurementViewMode.VIEW; +import static com.health.openscale.gui.measurement.MeasurementView.MeasurementViewMode.ADD; +import static com.health.openscale.gui.measurement.MeasurementView.MeasurementViewMode.EDIT; +import static com.health.openscale.gui.measurement.MeasurementView.MeasurementViewMode.STATISTIC; +import static com.health.openscale.gui.measurement.MeasurementView.MeasurementViewMode.VIEW; public abstract class MeasurementView extends TableLayout { public enum MeasurementViewMode {VIEW, EDIT, ADD, STATISTIC} @@ -349,7 +349,7 @@ public abstract class MeasurementView extends TableLayout { } public int getForegroundColor() { - return ColorUtil.getTextColor(getContext()); + return ColorUtil.getTintColor(getContext()); } public int getIndicatorColor() { diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementViewSettings.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/MeasurementViewSettings.java similarity index 99% rename from android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementViewSettings.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/MeasurementViewSettings.java index b2256203..608a177f 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementViewSettings.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/MeasurementViewSettings.java @@ -14,7 +14,7 @@ * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.SharedPreferences; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementViewUpdateListener.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/MeasurementViewUpdateListener.java similarity index 94% rename from android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementViewUpdateListener.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/MeasurementViewUpdateListener.java index 63362419..c5807302 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementViewUpdateListener.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/MeasurementViewUpdateListener.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; public interface MeasurementViewUpdateListener { void onMeasurementViewUpdate(MeasurementView view); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/MuscleMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/MuscleMeasurementView.java similarity index 98% rename from android_app/app/src/main/java/com/health/openscale/gui/views/MuscleMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/MuscleMeasurementView.java index cbb8cd3f..08a72951 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/MuscleMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/MuscleMeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/NeckMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/NeckMeasurementView.java similarity index 97% rename from android_app/app/src/main/java/com/health/openscale/gui/views/NeckMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/NeckMeasurementView.java index c6488ad4..7ca9ab4d 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/NeckMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/NeckMeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/TDEEMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/TDEEMeasurementView.java similarity index 97% rename from android_app/app/src/main/java/com/health/openscale/gui/views/TDEEMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/TDEEMeasurementView.java index 38b0970f..a9f5072b 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/TDEEMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/TDEEMeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/ThighMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/ThighMeasurementView.java similarity index 97% rename from android_app/app/src/main/java/com/health/openscale/gui/views/ThighMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/ThighMeasurementView.java index d3c44509..b401bdb0 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/ThighMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/ThighMeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/TimeMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/TimeMeasurementView.java similarity index 98% rename from android_app/app/src/main/java/com/health/openscale/gui/views/TimeMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/TimeMeasurementView.java index 1a98aa8a..6f2662fe 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/TimeMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/TimeMeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.os.Bundle; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/UserMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/UserMeasurementView.java similarity index 98% rename from android_app/app/src/main/java/com/health/openscale/gui/views/UserMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/UserMeasurementView.java index b96ea368..66e3799a 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/UserMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/UserMeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.os.Bundle; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/VisceralFatMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/VisceralFatMeasurementView.java similarity index 97% rename from android_app/app/src/main/java/com/health/openscale/gui/views/VisceralFatMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/VisceralFatMeasurementView.java index d0b41b33..02635e35 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/VisceralFatMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/VisceralFatMeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/WHRMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/WHRMeasurementView.java similarity index 97% rename from android_app/app/src/main/java/com/health/openscale/gui/views/WHRMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/WHRMeasurementView.java index 928631af..c413be28 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/WHRMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/WHRMeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/WHtRMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/WHtRMeasurementView.java similarity index 97% rename from android_app/app/src/main/java/com/health/openscale/gui/views/WHtRMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/WHtRMeasurementView.java index 363833bf..ac5cb9c6 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/WHtRMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/WHtRMeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/WaistMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/WaistMeasurementView.java similarity index 98% rename from android_app/app/src/main/java/com/health/openscale/gui/views/WaistMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/WaistMeasurementView.java index 50160a08..2da45796 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/WaistMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/WaistMeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/WaterMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/WaterMeasurementView.java similarity index 97% rename from android_app/app/src/main/java/com/health/openscale/gui/views/WaterMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/WaterMeasurementView.java index 3107de41..be3b4e00 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/WaterMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/WaterMeasurementView.java @@ -13,11 +13,12 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; -import android.preference.ListPreference; + +import androidx.preference.ListPreference; import com.health.openscale.R; import com.health.openscale.core.bodymetric.EstimatedWaterMetric; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/WeightMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/WeightMeasurementView.java similarity index 98% rename from android_app/app/src/main/java/com/health/openscale/gui/views/WeightMeasurementView.java rename to android_app/app/src/main/java/com/health/openscale/gui/measurement/WeightMeasurementView.java index 111e5278..cad45f5b 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/WeightMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/WeightMeasurementView.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.views; +package com.health.openscale.gui.measurement; import android.content.Context; import android.graphics.Color; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/fragments/OverviewFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/overview/OverviewFragment.java similarity index 89% rename from android_app/app/src/main/java/com/health/openscale/gui/fragments/OverviewFragment.java rename to android_app/app/src/main/java/com/health/openscale/gui/overview/OverviewFragment.java index ef7496a4..0b830229 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/fragments/OverviewFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/overview/OverviewFragment.java @@ -13,11 +13,10 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.fragments; +package com.health.openscale.gui.overview; import android.app.AlertDialog; import android.content.DialogInterface; -import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Color; import android.os.Bundle; @@ -36,6 +35,8 @@ import android.widget.TextView; import android.widget.Toast; import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.navigation.Navigation; import com.github.mikephil.charting.data.Entry; import com.github.mikephil.charting.highlight.Highlight; @@ -44,16 +45,16 @@ import com.health.openscale.R; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleMeasurement; import com.health.openscale.core.datatypes.ScaleUser; -import com.health.openscale.gui.activities.DataEntryActivity; +import com.health.openscale.gui.measurement.ChartActionBarView; +import com.health.openscale.gui.measurement.ChartMeasurementView; +import com.health.openscale.gui.measurement.MeasurementEntryFragment; +import com.health.openscale.gui.measurement.MeasurementView; import com.health.openscale.gui.utils.ColorUtil; -import com.health.openscale.gui.views.ChartActionBarView; -import com.health.openscale.gui.views.ChartMeasurementView; -import com.health.openscale.gui.views.MeasurementView; import java.util.ArrayList; import java.util.List; -public class OverviewFragment extends Fragment implements FragmentUpdateListener { +public class OverviewFragment extends Fragment { private View overviewView; private TextView txtTitleUser; @@ -219,12 +220,10 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener showEntry.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - int id = markedMeasurement.getId(); - - Intent intent = new Intent(overviewView.getContext(), DataEntryActivity.class); - intent.putExtra(DataEntryActivity.EXTRA_ID, id); - intent.putExtra(DataEntryActivity.EXTRA_MODE, DataEntryActivity.VIEW_MEASUREMENT_REQUEST); - startActivity(intent); + OverviewFragmentDirections.ActionNavOverviewToNavDataentry action = OverviewFragmentDirections.actionNavOverviewToNavDataentry(); + action.setMeasurementId(markedMeasurement.getId()); + action.setMode(MeasurementEntryFragment.DATA_ENTRY_MODE.VIEW); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigate(action); } }); @@ -232,12 +231,10 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener editEntry.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - int id = markedMeasurement.getId(); - - Intent intent = new Intent(overviewView.getContext(), DataEntryActivity.class); - intent.putExtra(DataEntryActivity.EXTRA_ID, id); - intent.putExtra(DataEntryActivity.EXTRA_MODE, DataEntryActivity.EDIT_MEASUREMENT_REQUEST); - startActivity(intent); + OverviewFragmentDirections.ActionNavOverviewToNavDataentry action = OverviewFragmentDirections.actionNavOverviewToNavDataentry(); + action.setMeasurementId(markedMeasurement.getId()); + action.setMode(MeasurementEntryFragment.DATA_ENTRY_MODE.EDIT); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigate(action); } }); deleteEntry = overviewView.findViewById(R.id.deleteEntry); @@ -252,20 +249,18 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener editEntry.setEnabled(false); deleteEntry.setEnabled(false); - OpenScale.getInstance().registerFragment(this); - chartView.animateY(700); + OpenScale.getInstance().getScaleMeasurementsLiveData().observe(getViewLifecycleOwner(), new Observer>() { + @Override + public void onChanged(List scaleMeasurements) { + updateOnView(scaleMeasurements); + } + }); + return overviewView; } - @Override - public void onDestroyView() { - OpenScale.getInstance().unregisterFragment(this); - super.onDestroyView(); - } - - @Override public void updateOnView(List scaleMeasurementList) { if (scaleMeasurementList.isEmpty()) { markedMeasurement = new ScaleMeasurement(); @@ -286,7 +281,7 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener } private void updateMesurementViews(ScaleMeasurement selectedMeasurement) { - ScaleMeasurement[] tupleScaleData = OpenScale.getInstance().getTupleScaleData(selectedMeasurement.getId()); + ScaleMeasurement[] tupleScaleData = OpenScale.getInstance().getTupleOfScaleMeasurement(selectedMeasurement.getId()); ScaleMeasurement prevScaleMeasurement = tupleScaleData[0]; for (MeasurementView measurement : lastMeasurementViews) { @@ -364,7 +359,7 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener ScaleUser scaleUser = scaleUserList.get(position); openScale.selectScaleUser(scaleUser.getId()); - openScale.updateScaleData(); + updateOnView(openScale.getScaleMeasurementList()); } } @@ -402,7 +397,7 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener } private void doDeleteMeasurement() { - OpenScale.getInstance().deleteScaleData(markedMeasurement.getId()); + OpenScale.getInstance().deleteScaleMeasurement(markedMeasurement.getId()); Toast.makeText(overviewView.getContext(), getResources().getString(R.string.info_data_deleted), Toast.LENGTH_SHORT).show(); showEntry.setEnabled(false); @@ -412,7 +407,5 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener showEntry.setColorFilter(ColorUtil.COLOR_GRAY); editEntry.setColorFilter(ColorUtil.COLOR_GRAY); deleteEntry.setColorFilter(ColorUtil.COLOR_GRAY); - - updateOnView(OpenScale.getInstance().getScaleMeasurementList()); } } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/AboutPreferences.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/AboutPreferences.java index f7a21cf1..9fd2bdd0 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/preferences/AboutPreferences.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/AboutPreferences.java @@ -19,10 +19,13 @@ import android.content.Intent; import android.net.Uri; import android.os.Build; import android.os.Bundle; -import android.preference.CheckBoxPreference; -import android.preference.Preference; -import android.preference.PreferenceFragment; import android.util.Log; +import android.view.Menu; +import android.view.MenuInflater; + +import androidx.preference.CheckBoxPreference; +import androidx.preference.Preference; +import androidx.preference.PreferenceFragmentCompat; import com.health.openscale.BuildConfig; import com.health.openscale.R; @@ -39,7 +42,7 @@ import timber.log.Timber; import static android.app.Activity.RESULT_OK; -public class AboutPreferences extends PreferenceFragment { +public class AboutPreferences extends PreferenceFragmentCompat { private static final String KEY_APP_VERSION = "pref_app_version"; private static final String KEY_DEBUG_LOG = "debug_log"; @@ -96,10 +99,10 @@ public class AboutPreferences extends PreferenceFragment { } @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + setPreferencesFromResource(R.xml.about_preferences, rootKey); - addPreferencesFromResource(R.xml.about_preferences); + setHasOptionsMenu(true); findPreference(KEY_APP_VERSION).setSummary( String.format("v%s (%d)", BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE)); @@ -160,4 +163,9 @@ public class AboutPreferences extends PreferenceFragment { debugLog.setChecked(getEnabledFileDebugTree() != null); } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.clear(); + } } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/BackupPreferences.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/BackupPreferences.java index 4e2a33c6..3425a854 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/preferences/BackupPreferences.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/BackupPreferences.java @@ -21,15 +21,15 @@ import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.net.Uri; 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.view.Menu; +import android.view.MenuInflater; import android.widget.Toast; +import androidx.fragment.app.Fragment; +import androidx.preference.CheckBoxPreference; +import androidx.preference.Preference; +import androidx.preference.PreferenceFragmentCompat; + import com.health.openscale.R; import com.health.openscale.core.OpenScale; import com.health.openscale.core.alarm.AlarmBackupHandler; @@ -37,13 +37,10 @@ import com.health.openscale.core.alarm.ReminderBootReceiver; import com.health.openscale.gui.utils.PermissionHelper; import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; import static android.app.Activity.RESULT_OK; -public class BackupPreferences extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener { +public class BackupPreferences extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener { private static final String PREFERENCE_KEY_IMPORT_BACKUP = "importBackup"; private static final String PREFERENCE_KEY_EXPORT_BACKUP = "exportBackup"; private static final String PREFERENCE_KEY_AUTO_BACKUP = "autoBackup"; @@ -58,11 +55,15 @@ public class BackupPreferences extends PreferenceFragment implements SharedPrefe private boolean isAutoBackupAskForPermission; - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + private Fragment fragment; - addPreferencesFromResource(R.xml.backup_preferences); + @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + setPreferencesFromResource(R.xml.backup_preferences, rootKey); + + setHasOptionsMenu(true); + + fragment = this; importBackup = (Preference) findPreference(PREFERENCE_KEY_IMPORT_BACKUP); importBackup.setOnPreferenceClickListener(new onClickListenerImportBackup()); @@ -73,7 +74,6 @@ public class BackupPreferences extends PreferenceFragment implements SharedPrefe autoBackup = (CheckBoxPreference) findPreference(PREFERENCE_KEY_AUTO_BACKUP); autoBackup.setOnPreferenceClickListener(new onClickListenerAutoBackup()); - initSummary(getPreferenceScreen()); updateBackupPreferences(); } @@ -115,59 +115,9 @@ public class BackupPreferences extends PreferenceFragment implements SharedPrefe @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - updatePrefSummary(findPreference(key)); updateBackupPreferences(); } - 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) - { - 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].toString())) currentEntries.add(entries[i].toString()); - } - - p.setSummary(currentEntries.toString()); - } - } private class onClickListenerAutoBackup implements Preference.OnPreferenceClickListener { @Override @@ -175,7 +125,7 @@ public class BackupPreferences extends PreferenceFragment implements SharedPrefe if (autoBackup.isChecked()) { isAutoBackupAskForPermission = true; - PermissionHelper.requestWritePermission(getActivity()); + PermissionHelper.requestWritePermission(fragment); } return true; @@ -185,7 +135,7 @@ public class BackupPreferences extends PreferenceFragment implements SharedPrefe private class onClickListenerImportBackup implements Preference.OnPreferenceClickListener { @Override public boolean onPreferenceClick(Preference preference) { - if (PermissionHelper.requestReadPermission(getActivity())) { + if (PermissionHelper.requestReadPermission(fragment)) { importBackup(); } @@ -196,7 +146,7 @@ public class BackupPreferences extends PreferenceFragment implements SharedPrefe private class onClickListenerExportBackup implements Preference.OnPreferenceClickListener { @Override public boolean onPreferenceClick(Preference preference) { - if (PermissionHelper.requestWritePermission(getActivity())) { + if (PermissionHelper.requestWritePermission(fragment)) { exportBackup(); } @@ -265,13 +215,14 @@ public class BackupPreferences extends PreferenceFragment implements SharedPrefe return true; } - public void onMyOwnRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { + @Override + public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_READ_STORAGE: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { importBackup(); } else { - Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.permission_not_granted), Toast.LENGTH_SHORT).show(); + Toast.makeText(getContext(), getResources().getString(R.string.permission_not_granted), Toast.LENGTH_SHORT).show(); } break; case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_WRITE_STORAGE: @@ -287,9 +238,14 @@ public class BackupPreferences extends PreferenceFragment implements SharedPrefe autoBackup.setChecked(false); } - Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.permission_not_granted), Toast.LENGTH_SHORT).show(); + Toast.makeText(getContext(), getResources().getString(R.string.permission_not_granted), Toast.LENGTH_SHORT).show(); } break; } } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.clear(); + } } 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 index d41e1048..89196874 100644 --- 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 @@ -15,18 +15,26 @@ */ 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.widget.BaseAdapter; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.lifecycle.Observer; +import androidx.navigation.NavDirections; +import androidx.navigation.Navigation; +import androidx.preference.Preference; +import androidx.preference.PreferenceFragmentCompat; import com.health.openscale.R; -import com.health.openscale.gui.activities.BluetoothSettingsActivity; -public class BluetoothPreferences extends PreferenceFragment { +public class BluetoothPreferences extends PreferenceFragmentCompat { private static final String PREFERENCE_KEY_BLUETOOTH_SCANNER = "btScanner"; private Preference btScanner; @@ -41,42 +49,50 @@ public class BluetoothPreferences extends PreferenceFragment { private String getCurrentDeviceName() { SharedPreferences prefs = getPreferenceManager().getSharedPreferences(); return formatDeviceName( - prefs.getString(BluetoothSettingsActivity.PREFERENCE_KEY_BLUETOOTH_DEVICE_NAME, ""), - prefs.getString(BluetoothSettingsActivity.PREFERENCE_KEY_BLUETOOTH_HW_ADDRESS, "")); - } - - private void updateBtScannerSummary() { - // Set summary text and trigger data set changed to make UI update - btScanner.setSummary(getCurrentDeviceName()); - ((BaseAdapter)getPreferenceScreen().getRootAdapter()).notifyDataSetChanged(); + prefs.getString(BluetoothSettingsFragment.PREFERENCE_KEY_BLUETOOTH_DEVICE_NAME, ""), + prefs.getString(BluetoothSettingsFragment.PREFERENCE_KEY_BLUETOOTH_HW_ADDRESS, "")); } @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + setPreferencesFromResource(R.xml.bluetooth_preferences, rootKey); - addPreferencesFromResource(R.xml.bluetooth_preferences); + setHasOptionsMenu(true); btScanner = (Preference) findPreference(PREFERENCE_KEY_BLUETOOTH_SCANNER); btScanner.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { - Intent intent = new Intent(preference.getContext(), BluetoothSettingsActivity.class); - startActivityForResult(intent, BluetoothSettingsActivity.GET_SCALE_REQUEST); + NavDirections action = BluetoothPreferencesDirections.actionNavBluetoothPreferencesToNavBluetoothSettings(); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigate(action); return true; } }); - updateBtScannerSummary(); + btScanner.setSummary(getCurrentDeviceName()); } @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { - if (requestCode == BluetoothSettingsActivity.GET_SCALE_REQUEST) { - updateBtScannerSummary(); - } + View view = super.onCreateView(inflater, container, savedInstanceState); + + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).getCurrentBackStackEntry().getSavedStateHandle().getLiveData("update", false).observe(getViewLifecycleOwner(), new Observer() { + @Override + public void onChanged(Boolean aBoolean) { + if (aBoolean) { + btScanner.setSummary(getCurrentDeviceName()); + } + } + }); + + return view; + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.clear(); } } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/activities/BluetoothSettingsActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothSettingsFragment.java similarity index 87% rename from android_app/app/src/main/java/com/health/openscale/gui/activities/BluetoothSettingsActivity.java rename to android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothSettingsFragment.java index 9c804f26..8c3c4330 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/activities/BluetoothSettingsActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothSettingsFragment.java @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.activities; +package com.health.openscale.gui.preferences; import android.app.Activity; import android.app.AlertDialog; @@ -37,15 +37,19 @@ import android.text.Spanned; import android.text.style.ForegroundColorSpan; import android.text.style.RelativeSizeSpan; import android.view.Gravity; -import android.view.MenuItem; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; import android.view.View; +import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; -import androidx.appcompat.widget.Toolbar; +import androidx.fragment.app.Fragment; +import androidx.navigation.Navigation; import com.health.openscale.R; import com.health.openscale.core.OpenScale; @@ -62,11 +66,9 @@ import java.util.Map; import timber.log.Timber; -public class BluetoothSettingsActivity extends BaseAppCompatActivity { +public class BluetoothSettingsFragment extends Fragment { private Context context; - public static final int GET_SCALE_REQUEST = 150; - public static final String PREFERENCE_KEY_BLUETOOTH_DEVICE_NAME = "btDeviceName"; public static final String PREFERENCE_KEY_BLUETOOTH_HW_ADDRESS = "btHwAddress"; @@ -79,40 +81,39 @@ public class BluetoothSettingsActivity extends BaseAppCompatActivity { private BluetoothCentral central; @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View root = inflater.inflate(R.layout.fragment_bluetoothsettings, container, false); - setContentView(R.layout.activity_bluetoothsettings); - context = this; + setHasOptionsMenu(true); - deviceListView = findViewById(R.id.deviceListView); - txtSearching = findViewById(R.id.txtSearching); - progressBar = findViewById(R.id.progressBar); - Toolbar toolbar = findViewById(R.id.bluetoothSettingToolbar); - setSupportActionBar(toolbar); + context = getContext(); - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getSupportActionBar().setTitle(R.string.label_bluetooth_title); + deviceListView = root.findViewById(R.id.deviceListView); + txtSearching = root.findViewById(R.id.txtSearching); + progressBar = root.findViewById(R.id.progressBar); + return root; + } + + @Override + public void onPause() { + stopBluetoothDiscovery(); + super.onPause(); + } + + @Override + public void onResume() { if (PermissionHelper.requestBluetoothPermission(this)) { if (PermissionHelper.requestLocationServicePermission(this)) { startBluetoothDiscovery(); } } + super.onResume(); } @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - // Override the default behaviour in order to return to the correct fragment - // (e.g. the table view) and not always go to the overview. - case android.R.id.home: - stopBluetoothDiscovery(); - onBackPressed(); - return true; - } - - return super.onOptionsItemSelected(item); + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.clear(); } private static final String formatDeviceName(String name, String address) { @@ -137,7 +138,7 @@ public class BluetoothSettingsActivity extends BaseAppCompatActivity { deviceListView.removeAllViews(); foundDevices.clear(); - central = new BluetoothCentral(getApplicationContext(), bluetoothCentralCallback, new Handler(Looper.getMainLooper())); + central = new BluetoothCentral(getContext(), bluetoothCentralCallback, new Handler(Looper.getMainLooper())); central.scanForPeripherals(); txtSearching.setVisibility(View.VISIBLE); @@ -191,10 +192,10 @@ public class BluetoothSettingsActivity extends BaseAppCompatActivity { return; } - BluetoothDeviceView deviceView = new BluetoothDeviceView(this); + BluetoothDeviceView deviceView = new BluetoothDeviceView(getContext()); deviceView.setDeviceName(formatDeviceName(bleScanResult.getDevice())); - BluetoothCommunication btDevice = BluetoothFactory.createDeviceDriver(this, device.getName()); + BluetoothCommunication btDevice = BluetoothFactory.createDeviceDriver(getContext(), device.getName()); if (btDevice != null) { Timber.d("Found supported device %s (driver: %s)", formatDeviceName(device), btDevice.driverName()); @@ -225,7 +226,7 @@ public class BluetoothSettingsActivity extends BaseAppCompatActivity { } private void getDebugInfo(final BluetoothDevice device) { - AlertDialog.Builder builder = new AlertDialog.Builder(this); + AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); builder.setTitle("Fetching info") .setMessage("Please wait while we fetch extended info from your scale...") .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @@ -323,7 +324,7 @@ public class BluetoothSettingsActivity extends BaseAppCompatActivity { public void setIcon(int resId) { deviceIcon.setImageResource(resId); - int tintColor = ColorUtil.getTextColor(getApplicationContext()); + int tintColor = ColorUtil.getTintColor(getContext()); deviceIcon.setColorFilter(tintColor, PorterDuff.Mode.SRC_IN); } @@ -355,8 +356,8 @@ public class BluetoothSettingsActivity extends BaseAppCompatActivity { Timber.d("Saved Bluetooth device " + device.getName() + " with address " + device.getAddress()); stopBluetoothDiscovery(); - setResult(GET_SCALE_REQUEST); - finish(); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).getPreviousBackStackEntry().getSavedStateHandle().set("update", true); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigateUp(); } } @@ -368,9 +369,6 @@ public class BluetoothSettingsActivity extends BaseAppCompatActivity { startBluetoothDiscovery(); } } - else { - onBackPressed(); - } } super.onActivityResult(requestCode, resultCode, data); @@ -385,8 +383,7 @@ public class BluetoothSettingsActivity extends BaseAppCompatActivity { startBluetoothDiscovery(); } } else { - Toast.makeText(this, R.string.permission_not_granted, Toast.LENGTH_SHORT).show(); - onBackPressed(); + Toast.makeText(getContext(), R.string.permission_not_granted, Toast.LENGTH_SHORT).show(); } break; } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/GeneralPreferences.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/GeneralPreferences.java index 56638138..62ed8716 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/preferences/GeneralPreferences.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/GeneralPreferences.java @@ -15,97 +15,49 @@ */ 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 android.view.Menu; +import android.view.MenuInflater; + +import androidx.appcompat.app.AppCompatDelegate; +import androidx.preference.ListPreference; +import androidx.preference.Preference; +import androidx.preference.PreferenceFragmentCompat; import com.health.openscale.R; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - -public class GeneralPreferences extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener { +public class GeneralPreferences extends PreferenceFragmentCompat { @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + setPreferencesFromResource(R.xml.general_preferences, rootKey); - addPreferencesFromResource(R.xml.general_preferences); + setHasOptionsMenu(true); - 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)); + final ListPreference prefTheme = findPreference("app_theme"); + prefTheme.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + if (newValue.equals("Dark")) { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); + } else { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); + } + return true; } - } 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("******"); + final ListPreference prefLanguage = findPreference("language"); + prefLanguage.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + getActivity().recreate(); + return true; } - 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].toString())) currentEntries.add(entries[i].toString()); - } - - p.setSummary(currentEntries.toString()); - } + }); } @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)); + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.clear(); } } 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 index e043147c..f96d3193 100644 --- 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 @@ -15,23 +15,23 @@ */ package com.health.openscale.gui.preferences; -import android.content.SharedPreferences; -import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.os.Bundle; -import android.preference.PreferenceFragment; +import android.view.Menu; +import android.view.MenuInflater; + +import androidx.preference.PreferenceFragmentCompat; import com.health.openscale.R; -import com.health.openscale.core.OpenScale; -public class GraphPreferences extends PreferenceFragment implements OnSharedPreferenceChangeListener { +public class GraphPreferences extends PreferenceFragmentCompat { private static final String PREFERENCE_KEY_REGRESSION_LINE_ORDER = "regressionLineOrder"; @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + setPreferencesFromResource(R.xml.graph_preferences, rootKey); - addPreferencesFromResource(R.xml.graph_preferences); + setHasOptionsMenu(true); // TODO replaced it with sliding average /*EditTextPreference regressionLineOrder = @@ -49,19 +49,7 @@ public class GraphPreferences extends PreferenceFragment implements OnSharedPref } @Override - public void onResume() { - super.onResume(); - getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); - } - - @Override - public void onPause() { - super.onPause(); - getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); - } - - @Override - public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - OpenScale.getInstance().updateScaleData(); + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.clear(); } } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/MainPreferences.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/MainPreferences.java new file mode 100644 index 00000000..633dd371 --- /dev/null +++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/MainPreferences.java @@ -0,0 +1,147 @@ +/* Copyright (C) 2020 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.graphics.drawable.Drawable; +import android.os.Bundle; +import android.util.TypedValue; +import android.view.Menu; +import android.view.MenuInflater; + +import androidx.core.content.ContextCompat; +import androidx.core.graphics.drawable.DrawableCompat; +import androidx.navigation.NavDirections; +import androidx.navigation.Navigation; +import androidx.preference.Preference; +import androidx.preference.PreferenceFragmentCompat; +import androidx.preference.PreferenceGroup; + +import com.health.openscale.R; + +public class MainPreferences extends PreferenceFragmentCompat { + + @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + setPreferencesFromResource(R.xml.main_preferences, rootKey); + + setHasOptionsMenu(true); + + TypedValue typedValue = new TypedValue(); + getContext().getTheme().resolveAttribute(R.attr.colorControlNormal, typedValue, true); + int color = ContextCompat.getColor(getContext(), typedValue.resourceId); + + tintIcons(getPreferenceScreen(), color); + + final Preference prefBackup = findPreference("backup"); + prefBackup.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + NavDirections action = MainPreferencesDirections.actionNavMainPreferencesToNavBackupPreferences(); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigate(action); + return true; + } + }); + + final Preference prefBluetooth = findPreference("bluetooth"); + prefBluetooth.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + NavDirections action = MainPreferencesDirections.actionNavMainPreferencesToNavBluetoothPreferences(); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigate(action); + return true; + } + }); + + final Preference prefGeneral = findPreference("general"); + prefGeneral.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + NavDirections action = MainPreferencesDirections.actionNavMainPreferencesToNavGeneralPreferences(); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigate(action); + return true; + } + }); + + final Preference prefGraph = findPreference("graph"); + prefGraph.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + NavDirections action = MainPreferencesDirections.actionNavMainPreferencesToNavGraphPreferences(); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigate(action); + return true; + } + }); + + final Preference prefMeasurements = findPreference("measurements"); + prefMeasurements.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + NavDirections action = MainPreferencesDirections.actionNavMainPreferencesToNavMeasurementPreferences(); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigate(action); + return true; + } + }); + + final Preference prefReminder = findPreference("reminder"); + prefReminder.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + NavDirections action = MainPreferencesDirections.actionNavMainPreferencesToNavReminderPreferences(); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigate(action); + return true; + } + }); + + final Preference prefUsers = findPreference("users"); + prefUsers.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + NavDirections action = MainPreferencesDirections.actionNavMainPreferencesToNavUserPreferences(); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigate(action); + return true; + } + }); + + final Preference prefAbout = findPreference("about"); + prefAbout.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + NavDirections action = MainPreferencesDirections.actionNavMainPreferencesToNavAboutPreferences(); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigate(action); + return true; + } + }); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.clear(); + } + + private static void tintIcons(Preference preference, int color) { + if (preference instanceof PreferenceGroup) { + PreferenceGroup group = ((PreferenceGroup) preference); + for (int i = 0; i < group.getPreferenceCount(); i++) { + tintIcons(group.getPreference(i), color); + } + } else { + Drawable icon = preference.getIcon(); + if (icon != null) { + DrawableCompat.setTint(icon, color); + } + } + } +} diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/MeasurementDetailPreferences.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/MeasurementDetailPreferences.java new file mode 100644 index 00000000..e1ce54c2 --- /dev/null +++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/MeasurementDetailPreferences.java @@ -0,0 +1,52 @@ +/* Copyright (C) 2014 olie.xdev +* Copyright (C) 2018 Erik Johansson +* +* 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.view.Menu; +import android.view.MenuInflater; + +import androidx.preference.PreferenceFragmentCompat; +import androidx.preference.PreferenceScreen; + +import com.health.openscale.R; +import com.health.openscale.gui.measurement.MeasurementView; + +public class MeasurementDetailPreferences extends PreferenceFragmentCompat { + + private static MeasurementView measurementView; + + @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + setPreferencesFromResource(R.xml.measurement_detail_preferences, rootKey); + + setHasOptionsMenu(true); + + final PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(getActivity()); + measurementView.prepareExtraPreferencesScreen(screen); + setPreferenceScreen(screen); + } + + public static void setMeasurementView(MeasurementView view) { + measurementView = view; + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.clear(); + } +} 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 index 7e9d87d8..2a301710 100644 --- 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 @@ -17,42 +17,42 @@ package com.health.openscale.gui.preferences; import android.app.AlertDialog; -import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; -import android.content.SharedPreferences; -import android.content.SharedPreferences.OnSharedPreferenceChangeListener; -import android.database.DataSetObserver; -import android.graphics.Color; import android.graphics.Point; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.os.Bundle; -import android.preference.Preference; -import android.preference.PreferenceCategory; -import android.preference.PreferenceFragment; -import android.preference.PreferenceGroup; -import android.preference.PreferenceManager; -import android.preference.PreferenceScreen; -import android.util.TypedValue; import android.view.DragEvent; import android.view.GestureDetector; +import android.view.Menu; +import android.view.MenuInflater; import android.view.MotionEvent; import android.view.View; import android.widget.CompoundButton; -import android.widget.ListAdapter; +import android.widget.ImageView; import android.widget.Switch; +import android.widget.TextView; import android.widget.Toast; +import androidx.navigation.NavDirections; +import androidx.navigation.Navigation; +import androidx.preference.Preference; +import androidx.preference.PreferenceCategory; +import androidx.preference.PreferenceFragmentCompat; +import androidx.preference.PreferenceGroup; +import androidx.preference.PreferenceManager; +import androidx.preference.PreferenceViewHolder; + import com.health.openscale.R; import com.health.openscale.core.OpenScale; -import com.health.openscale.gui.views.MeasurementView; -import com.health.openscale.gui.views.WeightMeasurementView; +import com.health.openscale.gui.measurement.MeasurementView; +import com.health.openscale.gui.measurement.WeightMeasurementView; import java.util.ArrayList; import java.util.List; -public class MeasurementPreferences extends PreferenceFragment implements OnSharedPreferenceChangeListener { +public class MeasurementPreferences extends PreferenceFragmentCompat { private static final String PREFERENCE_KEY_DELETE_ALL = "deleteAll"; private static final String PREFERENCE_KEY_RESET_ORDER = "resetOrder"; private static final String PREFERENCE_KEY_MEASUREMENTS = "measurements"; @@ -60,10 +60,10 @@ public class MeasurementPreferences extends PreferenceFragment implements OnShar private PreferenceCategory measurementCategory; @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + setPreferencesFromResource(R.xml.measurement_preferences, rootKey); - addPreferencesFromResource(R.xml.measurement_preferences); + setHasOptionsMenu(true); Preference deleteAll = findPreference(PREFERENCE_KEY_DELETE_ALL); deleteAll.setOnPreferenceClickListener(new onClickListenerDeleteAll()); @@ -93,39 +93,11 @@ public class MeasurementPreferences extends PreferenceFragment implements OnShar for (MeasurementView measurement : measurementViews) { Preference preference = new MeasurementOrderPreference( getActivity(), measurementCategory, measurement); - preference.setKey(measurement.getSettings().getEnabledKey()); - preference.setDefaultValue(measurement.getSettings().isEnabledIgnoringDependencies()); - preference.setPersistent(true); - preference.setEnabled(measurement.getSettings().areDependenciesEnabled()); - - Drawable icon = measurement.getIcon(); - icon.setColorFilter(measurement.getForegroundColor(), PorterDuff.Mode.SRC_IN); - preference.setIcon(icon); - - preference.setTitle(measurement.getName()); - preference.setSummary(measurement.getPreferenceSummary()); measurementCategory.addPreference(preference); } } - @Override - public void onResume() { - super.onResume(); - getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); - } - - @Override - public void onPause() { - super.onPause(); - getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); - } - - @Override - public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - OpenScale.getInstance().updateScaleData(); - } - private class onClickListenerDeleteAll implements Preference.OnPreferenceClickListener { @Override public boolean onPreferenceClick(Preference preference) { @@ -139,7 +111,7 @@ public class MeasurementPreferences extends PreferenceFragment implements OnShar OpenScale openScale = OpenScale.getInstance(); int selectedUserId = openScale.getSelectedScaleUserId(); - openScale.clearScaleData(selectedUserId); + openScale.clearScaleMeasurements(selectedUserId); Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.info_data_all_deleted), Toast.LENGTH_SHORT).show(); } @@ -165,7 +137,12 @@ public class MeasurementPreferences extends PreferenceFragment implements OnShar GestureDetector gestureDetector; View boundView; - Switch measurementSwitch; + ImageView iconView; + TextView textView; + TextView summaryView; + Switch switchView; + ImageView reorderView; + ImageView settingsView; MeasurementOrderPreference(Context context, PreferenceGroup parent, MeasurementView measurementView) { super(context); @@ -175,7 +152,7 @@ public class MeasurementPreferences extends PreferenceFragment implements OnShar gestureDetector = new GestureDetector(getContext(), this); gestureDetector.setIsLongpressEnabled(true); - setWidgetLayoutResource(R.layout.measurement_preferences_widget_layout); + setLayoutResource(R.layout.preference_measurement_order); } @Override @@ -184,44 +161,74 @@ public class MeasurementPreferences extends PreferenceFragment implements OnShar } @Override - protected void onBindView(View view) { - super.onBindView(view); - boundView = view; + public void onBindViewHolder(PreferenceViewHolder holder) { + super.onBindViewHolder(holder); + boundView = holder.itemView; + + textView = (TextView)holder.findViewById(R.id.textView); + summaryView = (TextView)holder.findViewById(R.id.summaryView); + iconView = (ImageView)holder.findViewById(R.id.iconView); + switchView = (Switch)holder.findViewById(R.id.switchView); + reorderView = (ImageView)holder.findViewById(R.id.reorderView); + settingsView = (ImageView)holder.findViewById(R.id.settingsView); + + textView.setText(measurement.getName()); + summaryView.setText(measurement.getPreferenceSummary()); + Drawable icon = measurement.getIcon(); + icon.setColorFilter(measurement.getForegroundColor(), PorterDuff.Mode.SRC_IN); + iconView.setImageDrawable(icon); + + switchView.setChecked(measurement.getSettings().isEnabledIgnoringDependencies()); + + setKey(measurement.getSettings().getEnabledKey()); + setDefaultValue(measurement.getSettings().isEnabledIgnoringDependencies()); + setPersistent(true); + + setEnableView(measurement.getSettings().areDependenciesEnabled() && switchView.isChecked()); - measurementSwitch = view.findViewById(R.id.measurement_switch); if (measurement instanceof WeightMeasurementView) { - measurementSwitch.setVisibility(View.INVISIBLE); + switchView.setVisibility(View.INVISIBLE); + } else { + switchView.setVisibility(View.VISIBLE); } - else { - measurementSwitch.setChecked(measurement.getSettings().isEnabledIgnoringDependencies()); - measurementSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + + switchView.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (buttonView.isPressed()) { persistBoolean(isChecked); + setEnableView(isChecked); + for (int i = 0; i < getParent().getPreferenceCount(); ++i) { - MeasurementOrderPreference preference = - (MeasurementOrderPreference) getParent().getPreference(i); + MeasurementOrderPreference preference = (MeasurementOrderPreference) getParent().getPreference(i); preference.setEnabled(preference.measurement.getSettings().areDependenciesEnabled()); } } - }); - } + } + }); - if (!measurement.hasExtraPreferences()) { - view.findViewById(R.id.measurement_switch_separator).setVisibility(View.GONE); - } - - TypedValue outValue = new TypedValue(); - getActivity().getTheme().resolveAttribute(R.attr.selectableItemBackground, outValue, true); - boundView.setBackgroundResource(outValue.resourceId); - - view.setOnTouchListener(new View.OnTouchListener() { + boundView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return gestureDetector.onTouchEvent(event); } }); - view.setOnDragListener(new onDragListener()); + + boundView.setOnDragListener(new onDragListener()); + } + + private void setEnableView(boolean status) { + if(status) { + textView.setEnabled(true); + summaryView.setEnabled(true); + reorderView.setEnabled(true); + settingsView.setEnabled(true); + } else { + textView.setEnabled(false); + summaryView.setEnabled(false); + reorderView.setEnabled(false); + settingsView.setEnabled(false); + } } @Override @@ -239,8 +246,8 @@ public class MeasurementPreferences extends PreferenceFragment implements OnShar boundView.setPressed(false); if (!measurement.hasExtraPreferences()) { - if (measurementSwitch.getVisibility() == View.VISIBLE) { - measurementSwitch.toggle(); + if (switchView.getVisibility() == View.VISIBLE) { + switchView.toggle(); } return true; } @@ -250,40 +257,11 @@ public class MeasurementPreferences extends PreferenceFragment implements OnShar return true; } - final PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(getActivity()); + // HACK to pass an object using navigation controller + MeasurementDetailPreferences.setMeasurementView(measurement); - // Register as an observer so that the loop to getItem() below will find the new - // preference screen added at the end. The add is done on another thread so we must - // wait for it to complete. - final ListAdapter adapter = getPreferenceScreen().getRootAdapter(); - adapter.registerDataSetObserver(new DataSetObserver() { - @Override - public void onChanged() { - adapter.unregisterDataSetObserver(this); - - // Simulate a click to have the preference screen open - for (int i = adapter.getCount() - 1; i >= 0; --i) { - if (adapter.getItem(i) == screen) { - getPreferenceScreen().onItemClick(null, null, i, 0); - break; - } - } - - // Remove the preference when the dialog is dismissed - Dialog dialog = screen.getDialog(); - dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { - @Override - public void onDismiss(DialogInterface dialog) { - screen.onDismiss(dialog); - getPreferenceScreen().removePreference(screen); - setSummary(measurement.getPreferenceSummary()); - } - }); - } - }); - - getPreferenceScreen().addPreference(screen); - measurement.prepareExtraPreferencesScreen(screen); + NavDirections action = MeasurementPreferencesDirections.actionNavMeasurementPreferencesToNavMeasurementDetailPreferences(); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigate(action); return true; } @@ -323,84 +301,44 @@ public class MeasurementPreferences extends PreferenceFragment implements OnShar } private class onDragListener implements View.OnDragListener { - Drawable background = null; - // background may be set to null, thus the extra boolean - boolean hasBackground = false; - - private MeasurementOrderPreference castLocalState(DragEvent event) { - return (MeasurementOrderPreference) event.getLocalState(); - } - - private boolean isDraggedView(View view, DragEvent event) { - return castLocalState(event).boundView == view; - } - - private void setTemporaryBackgroundColor(View view, int color) { - if (!hasBackground) { - background = view.getBackground(); - hasBackground = true; - view.setBackgroundColor(color); - } - } - - private void restoreBackground(View view) { - if (hasBackground) { - view.setBackground(background); - background = null; - hasBackground = false; - } - } - @Override public boolean onDrag(View view, DragEvent event) { switch (event.getAction()) { - case DragEvent.ACTION_DRAG_STARTED: - break; - case DragEvent.ACTION_DRAG_ENTERED: - if (!isDraggedView(view, event)) { - setTemporaryBackgroundColor(view, Color.LTGRAY); - } - break; - case DragEvent.ACTION_DRAG_EXITED: - if (!isDraggedView(view, event)) { - restoreBackground(view); - } - break; case DragEvent.ACTION_DROP: - MeasurementOrderPreference draggedPref = castLocalState(event); - PreferenceGroup group = draggedPref.getParent(); - - ArrayList preferences = new ArrayList<>(); - for (int i = 0; i < group.getPreferenceCount(); ++i) { - MeasurementOrderPreference pref = (MeasurementOrderPreference) group.getPreference(i); - // Add all preferences except the dragged one - if (pref != draggedPref) { - preferences.add(pref); - } - // When we find the view that is the drop target use add(index, ...). - // This will add the dragged preference before the drop if dragged upwards, - // and after if dragged downwards. - if (pref.boundView == view) { - preferences.add(i, draggedPref); - } - } + MeasurementOrderPreference draggedPref = (MeasurementOrderPreference) event.getLocalState(); ArrayList measurementViews = new ArrayList<>(); - // Re-add all preferences in the new order - group.removeAll(); - for (MeasurementOrderPreference p : preferences) { - p.setOrder(DEFAULT_ORDER); - group.addPreference(p); - measurementViews.add(p.measurement); + for (int i = 0; i < measurementCategory.getPreferenceCount(); i++) { + MeasurementOrderPreference pref = (MeasurementOrderPreference) measurementCategory.getPreference(i); + + if (pref != draggedPref) { + measurementViews.add(pref.measurement); + } + + if (pref.boundView == view) { + measurementViews.add(draggedPref.measurement); + } } + + measurementCategory.removeAll(); + + for (MeasurementView measurement : measurementViews) { + Preference preference = new MeasurementOrderPreference( + getActivity(), measurementCategory, measurement); + + measurementCategory.addPreference(preference); + } + MeasurementView.saveMeasurementViewsOrder(getContext(), measurementViews); break; - case DragEvent.ACTION_DRAG_ENDED: - restoreBackground(view); - break; } return true; } } } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.clear(); + } } 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 index 21f82958..925ad636 100644 --- 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 @@ -19,23 +19,20 @@ import android.content.ComponentName; 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.view.Menu; +import android.view.MenuInflater; + +import androidx.fragment.app.DialogFragment; +import androidx.preference.CheckBoxPreference; +import androidx.preference.MultiSelectListPreference; +import androidx.preference.Preference; +import androidx.preference.PreferenceFragmentCompat; import com.health.openscale.R; import com.health.openscale.core.alarm.AlarmHandler; import com.health.openscale.core.alarm.ReminderBootReceiver; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - -public class ReminderPreferences extends PreferenceFragment +public class ReminderPreferences extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener { public static final String PREFERENCE_KEY_REMINDER_NOTIFY_TEXT = "reminderNotifyText"; @@ -46,31 +43,38 @@ public class ReminderPreferences extends PreferenceFragment private CheckBoxPreference reminderEnable; @Override - public void onCreate(Bundle savedInstanceState) - { - super.onCreate(savedInstanceState); + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + setPreferencesFromResource(R.xml.reminder_preferences, rootKey); - addPreferencesFromResource(R.xml.reminder_preferences); + setHasOptionsMenu(true); reminderEnable = (CheckBoxPreference) findPreference(PREFERENCE_KEY_REMINDER_ENABLE); + final MultiSelectListPreference prefDays = findPreference("reminderWeekdays"); + + prefDays.setSummaryProvider(new Preference.SummaryProvider() { + @Override + public CharSequence provideSummary(MultiSelectListPreference preference) { + return preference.getValues().toString(); + } + }); + 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)); - } + @Override + public void onDisplayPreferenceDialog(Preference preference) { + DialogFragment dialogFragment = null; + + if (preference instanceof TimePreference) { + dialogFragment = TimePreferenceDialog.newInstance(preference.getKey()); } - else - { - updatePrefSummary(p); + + if (dialogFragment != null) { + dialogFragment.setTargetFragment(this, 0); + dialogFragment.show(getParentFragmentManager(), "timePreferenceDialog"); + } else { + super.onDisplayPreferenceDialog(preference); } } @@ -91,7 +95,6 @@ public class ReminderPreferences extends PreferenceFragment @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - updatePrefSummary(findPreference(key)); updateAlarmPreferences(); } @@ -115,43 +118,9 @@ public class ReminderPreferences extends PreferenceFragment } } - 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].toString())) currentEntries.add(entries[i].toString()); - } - - p.setSummary(currentEntries.toString()); - } + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.clear(); } } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/TimePreference.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/TimePreference.java new file mode 100644 index 00000000..e4539043 --- /dev/null +++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/TimePreference.java @@ -0,0 +1,89 @@ +/* + * Copyright (C) 2020 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.Context; +import android.content.res.TypedArray; +import android.text.format.DateFormat; +import android.util.AttributeSet; + +import androidx.preference.DialogPreference; + +import com.health.openscale.R; + +import java.util.Calendar; + +public class TimePreference extends DialogPreference { + + private long timeInMillis; + + public TimePreference(Context context) { + this(context, null); + } + + public TimePreference(Context context, AttributeSet attrs) { + this(context, attrs, R.attr.preferenceStyle); + } + + public TimePreference(Context context, AttributeSet attrs, int defStyleAttr) { + this(context, attrs, defStyleAttr, defStyleAttr); + } + + public TimePreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + + } + + public long getTimeInMillis() { + return timeInMillis; + } + + public void setTimeInMillis(long timeInMillis) { + this.timeInMillis = timeInMillis; + + persistLong(this.timeInMillis); + } + + @Override + protected Object onGetDefaultValue(TypedArray a, int index) { + Calendar defaultTime = Calendar.getInstance(); + defaultTime.set(Calendar.HOUR_OF_DAY, 16); + defaultTime.set(Calendar.MINUTE, 0); + + return defaultTime.getTimeInMillis(); + } + + @Override + public int getDialogLayoutResource() { + return R.layout.preference_timepicker; + } + + + @Override + protected void onSetInitialValue(boolean restore, Object defaultValue) { + setTimeInMillis(restore ? getPersistedLong(timeInMillis) : (long) defaultValue); + } + + @Override + public CharSequence getSummary() { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(timeInMillis); + + return (DateFormat.getTimeFormat(getContext()).format(calendar.getTime())); + } + +} \ No newline at end of file diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/TimePreferenceDialog.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/TimePreferenceDialog.java index afff6987..039b35f6 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/preferences/TimePreferenceDialog.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/TimePreferenceDialog.java @@ -1,112 +1,100 @@ -/* 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 -*/ +/* + * Copyright (C) 2020 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.Context; -import android.content.res.TypedArray; -import android.preference.DialogPreference; +import android.os.Build; +import android.os.Bundle; import android.text.format.DateFormat; -import android.util.AttributeSet; import android.view.View; import android.widget.TimePicker; +import androidx.preference.DialogPreference; +import androidx.preference.PreferenceDialogFragmentCompat; + import com.health.openscale.R; import java.util.Calendar; -public class TimePreferenceDialog extends DialogPreference { +public class TimePreferenceDialog extends PreferenceDialogFragmentCompat { private Calendar calendar; - private TimePicker picker = null; + private TimePicker timePicker; - public TimePreferenceDialog(Context context) { - this(context, null); + public static TimePreferenceDialog newInstance(String key) { + final TimePreferenceDialog fragment = new TimePreferenceDialog(); + final Bundle b = new Bundle(1); + b.putString(ARG_KEY, key); + fragment.setArguments(b); + + return fragment; } - public TimePreferenceDialog(Context context, AttributeSet attrs) { - this(context, attrs, android.R.attr.dialogPreferenceStyle); - } + @Override + protected void onBindDialogView(View view) { + super.onBindDialogView(view); - public TimePreferenceDialog(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - - setPositiveButtonText(R.string.label_ok); - setNegativeButtonText(R.string.label_cancel); - setDialogTitle(null); + timePicker = view.findViewById(R.id.timePicker); calendar = Calendar.getInstance(); + + Long timeInMillis = null; + DialogPreference preference = getPreference(); + + if (preference instanceof TimePreference) { + TimePreference timePreference = (TimePreference) preference; + timeInMillis = timePreference.getTimeInMillis(); + } + + if (timeInMillis != null) { + calendar.setTimeInMillis(timeInMillis); + boolean is24hour = DateFormat.is24HourFormat(getContext()); + + timePicker.setIs24HourView(is24hour); + timePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY)); + timePicker.setCurrentMinute(calendar.get(Calendar.MINUTE)); + } } @Override - protected View onCreateDialogView() { - picker = new TimePicker(getContext()); - picker.setIs24HourView(android.text.format.DateFormat.is24HourFormat(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); - + public void onDialogClosed(boolean positiveResult) { if (positiveResult) { - calendar.set(Calendar.HOUR_OF_DAY, picker.getCurrentHour()); - calendar.set(Calendar.MINUTE, picker.getCurrentMinute()); + int hours; + int minutes; - 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())); + if (Build.VERSION.SDK_INT >= 23) { + hours = timePicker.getHour(); + minutes = timePicker.getMinute(); } else { - calendar.setTimeInMillis(Long.parseLong(getPersistedString((String) defaultValue))); + hours = timePicker.getCurrentHour(); + minutes = timePicker.getCurrentMinute(); } - } 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; + calendar.set(Calendar.HOUR_OF_DAY, hours); + calendar.set(Calendar.MINUTE, minutes); + + long timeInMillis = calendar.getTimeInMillis(); + + DialogPreference preference = getPreference(); + if (preference instanceof TimePreference) { + TimePreference timePreference = ((TimePreference) preference); + if (timePreference.callChangeListener(timeInMillis)) { + timePreference.setTimeInMillis(timeInMillis); + timePreference.setSummary(DateFormat.getTimeFormat(getContext()).format(calendar.getTime())); + } + } } - return DateFormat.getTimeFormat(getContext()).format(calendar.getTime()); } -} \ No newline at end of file +} diff --git a/android_app/app/src/main/java/com/health/openscale/gui/activities/UserSettingsActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/UserSettingsFragment.java similarity index 83% rename from android_app/app/src/main/java/com/health/openscale/gui/activities/UserSettingsActivity.java rename to android_app/app/src/main/java/com/health/openscale/gui/preferences/UserSettingsFragment.java index abcd142e..e1346247 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/activities/UserSettingsActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/UserSettingsFragment.java @@ -13,28 +13,31 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.activities; +package com.health.openscale.gui.preferences; import android.app.AlertDialog; import android.app.DatePickerDialog; import android.content.Context; import android.content.DialogInterface; -import android.content.Intent; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Bundle; -import androidx.core.graphics.drawable.DrawableCompat; -import androidx.appcompat.widget.Toolbar; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; +import android.view.ViewGroup; import android.widget.DatePicker; import android.widget.EditText; import android.widget.RadioGroup; import android.widget.Spinner; import android.widget.Toast; +import androidx.core.graphics.drawable.DrawableCompat; +import androidx.fragment.app.Fragment; +import androidx.navigation.Navigation; + import com.health.openscale.R; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleUser; @@ -45,12 +48,10 @@ import java.util.Calendar; import java.util.Date; import java.util.List; -public class UserSettingsActivity extends BaseAppCompatActivity { - public static final String EXTRA_ID = "id"; - public static final String EXTRA_MODE = "mode"; +public class UserSettingsFragment extends Fragment { + public enum USER_SETTING_MODE {ADD, EDIT}; - public static final int ADD_USER_REQUEST = 0; - public static final int EDIT_USER_REQUEST = 1; + private USER_SETTING_MODE mode = USER_SETTING_MODE.ADD; private Date birthday = new Date(); private Date goal_date = new Date(); @@ -71,29 +72,29 @@ public class UserSettingsActivity extends BaseAppCompatActivity { private Context context; @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View root = inflater.inflate(R.layout.fragment_usersettings, container, false); + context = getContext(); - setContentView(R.layout.activity_usersettings); - context = this; + setHasOptionsMenu(true); - Toolbar toolbar = findViewById(R.id.userEntryToolbar); - setSupportActionBar(toolbar); + if (getArguments() != null) { + mode = UserSettingsFragmentArgs.fromBundle(getArguments()).getMode(); + } else { + mode = USER_SETTING_MODE.ADD; + } - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getSupportActionBar().setTitle(R.string.label_add_user); + txtUserName = root.findViewById(R.id.txtUserName); + txtBodyHeight = root.findViewById(R.id.txtBodyHeight); + radioScaleUnit = root.findViewById(R.id.groupScaleUnit); + radioGender = root.findViewById(R.id.groupGender); + radioMeasurementUnit = root.findViewById(R.id.groupMeasureUnit); + spinnerActivityLevel = root.findViewById(R.id.spinnerActivityLevel); + txtInitialWeight = root.findViewById(R.id.txtInitialWeight); + txtGoalWeight = root.findViewById(R.id.txtGoalWeight); - txtUserName = findViewById(R.id.txtUserName); - txtBodyHeight = findViewById(R.id.txtBodyHeight); - radioScaleUnit = findViewById(R.id.groupScaleUnit); - radioGender = findViewById(R.id.groupGender); - radioMeasurementUnit = findViewById(R.id.groupMeasureUnit); - spinnerActivityLevel = findViewById(R.id.spinnerActivityLevel); - txtInitialWeight = findViewById(R.id.txtInitialWeight); - txtGoalWeight = findViewById(R.id.txtGoalWeight); - - txtBirthday = findViewById(R.id.txtBirthday); - txtGoalDate = findViewById(R.id.txtGoalDate); + txtBirthday = root.findViewById(R.id.txtBirthday); + txtGoalDate = root.findViewById(R.id.txtGoalDate); txtBodyHeight.setHint(getResources().getString(R.string.info_enter_value_in) + " " + Converters.MeasureUnit.CM.toString()); txtInitialWeight.setHint(getResources().getString(R.string.info_enter_value_in) + " " + Converters.WeightUnit.KG.toString()); @@ -175,11 +176,13 @@ public class UserSettingsActivity extends BaseAppCompatActivity { txtBodyHeight.setHint(getResources().getString(R.string.info_enter_value_in) + " " + measure_unit.toString()); } }); + + return root; } @Override - public boolean onCreateOptionsMenu(Menu menu) { - MenuInflater inflater = getMenuInflater(); + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.clear(); inflater.inflate(R.menu.userentry_menu, menu); // Apply a tint to all icons in the toolbar @@ -203,15 +206,17 @@ public class UserSettingsActivity extends BaseAppCompatActivity { MenuItem deleteButton = menu.findItem(R.id.deleteButton); - if (getIntent().getExtras().getInt(EXTRA_MODE) == EDIT_USER_REQUEST) { - editMode(); - deleteButton.setVisible(true); - } - else { - deleteButton.setVisible(false); + switch (mode) { + case ADD: + deleteButton.setVisible(false); + break; + case EDIT: + editMode(); + deleteButton.setVisible(true); + break; } - return super.onCreateOptionsMenu(menu); + super.onCreateOptionsMenu(menu, inflater); } @Override @@ -219,22 +224,18 @@ public class UserSettingsActivity extends BaseAppCompatActivity { switch (item.getItemId()) { case R.id.saveButton: if (saveUserData()) { - Intent returnIntent = new Intent(); - setResult(RESULT_OK, returnIntent); - - finish(); + if (getActivity().findViewById(R.id.nav_host_fragment) != null){ + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).getPreviousBackStackEntry().getSavedStateHandle().set("update", true); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigateUp(); + } else { + getActivity().finish(); + } } return true; case R.id.deleteButton: deleteUser(); return true; - - // Override the default behaviour in order to return to the correct fragment - // (e.g. the table view) and not always go to the overview. - case android.R.id.home: - onBackPressed(); - return true; } return super.onOptionsItemSelected(item); @@ -242,14 +243,12 @@ public class UserSettingsActivity extends BaseAppCompatActivity { private void editMode() { - int id = getIntent().getExtras().getInt(EXTRA_ID); + int id = UserSettingsFragmentArgs.fromBundle(getArguments()).getUserId(); OpenScale openScale = OpenScale.getInstance(); ScaleUser scaleUser = openScale.getScaleUser(id); - getSupportActionBar().setTitle(scaleUser.getUserName()); - birthday = scaleUser.getBirthday(); goal_date = scaleUser.getGoalDate(); @@ -354,12 +353,12 @@ public class UserSettingsActivity extends BaseAppCompatActivity { deleteAllDialog.setPositiveButton(getResources().getString(R.string.label_yes), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { - int userId = getIntent().getExtras().getInt(EXTRA_ID); + int userId = UserSettingsFragmentArgs.fromBundle(getArguments()).getUserId(); OpenScale openScale = OpenScale.getInstance(); boolean isSelected = openScale.getSelectedScaleUserId() == userId; - openScale.clearScaleData(userId); + openScale.clearScaleMeasurements(userId); openScale.deleteScaleUser(userId); if (isSelected) { @@ -373,12 +372,8 @@ public class UserSettingsActivity extends BaseAppCompatActivity { openScale.selectScaleUser(lastUserId); } - openScale.updateScaleData(); - - Intent returnIntent = new Intent(); - setResult(RESULT_OK, returnIntent); - - finish(); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).getPreviousBackStackEntry().getSavedStateHandle().set("update", true); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigateUp(); } }); @@ -451,17 +446,18 @@ public class UserSettingsActivity extends BaseAppCompatActivity { scaleUser.setGoalWeight(Converters.toKilogram(goal_weight, scale_unit)); scaleUser.setGoalDate(goal_date); - if (getIntent().getExtras().getInt(EXTRA_MODE) == EDIT_USER_REQUEST) { - int id = getIntent().getExtras().getInt(EXTRA_ID); - scaleUser.setId(id); - openScale.updateScaleUser(scaleUser); - } else { - int id = openScale.addScaleUser(scaleUser); - scaleUser.setId(id); + switch (mode) { + case ADD: + int id = openScale.addScaleUser(scaleUser); + scaleUser.setId(id); + break; + case EDIT: + scaleUser.setId(UserSettingsFragmentArgs.fromBundle(getArguments()).getUserId()); + openScale.updateScaleUser(scaleUser); + break; } openScale.selectScaleUser(scaleUser.getId()); - openScale.updateScaleData(); return true; } 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 index 6bb98b24..450fd51e 100644 --- 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 @@ -17,41 +17,49 @@ package com.health.openscale.gui.preferences; import android.content.Context; -import android.content.Intent; import android.os.Bundle; -import android.preference.Preference; -import android.preference.PreferenceCategory; -import android.preference.PreferenceFragment; import android.util.TypedValue; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; import android.view.View; +import android.view.ViewGroup; import android.widget.RadioButton; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.lifecycle.Observer; +import androidx.navigation.Navigation; +import androidx.preference.Preference; +import androidx.preference.PreferenceCategory; +import androidx.preference.PreferenceFragmentCompat; +import androidx.preference.PreferenceViewHolder; + import com.health.openscale.R; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleUser; -import com.health.openscale.gui.activities.UserSettingsActivity; -import static android.app.Activity.RESULT_OK; - -public class UsersPreferences extends PreferenceFragment { +public class UsersPreferences extends PreferenceFragmentCompat { private static final String PREFERENCE_KEY_ADD_USER = "addUser"; private static final String PREFERENCE_KEY_USERS = "users"; private PreferenceCategory users; @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + setPreferencesFromResource(R.xml.users_preferences, rootKey); - addPreferencesFromResource(R.xml.users_preferences); + setHasOptionsMenu(true); Preference addUser = findPreference(PREFERENCE_KEY_ADD_USER); addUser.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { - Intent intent = new Intent(preference.getContext(), UserSettingsActivity.class); - intent.putExtra(UserSettingsActivity.EXTRA_MODE, UserSettingsActivity.ADD_USER_REQUEST); - startActivityForResult(intent, UserSettingsActivity.ADD_USER_REQUEST); + UsersPreferencesDirections.ActionNavUserPreferencesToNavUsersettings action = UsersPreferencesDirections.actionNavUserPreferencesToNavUsersettings(); + action.setMode(UserSettingsFragment.USER_SETTING_MODE.ADD); + action.setTitle(getString(R.string.label_add_user)); + + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigate(action); return true; } }); @@ -60,6 +68,24 @@ public class UsersPreferences extends PreferenceFragment { updateUserPreferences(); } + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + + View view = super.onCreateView(inflater, container, savedInstanceState); + + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).getCurrentBackStackEntry().getSavedStateHandle().getLiveData("update", false).observe(getViewLifecycleOwner(), new Observer() { + @Override + public void onChanged(Boolean aBoolean) { + if (aBoolean) { + updateUserPreferences(); + } + } + }); + + return view; + } + private void updateUserPreferences() { users.removeAll(); for (ScaleUser scaleUser : OpenScale.getInstance().getScaleUserList()) { @@ -67,17 +93,6 @@ public class UsersPreferences extends PreferenceFragment { } } - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - if (resultCode != RESULT_OK) { - return; - } - if (requestCode == UserSettingsActivity.ADD_USER_REQUEST - || requestCode == UserSettingsActivity.EDIT_USER_REQUEST) { - updateUserPreferences(); - } - } - class UserPreference extends Preference { PreferenceCategory preferenceCategory; ScaleUser scaleUser; @@ -94,24 +109,25 @@ public class UsersPreferences extends PreferenceFragment { } @Override - protected void onBindView(View view) { - super.onBindView(view); + public void onBindViewHolder(PreferenceViewHolder holder) { + super.onBindViewHolder(holder); - view.setOnClickListener(new View.OnClickListener() { + holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Intent intent = new Intent(getActivity(), UserSettingsActivity.class); - intent.putExtra(UserSettingsActivity.EXTRA_MODE, UserSettingsActivity.EDIT_USER_REQUEST); - intent.putExtra(UserSettingsActivity.EXTRA_ID, scaleUser.getId()); - startActivityForResult(intent, UserSettingsActivity.EDIT_USER_REQUEST); + UsersPreferencesDirections.ActionNavUserPreferencesToNavUsersettings action = UsersPreferencesDirections.actionNavUserPreferencesToNavUsersettings(); + action.setMode(UserSettingsFragment.USER_SETTING_MODE.EDIT); + action.setTitle(scaleUser.getUserName()); + action.setUserId(scaleUser.getId()); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigate(action); } }); TypedValue outValue = new TypedValue(); getActivity().getTheme().resolveAttribute(R.attr.selectableItemBackground, outValue, true); - view.setBackgroundResource(outValue.resourceId); + holder.itemView.setBackgroundResource(outValue.resourceId); - radioButton = view.findViewById(R.id.user_radio_button); + radioButton = holder.itemView.findViewById(R.id.user_radio_button); radioButton.setChecked(scaleUser.getId() == OpenScale.getInstance().getSelectedScaleUserId()); radioButton.setOnClickListener(new View.OnClickListener() { @@ -132,4 +148,9 @@ public class UsersPreferences extends PreferenceFragment { radioButton.setChecked(checked); } } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.clear(); + } } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/activities/AppIntroActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/slides/AppIntroActivity.java similarity index 70% rename from android_app/app/src/main/java/com/health/openscale/gui/activities/AppIntroActivity.java rename to android_app/app/src/main/java/com/health/openscale/gui/slides/AppIntroActivity.java index 439bd574..09a9d8df 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/activities/AppIntroActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/slides/AppIntroActivity.java @@ -13,24 +13,15 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.activities; +package com.health.openscale.gui.slides; -import android.content.Intent; import android.os.Bundle; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; -import com.github.paolorotolo.appintro.AppIntro; +import com.github.appintro.AppIntro; import com.health.openscale.R; -import com.health.openscale.core.OpenScale; -import com.health.openscale.gui.slides.BluetoothIntroSlide; -import com.health.openscale.gui.slides.MetricsIntroSlide; -import com.health.openscale.gui.slides.OpenSourceIntroSlide; -import com.health.openscale.gui.slides.PrivacyIntroSlide; -import com.health.openscale.gui.slides.SupportIntroSlide; -import com.health.openscale.gui.slides.UserIntroSlide; -import com.health.openscale.gui.slides.WelcomeIntroSlide; public class AppIntroActivity extends AppIntro { @Override @@ -54,14 +45,12 @@ public class AppIntroActivity extends AppIntro { public void onSkipPressed(Fragment currentFragment) { super.onSkipPressed(currentFragment); finish(); - checkUserCreation(); } @Override public void onDonePressed(Fragment currentFragment) { super.onDonePressed(currentFragment); finish(); - checkUserCreation(); } @Override @@ -76,12 +65,4 @@ public class AppIntroActivity extends AppIntro { setWizardMode(true); } } - - private void checkUserCreation() { - if (OpenScale.getInstance().getSelectedScaleUserId() == -1) { - Intent intent = new Intent(this, UserSettingsActivity.class); - intent.putExtra(UserSettingsActivity.EXTRA_MODE, UserSettingsActivity.ADD_USER_REQUEST); - startActivity(intent); - } - } } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/slides/BluetoothIntroSlide.java b/android_app/app/src/main/java/com/health/openscale/gui/slides/BluetoothIntroSlide.java index e09ec3a2..63704c40 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/slides/BluetoothIntroSlide.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/slides/BluetoothIntroSlide.java @@ -29,7 +29,7 @@ import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import com.health.openscale.R; -import com.health.openscale.gui.activities.BluetoothSettingsActivity; +import com.health.openscale.gui.preferences.BluetoothSettingsFragment; public class BluetoothIntroSlide extends Fragment { private static final String ARG_LAYOUT_RES_ID = "layoutResId"; @@ -70,8 +70,9 @@ public class BluetoothIntroSlide extends Fragment { btnSearchScale.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - Intent intent = new Intent(getContext(), BluetoothSettingsActivity.class); - startActivityForResult(intent, BluetoothSettingsActivity.GET_SCALE_REQUEST); + Intent intent = new Intent(getContext(), SlideToNavigationAdapter.class); + intent.putExtra(SlideToNavigationAdapter.EXTRA_MODE, SlideToNavigationAdapter.EXTRA_BLUETOOTH_SETTING_MODE); + startActivityForResult(intent, 100); } }); @@ -80,9 +81,7 @@ public class BluetoothIntroSlide extends Fragment { @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == BluetoothSettingsActivity.GET_SCALE_REQUEST) { - txtFoundDevice.setText(getCurrentDeviceName()); - } + txtFoundDevice.setText(getCurrentDeviceName()); } private final String formatDeviceName(String name, String address) { @@ -95,7 +94,7 @@ public class BluetoothIntroSlide extends Fragment { private String getCurrentDeviceName() { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); return formatDeviceName( - prefs.getString(BluetoothSettingsActivity.PREFERENCE_KEY_BLUETOOTH_DEVICE_NAME, ""), - prefs.getString(BluetoothSettingsActivity.PREFERENCE_KEY_BLUETOOTH_HW_ADDRESS, "")); + prefs.getString(BluetoothSettingsFragment.PREFERENCE_KEY_BLUETOOTH_DEVICE_NAME, ""), + prefs.getString(BluetoothSettingsFragment.PREFERENCE_KEY_BLUETOOTH_HW_ADDRESS, "")); } } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/slides/SlideToNavigationAdapter.java b/android_app/app/src/main/java/com/health/openscale/gui/slides/SlideToNavigationAdapter.java new file mode 100644 index 00000000..2be129b5 --- /dev/null +++ b/android_app/app/src/main/java/com/health/openscale/gui/slides/SlideToNavigationAdapter.java @@ -0,0 +1,73 @@ +/* Copyright (C) 2020 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.slides; + +import android.os.Bundle; +import android.view.View; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.navigation.NavDirections; +import androidx.navigation.Navigation; + +import com.health.openscale.R; +import com.health.openscale.SlideNavigationDirections; + +// TODO HACK to access from AppIntro activity to MainActivity fragments until AppIntro support native Androidx navigation component +public class SlideToNavigationAdapter extends AppCompatActivity { + public static String EXTRA_MODE = "mode"; + public static final int EXTRA_USER_SETTING_MODE = 100; + public static final int EXTRA_BLUETOOTH_SETTING_MODE = 200; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_slidetonavigation); + + // Set a Toolbar to replace the ActionBar. + Toolbar toolbar = findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + toolbar.setNavigationOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + + int mode = getIntent().getExtras().getInt(EXTRA_MODE); + + NavDirections action = null; + + switch (mode) { + case EXTRA_USER_SETTING_MODE: + action = SlideNavigationDirections.actionNavSlideNavigationToNavUsersettings(); + setTitle(R.string.label_add_user); + break; + case EXTRA_BLUETOOTH_SETTING_MODE: + action = SlideNavigationDirections.actionNavSlideNavigationToNavBluetoothsettings(); + setTitle(R.string.label_bluetooth_title); + break; + } + + if (action != null) { + Navigation.findNavController(this, R.id.nav_slide_navigation).navigate(action); + } + } +} diff --git a/android_app/app/src/main/java/com/health/openscale/gui/slides/UserIntroSlide.java b/android_app/app/src/main/java/com/health/openscale/gui/slides/UserIntroSlide.java index 4cef57ec..8fef6747 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/slides/UserIntroSlide.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/slides/UserIntroSlide.java @@ -33,7 +33,6 @@ import androidx.fragment.app.Fragment; import com.health.openscale.R; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleUser; -import com.health.openscale.gui.activities.UserSettingsActivity; import java.util.List; @@ -83,8 +82,8 @@ public class UserIntroSlide extends Fragment{ @Override public void onClick(View view) { - Intent intent = new Intent(getContext(), UserSettingsActivity.class); - intent.putExtra(UserSettingsActivity.EXTRA_MODE, UserSettingsActivity.ADD_USER_REQUEST); + Intent intent = new Intent(getContext(), SlideToNavigationAdapter.class); + intent.putExtra(SlideToNavigationAdapter.EXTRA_MODE, SlideToNavigationAdapter.EXTRA_USER_SETTING_MODE); startActivityForResult(intent, 100); } } @@ -96,6 +95,7 @@ public class UserIntroSlide extends Fragment{ updateTableUsers(); } + private void updateTableUsers() { tblUsers.removeAllViews(); tblUsers.setStretchAllColumns(true); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/fragments/StatisticsFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/statistic/StatisticsFragment.java similarity index 88% rename from android_app/app/src/main/java/com/health/openscale/gui/fragments/StatisticsFragment.java rename to android_app/app/src/main/java/com/health/openscale/gui/statistic/StatisticsFragment.java index cbf562a9..533bea0b 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/fragments/StatisticsFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/statistic/StatisticsFragment.java @@ -14,7 +14,7 @@ * along with this program. If not, see */ -package com.health.openscale.gui.fragments; +package com.health.openscale.gui.statistic; import android.os.Bundle; import android.preference.PreferenceManager; @@ -22,10 +22,10 @@ import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ImageView; import android.widget.TextView; import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; import com.github.mikephil.charting.charts.RadarChart; import com.github.mikephil.charting.components.Legend; @@ -42,24 +42,24 @@ import com.health.openscale.core.datatypes.ScaleMeasurement; import com.health.openscale.core.datatypes.ScaleUser; import com.health.openscale.core.utils.Converters; import com.health.openscale.core.utils.DateTimeHelpers; +import com.health.openscale.gui.measurement.BMIMeasurementView; +import com.health.openscale.gui.measurement.BoneMeasurementView; +import com.health.openscale.gui.measurement.ChartMarkerView; +import com.health.openscale.gui.measurement.FatMeasurementView; +import com.health.openscale.gui.measurement.FloatMeasurementView; +import com.health.openscale.gui.measurement.MeasurementView; +import com.health.openscale.gui.measurement.MeasurementViewSettings; +import com.health.openscale.gui.measurement.MuscleMeasurementView; +import com.health.openscale.gui.measurement.WaterMeasurementView; +import com.health.openscale.gui.measurement.WeightMeasurementView; import com.health.openscale.gui.utils.ColorUtil; -import com.health.openscale.gui.views.BMIMeasurementView; -import com.health.openscale.gui.views.BoneMeasurementView; -import com.health.openscale.gui.views.ChartMarkerView; -import com.health.openscale.gui.views.FatMeasurementView; -import com.health.openscale.gui.views.FloatMeasurementView; -import com.health.openscale.gui.views.MeasurementView; -import com.health.openscale.gui.views.MeasurementViewSettings; -import com.health.openscale.gui.views.MuscleMeasurementView; -import com.health.openscale.gui.views.WaterMeasurementView; -import com.health.openscale.gui.views.WeightMeasurementView; import java.text.DateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.List; -public class StatisticsFragment extends Fragment implements FragmentUpdateListener { +public class StatisticsFragment extends Fragment { private View statisticsView; @@ -83,24 +83,19 @@ public class StatisticsFragment extends Fragment implements FragmentUpdateListen public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { statisticsView = inflater.inflate(R.layout.fragment_statistics, container, false); - for (int id : new int[]{R.id.imageGoalWeight, R.id.imageGoalDiff, R.id.imageDayLeft}) { - ImageView image = statisticsView.findViewById(id); - image.setColorFilter(ColorUtil.getTextColor(statisticsView.getContext())); - } - txtGoalWeight = statisticsView.findViewById(R.id.txtGoalWeight); - txtGoalWeight.setTextColor(ColorUtil.getTextColor(statisticsView.getContext())); + txtGoalWeight.setTextColor(ColorUtil.getTintColor(statisticsView.getContext())); txtGoalDiff = statisticsView.findViewById(R.id.txtGoalDiff); - txtGoalDiff.setTextColor(ColorUtil.getTextColor(statisticsView.getContext())); + txtGoalDiff.setTextColor(ColorUtil.getTintColor(statisticsView.getContext())); txtGoalDayLeft = statisticsView.findViewById(R.id.txtGoalDayLeft); - txtGoalDayLeft.setTextColor(ColorUtil.getTextColor(statisticsView.getContext())); + txtGoalDayLeft.setTextColor(ColorUtil.getTintColor(statisticsView.getContext())); txtLabelGoalWeight = statisticsView.findViewById(R.id.txtLabelGoalWeight); - txtLabelGoalWeight.setTextColor(ColorUtil.getTextColor(statisticsView.getContext())); + txtLabelGoalWeight.setTextColor(ColorUtil.getTintColor(statisticsView.getContext())); txtLabelGoalDiff = statisticsView.findViewById(R.id.txtLabelGoalDiff); - txtLabelGoalDiff.setTextColor(ColorUtil.getTextColor(statisticsView.getContext())); + txtLabelGoalDiff.setTextColor(ColorUtil.getTintColor(statisticsView.getContext())); txtLabelDayLeft = statisticsView.findViewById(R.id.txtLabelDayLeft); - txtLabelDayLeft.setTextColor(ColorUtil.getTextColor(statisticsView.getContext())); + txtLabelDayLeft.setTextColor(ColorUtil.getTintColor(statisticsView.getContext())); viewMeasurementsStatistics = new ArrayList<>(); @@ -122,13 +117,13 @@ public class StatisticsFragment extends Fragment implements FragmentUpdateListen MarkerView mv = new ChartMarkerView(statisticsView.getContext(), R.layout.chart_markerview); radarChartWeek = statisticsView.findViewById(R.id.radarPastWeek); - radarChartWeek.getXAxis().setTextColor(ColorUtil.getTextColor(statisticsView.getContext())); + radarChartWeek.getXAxis().setTextColor(ColorUtil.getTintColor(statisticsView.getContext())); radarChartWeek.getDescription().setEnabled(false); radarChartWeek.getYAxis().setEnabled(false); radarChartWeek.setExtraTopOffset(10); radarChartWeek.setRotationEnabled(false); Legend weekLegend = radarChartWeek.getLegend(); - weekLegend.setTextColor(ColorUtil.getTextColor(statisticsView.getContext())); + weekLegend.setTextColor(ColorUtil.getTintColor(statisticsView.getContext())); weekLegend.setWordWrapEnabled(true); weekLegend.setExtra(legendEntriesWeek); weekLegend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); @@ -136,31 +131,29 @@ public class StatisticsFragment extends Fragment implements FragmentUpdateListen radarChartWeek.setMarker(mv); radarChartMonth = statisticsView.findViewById(R.id.radarPastMonth); - radarChartMonth.getXAxis().setTextColor(ColorUtil.getTextColor(statisticsView.getContext())); + radarChartMonth.getXAxis().setTextColor(ColorUtil.getTintColor(statisticsView.getContext())); radarChartMonth.getDescription().setEnabled(false); radarChartMonth.getYAxis().setEnabled(false); radarChartMonth.setExtraTopOffset(10); radarChartMonth.setRotationEnabled(false); Legend monthLegend = radarChartMonth.getLegend(); - monthLegend.setTextColor(ColorUtil.getTextColor(statisticsView.getContext())); + monthLegend.setTextColor(ColorUtil.getTintColor(statisticsView.getContext())); monthLegend.setWordWrapEnabled(true); monthLegend.setExtra(legendEntriesWeek); monthLegend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); mv.setChartView(radarChartMonth); radarChartMonth.setMarker(mv); - OpenScale.getInstance().registerFragment(this); + OpenScale.getInstance().getScaleMeasurementsLiveData().observe(getViewLifecycleOwner(), new Observer>() { + @Override + public void onChanged(List scaleMeasurements) { + updateOnView(scaleMeasurements); + } + }); return statisticsView; } - @Override - public void onDestroyView() { - OpenScale.getInstance().unregisterFragment(this); - super.onDestroyView(); - } - - @Override public void updateOnView(List scaleMeasurementList) { currentScaleUser = OpenScale.getInstance().getSelectedScaleUser(); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/table/TableFragment.java similarity index 89% rename from android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java rename to android_app/app/src/main/java/com/health/openscale/gui/table/TableFragment.java index 872cc010..540e60d1 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/table/TableFragment.java @@ -13,9 +13,8 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see */ -package com.health.openscale.gui.fragments; +package com.health.openscale.gui.table; -import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; import android.text.SpannableStringBuilder; @@ -29,6 +28,8 @@ import android.widget.TableRow; import android.widget.TextView; import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.navigation.Navigation; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -36,10 +37,10 @@ import androidx.recyclerview.widget.RecyclerView; import com.health.openscale.R; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleMeasurement; -import com.health.openscale.gui.activities.DataEntryActivity; +import com.health.openscale.gui.measurement.MeasurementEntryFragment; +import com.health.openscale.gui.measurement.MeasurementView; +import com.health.openscale.gui.measurement.UserMeasurementView; import com.health.openscale.gui.utils.ColorUtil; -import com.health.openscale.gui.views.MeasurementView; -import com.health.openscale.gui.views.UserMeasurementView; import java.util.ArrayList; import java.util.Calendar; @@ -48,7 +49,7 @@ import java.util.List; import static android.util.TypedValue.COMPLEX_UNIT_DIP; -public class TableFragment extends Fragment implements FragmentUpdateListener { +public class TableFragment extends Fragment { private View tableView; private LinearLayout tableHeaderView; @@ -87,18 +88,16 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { measurement.setUpdateViews(false); } - OpenScale.getInstance().registerFragment(this); + OpenScale.getInstance().getScaleMeasurementsLiveData().observe(getViewLifecycleOwner(), new Observer>() { + @Override + public void onChanged(List scaleMeasurements) { + updateOnView(scaleMeasurements); + } + }); return tableView; } - @Override - public void onDestroyView() { - OpenScale.getInstance().unregisterFragment(this); - super.onDestroyView(); - } - - @Override public void updateOnView(List scaleMeasurementList) { tableHeaderView.removeAllViews(); @@ -111,9 +110,10 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { continue; } + ImageView headerIcon = new ImageView(tableView.getContext()); headerIcon.setImageDrawable(measurement.getIcon()); - headerIcon.setColorFilter(ColorUtil.getTextColor(tableView.getContext())); + headerIcon.setColorFilter(ColorUtil.getTintColor(tableView.getContext())); headerIcon.setLayoutParams(new TableRow.LayoutParams(0, iconHeight, 1)); headerIcon.setScaleType(ImageView.ScaleType.CENTER_INSIDE); @@ -255,10 +255,10 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { row.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Intent intent = new Intent(getContext(), DataEntryActivity.class); - intent.putExtra(DataEntryActivity.EXTRA_ID, measurement.getId()); - intent.putExtra(DataEntryActivity.EXTRA_MODE, DataEntryActivity.VIEW_MEASUREMENT_REQUEST); - startActivity(intent); + TableFragmentDirections.ActionNavTableToNavDataentry action = TableFragmentDirections.actionNavTableToNavDataentry(); + action.setMeasurementId(measurement.getId()); + action.setMode(MeasurementEntryFragment.DATA_ENTRY_MODE.VIEW); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigate(action); } }); } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/utils/ColorUtil.java b/android_app/app/src/main/java/com/health/openscale/gui/utils/ColorUtil.java index 3468d8b0..f83cb7be 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/utils/ColorUtil.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/utils/ColorUtil.java @@ -32,7 +32,7 @@ public class ColorUtil { public static final int COLOR_BLACK = Color.parseColor("#000000"); public static final int[] COLORS = new int[]{COLOR_BLUE, COLOR_VIOLET, COLOR_GREEN, COLOR_ORANGE, COLOR_RED}; - public static int getTextColor(Context context) { + public static int getTintColor(Context context) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); if (prefs.getString("app_theme", "").equals("Dark")) { diff --git a/android_app/app/src/main/java/com/health/openscale/gui/utils/PermissionHelper.java b/android_app/app/src/main/java/com/health/openscale/gui/utils/PermissionHelper.java index 8d01ba21..321e2a77 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/utils/PermissionHelper.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/utils/PermissionHelper.java @@ -16,10 +16,8 @@ package com.health.openscale.gui.utils; import android.Manifest; -import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; -import android.app.Fragment; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothManager; import android.content.Context; @@ -27,12 +25,13 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.location.LocationManager; +import android.os.Build; import android.provider.Settings; import android.widget.Toast; -import com.health.openscale.R; +import androidx.fragment.app.Fragment; -import androidx.core.app.ActivityCompat; +import com.health.openscale.R; import static android.content.Context.LOCATION_SERVICE; @@ -43,53 +42,55 @@ public class PermissionHelper { public final static int ENABLE_BLUETOOTH_REQUEST = 5; - public static boolean requestBluetoothPermission(final Activity activity) { - final BluetoothManager bluetoothManager = (BluetoothManager) activity.getSystemService(Context.BLUETOOTH_SERVICE); + public static boolean requestBluetoothPermission(final Fragment fragment) { + final BluetoothManager bluetoothManager = (BluetoothManager) fragment.getActivity().getSystemService(Context.BLUETOOTH_SERVICE); BluetoothAdapter btAdapter = bluetoothManager.getAdapter(); if (btAdapter == null || !btAdapter.isEnabled()) { - Toast.makeText(activity, "Bluetooth " + activity.getResources().getString(R.string.info_is_not_enable), Toast.LENGTH_SHORT).show(); + Toast.makeText(fragment.getContext(), "Bluetooth " + fragment.getContext().getResources().getString(R.string.info_is_not_enable), Toast.LENGTH_SHORT).show(); if (btAdapter != null) { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); - activity.startActivityForResult(enableBtIntent, ENABLE_BLUETOOTH_REQUEST); + fragment.getActivity().startActivityForResult(enableBtIntent, ENABLE_BLUETOOTH_REQUEST); } return false; } // Check if Bluetooth 4.x is available - if (!activity.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) { - Toast.makeText(activity, "Bluetooth 4.x " + activity.getResources().getString(R.string.info_is_not_available), Toast.LENGTH_SHORT).show(); + if (!fragment.getActivity().getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) { + Toast.makeText(fragment.getContext(), "Bluetooth 4.x " + fragment.getContext().getResources().getString(R.string.info_is_not_available), Toast.LENGTH_SHORT).show(); return false; } - if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (fragment.getContext().checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + AlertDialog.Builder builder = new AlertDialog.Builder(fragment.getActivity()); - builder.setMessage(R.string.permission_bluetooth_info) - .setTitle(R.string.permission_bluetooth_info_title) - .setIcon(R.drawable.ic_preferences_about) - .setPositiveButton(R.string.label_ok, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - dialog.dismiss(); - ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION); - } - }); + builder.setMessage(R.string.permission_bluetooth_info) + .setTitle(R.string.permission_bluetooth_info_title) + .setIcon(R.drawable.ic_preferences_about) + .setPositiveButton(R.string.label_ok, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + dialog.dismiss(); + fragment.requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION); + } + }); - Dialog alertDialog = builder.create(); - alertDialog.setCanceledOnTouchOutside(false); - alertDialog.show(); - return false; + Dialog alertDialog = builder.create(); + alertDialog.setCanceledOnTouchOutside(false); + alertDialog.show(); + return false; + } } return true; } - public static boolean requestLocationServicePermission(final Activity activity) { - LocationManager locationManager = (LocationManager) activity.getSystemService(LOCATION_SERVICE); + public static boolean requestLocationServicePermission(final Fragment fragment) { + LocationManager locationManager = (LocationManager) fragment.getActivity().getSystemService(LOCATION_SERVICE); if (!(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER))) { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); + AlertDialog.Builder builder = new AlertDialog.Builder(fragment.getContext()); builder.setTitle(R.string.permission_bluetooth_info_title); builder.setIcon(R.drawable.ic_preferences_about); builder.setMessage(R.string.permission_location_service_info); @@ -97,7 +98,7 @@ public class PermissionHelper { public void onClick(DialogInterface dialogInterface, int i) { // Show location settings when the user acknowledges the alert dialog Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); - activity.startActivity(intent); + fragment.getActivity().startActivity(intent); } }); @@ -110,21 +111,25 @@ public class PermissionHelper { return true; } - public static boolean requestReadPermission(final Activity activity) { - if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { - ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_ACCESS_READ_STORAGE); - } else { - return true; + public static boolean requestReadPermission(final Fragment fragment) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (fragment.getContext().checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + fragment.requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_ACCESS_READ_STORAGE); + } else { + return true; + } } return false; } - public static boolean requestWritePermission(final Activity activity) { - if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { - ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_ACCESS_WRITE_STORAGE); - } else { - return true; + public static boolean requestWritePermission(final Fragment fragment) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (fragment.getContext().checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + fragment.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_ACCESS_WRITE_STORAGE); + } else { + return true; + } } return false; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/widget/WidgetConfigure.java b/android_app/app/src/main/java/com/health/openscale/gui/widget/WidgetConfigure.java index 539088d6..80cfd502 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/widget/WidgetConfigure.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/widget/WidgetConfigure.java @@ -25,16 +25,17 @@ import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.TableRow; +import androidx.appcompat.app.AppCompatActivity; + import com.health.openscale.R; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleUser; -import com.health.openscale.gui.activities.BaseAppCompatActivity; -import com.health.openscale.gui.views.MeasurementView; +import com.health.openscale.gui.measurement.MeasurementView; import java.util.ArrayList; import java.util.List; -public class WidgetConfigure extends BaseAppCompatActivity { +public class WidgetConfigure extends AppCompatActivity { private int appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; @Override diff --git a/android_app/app/src/main/java/com/health/openscale/gui/widget/WidgetProvider.java b/android_app/app/src/main/java/com/health/openscale/gui/widget/WidgetProvider.java index 72540d90..3fc7cb2e 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/widget/WidgetProvider.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/widget/WidgetProvider.java @@ -33,8 +33,7 @@ import com.health.openscale.R; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleMeasurement; import com.health.openscale.gui.MainActivity; -import com.health.openscale.gui.activities.BaseAppCompatActivity; -import com.health.openscale.gui.views.MeasurementView; +import com.health.openscale.gui.measurement.MeasurementView; import java.text.DateFormat; import java.util.List; @@ -55,7 +54,7 @@ public class WidgetProvider extends AppWidgetProvider { private void updateWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) { // Make sure we use the correct language - context = BaseAppCompatActivity.createBaseContext(context); + context = MainActivity.createBaseContext(context); final int minWidth = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH); @@ -80,9 +79,9 @@ public class WidgetProvider extends AppWidgetProvider { } OpenScale openScale = OpenScale.getInstance(); - ScaleMeasurement latest = openScale.getLatestScaleMeasurement(userId); + ScaleMeasurement latest = openScale.getLastScaleMeasurement(userId); if (latest != null) { - ScaleMeasurement previous = openScale.getTupleScaleData(latest.getId())[0]; + ScaleMeasurement previous = openScale.getTupleOfScaleMeasurement(latest.getId())[0]; measurementView.loadFrom(latest, previous); } diff --git a/android_app/app/src/main/res/drawable-hdpi/appwidget_bg.9.png b/android_app/app/src/main/res/drawable-hdpi/appwidget_bg.9.png deleted file mode 100644 index ae6cec22..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/appwidget_bg.9.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_add.png b/android_app/app/src/main/res/drawable-hdpi/ic_add.png deleted file mode 100644 index c0c2e16d..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_add.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_biceps.png b/android_app/app/src/main/res/drawable-hdpi/ic_biceps.png deleted file mode 100644 index a40b2a1a..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_biceps.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_bluetooth_connection_lost.png b/android_app/app/src/main/res/drawable-hdpi/ic_bluetooth_connection_lost.png deleted file mode 100644 index f7ea2945..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_bluetooth_connection_lost.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_bluetooth_connection_success.png b/android_app/app/src/main/res/drawable-hdpi/ic_bluetooth_connection_success.png deleted file mode 100644 index a48cd523..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_bluetooth_connection_success.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_bluetooth_device_not_supported.png b/android_app/app/src/main/res/drawable-hdpi/ic_bluetooth_device_not_supported.png deleted file mode 100644 index 0504bd9f..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_bluetooth_device_not_supported.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_bluetooth_device_supported.png b/android_app/app/src/main/res/drawable-hdpi/ic_bluetooth_device_supported.png deleted file mode 100644 index 41068a14..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_bluetooth_device_supported.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_bluetooth_disabled.png b/android_app/app/src/main/res/drawable-hdpi/ic_bluetooth_disabled.png deleted file mode 100644 index 90dcedb1..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_bluetooth_disabled.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_bluetooth_searching.png b/android_app/app/src/main/res/drawable-hdpi/ic_bluetooth_searching.png deleted file mode 100644 index 31ba00b7..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_bluetooth_searching.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_bmi.png b/android_app/app/src/main/res/drawable-hdpi/ic_bmi.png deleted file mode 100644 index 13d6ed3c..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_bmi.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_bmr.png b/android_app/app/src/main/res/drawable-hdpi/ic_bmr.png deleted file mode 100644 index eaf3c34d..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_bmr.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_bone.png b/android_app/app/src/main/res/drawable-hdpi/ic_bone.png deleted file mode 100644 index 0a454659..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_bone.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_caliper1.png b/android_app/app/src/main/res/drawable-hdpi/ic_caliper1.png deleted file mode 100644 index 475416db..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_caliper1.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_caliper2.png b/android_app/app/src/main/res/drawable-hdpi/ic_caliper2.png deleted file mode 100644 index bc88a5bd..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_caliper2.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_caliper3.png b/android_app/app/src/main/res/drawable-hdpi/ic_caliper3.png deleted file mode 100644 index b90d9107..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_caliper3.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_calories.png b/android_app/app/src/main/res/drawable-hdpi/ic_calories.png deleted file mode 100644 index 4b6a734d..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_calories.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_chest.png b/android_app/app/src/main/res/drawable-hdpi/ic_chest.png deleted file mode 100644 index a9fb37b1..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_chest.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_comment.png b/android_app/app/src/main/res/drawable-hdpi/ic_comment.png deleted file mode 100644 index 9964abab..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_comment.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_daysleft.png b/android_app/app/src/main/res/drawable-hdpi/ic_daysleft.png deleted file mode 100644 index 9df7f878..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_daysleft.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_delete.png b/android_app/app/src/main/res/drawable-hdpi/ic_delete.png deleted file mode 100644 index 723ec0a1..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_delete.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_difference.png b/android_app/app/src/main/res/drawable-hdpi/ic_difference.png deleted file mode 100644 index 6501a94f..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_difference.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_editable.png b/android_app/app/src/main/res/drawable-hdpi/ic_editable.png deleted file mode 100644 index 1a642090..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_editable.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_expand.png b/android_app/app/src/main/res/drawable-hdpi/ic_expand.png deleted file mode 100644 index 57d91812..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_expand.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_fat.png b/android_app/app/src/main/res/drawable-hdpi/ic_fat.png deleted file mode 100644 index c40d5d0e..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_fat.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_fat_caliper.png b/android_app/app/src/main/res/drawable-hdpi/ic_fat_caliper.png deleted file mode 100644 index bf247a63..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_fat_caliper.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_hip.png b/android_app/app/src/main/res/drawable-hdpi/ic_hip.png deleted file mode 100644 index 7561bbfb..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_hip.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_lastmonth.png b/android_app/app/src/main/res/drawable-hdpi/ic_lastmonth.png deleted file mode 100644 index bd10ea23..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_lastmonth.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_lastweek.png b/android_app/app/src/main/res/drawable-hdpi/ic_lastweek.png deleted file mode 100644 index 8a15b100..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_lastweek.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_launcher_openscale.png b/android_app/app/src/main/res/drawable-hdpi/ic_launcher_openscale.png deleted file mode 100644 index 5f6dfa7a..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_launcher_openscale.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_launcher_openscale_light.png b/android_app/app/src/main/res/drawable-hdpi/ic_launcher_openscale_light.png deleted file mode 100644 index e4e8ad3a..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_launcher_openscale_light.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_launcher_openscale_pro.png b/android_app/app/src/main/res/drawable-hdpi/ic_launcher_openscale_pro.png deleted file mode 100644 index eb4104bd..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_launcher_openscale_pro.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_lbm.png b/android_app/app/src/main/res/drawable-hdpi/ic_lbm.png deleted file mode 100644 index 6e19b30c..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_lbm.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_muscle.png b/android_app/app/src/main/res/drawable-hdpi/ic_muscle.png deleted file mode 100644 index ec9125f6..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_muscle.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_neck.png b/android_app/app/src/main/res/drawable-hdpi/ic_neck.png deleted file mode 100644 index 5ea610f1..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_neck.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_options.png b/android_app/app/src/main/res/drawable-hdpi/ic_options.png deleted file mode 100644 index 2d5f7a38..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_options.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_preference_donate.png b/android_app/app/src/main/res/drawable-hdpi/ic_preference_donate.png deleted file mode 100644 index ba04c871..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_preference_donate.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_about.png b/android_app/app/src/main/res/drawable-hdpi/ic_preferences_about.png deleted file mode 100644 index 3b8f9d49..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_about.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_backup.png b/android_app/app/src/main/res/drawable-hdpi/ic_preferences_backup.png deleted file mode 100644 index d057739a..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_backup.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_bluetooth.png b/android_app/app/src/main/res/drawable-hdpi/ic_preferences_bluetooth.png deleted file mode 100644 index 081832a0..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_bluetooth.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_graph.png b/android_app/app/src/main/res/drawable-hdpi/ic_preferences_graph.png deleted file mode 100644 index 2051f376..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_graph.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_help.png b/android_app/app/src/main/res/drawable-hdpi/ic_preferences_help.png deleted file mode 100644 index 98b05242..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_help.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_home.png b/android_app/app/src/main/res/drawable-hdpi/ic_preferences_home.png deleted file mode 100644 index e9469c27..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_home.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_measurement.png b/android_app/app/src/main/res/drawable-hdpi/ic_preferences_measurement.png deleted file mode 100644 index 01e63fa1..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_measurement.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_nav_graph.png b/android_app/app/src/main/res/drawable-hdpi/ic_preferences_nav_graph.png deleted file mode 100644 index 2051f376..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_nav_graph.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_reminder.png b/android_app/app/src/main/res/drawable-hdpi/ic_preferences_reminder.png deleted file mode 100644 index fe5117e0..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_reminder.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_settings.png b/android_app/app/src/main/res/drawable-hdpi/ic_preferences_settings.png deleted file mode 100644 index 784025d1..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_settings.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_statistics.png b/android_app/app/src/main/res/drawable-hdpi/ic_preferences_statistics.png deleted file mode 100644 index 530fbf7c..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_statistics.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_table.png b/android_app/app/src/main/res/drawable-hdpi/ic_preferences_table.png deleted file mode 100644 index 20b9097e..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_table.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_users.png b/android_app/app/src/main/res/drawable-hdpi/ic_preferences_users.png deleted file mode 100644 index 2500b999..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_preferences_users.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_save.png b/android_app/app/src/main/res/drawable-hdpi/ic_save.png deleted file mode 100644 index 7c6e79d3..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_save.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_show.png b/android_app/app/src/main/res/drawable-hdpi/ic_show.png deleted file mode 100644 index 549b775a..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_show.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_slide_group.png b/android_app/app/src/main/res/drawable-hdpi/ic_slide_group.png deleted file mode 100644 index 52dd6daf..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_slide_group.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_slide_opensource.png b/android_app/app/src/main/res/drawable-hdpi/ic_slide_opensource.png deleted file mode 100644 index 53d93905..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_slide_opensource.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_slide_privacy.png b/android_app/app/src/main/res/drawable-hdpi/ic_slide_privacy.png deleted file mode 100644 index 1792caef..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_slide_privacy.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_slide_support.png b/android_app/app/src/main/res/drawable-hdpi/ic_slide_support.png deleted file mode 100644 index 1d9953ae..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_slide_support.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_target.png b/android_app/app/src/main/res/drawable-hdpi/ic_target.png deleted file mode 100644 index 3a41ee4b..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_target.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_tdee.png b/android_app/app/src/main/res/drawable-hdpi/ic_tdee.png deleted file mode 100644 index 1b59d83c..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_tdee.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_thigh.png b/android_app/app/src/main/res/drawable-hdpi/ic_thigh.png deleted file mode 100644 index 7be1029f..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_thigh.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_user.png b/android_app/app/src/main/res/drawable-hdpi/ic_user.png deleted file mode 100644 index 6656e7d2..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_user.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_visceral_fat.png b/android_app/app/src/main/res/drawable-hdpi/ic_visceral_fat.png deleted file mode 100644 index 53727cdb..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_visceral_fat.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_waist.png b/android_app/app/src/main/res/drawable-hdpi/ic_waist.png deleted file mode 100644 index be735e45..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_waist.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_water.png b/android_app/app/src/main/res/drawable-hdpi/ic_water.png deleted file mode 100644 index 7b977cfb..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_water.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_weight.png b/android_app/app/src/main/res/drawable-hdpi/ic_weight.png deleted file mode 100644 index f8d73c92..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_weight.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_whr.png b/android_app/app/src/main/res/drawable-hdpi/ic_whr.png deleted file mode 100644 index d5679d9b..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_whr.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_whtr.png b/android_app/app/src/main/res/drawable-hdpi/ic_whtr.png deleted file mode 100644 index 26231dce..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_whtr.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_add.png b/android_app/app/src/main/res/drawable-ldpi/ic_add.png deleted file mode 100644 index 241f12a3..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_add.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_biceps.png b/android_app/app/src/main/res/drawable-ldpi/ic_biceps.png deleted file mode 100644 index 435546d8..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_biceps.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_bluetooth_connection_lost.png b/android_app/app/src/main/res/drawable-ldpi/ic_bluetooth_connection_lost.png deleted file mode 100644 index 26d48238..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_bluetooth_connection_lost.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_bluetooth_connection_success.png b/android_app/app/src/main/res/drawable-ldpi/ic_bluetooth_connection_success.png deleted file mode 100644 index 218cfcb4..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_bluetooth_connection_success.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_bluetooth_device_not_supported.png b/android_app/app/src/main/res/drawable-ldpi/ic_bluetooth_device_not_supported.png deleted file mode 100644 index 9cc1812c..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_bluetooth_device_not_supported.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_bluetooth_device_supported.png b/android_app/app/src/main/res/drawable-ldpi/ic_bluetooth_device_supported.png deleted file mode 100644 index 9a83765b..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_bluetooth_device_supported.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_bluetooth_disabled.png b/android_app/app/src/main/res/drawable-ldpi/ic_bluetooth_disabled.png deleted file mode 100644 index 4c5d3de1..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_bluetooth_disabled.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_bluetooth_searching.png b/android_app/app/src/main/res/drawable-ldpi/ic_bluetooth_searching.png deleted file mode 100644 index 48fe2d24..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_bluetooth_searching.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_bmi.png b/android_app/app/src/main/res/drawable-ldpi/ic_bmi.png deleted file mode 100644 index ce0ee6e5..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_bmi.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_bmr.png b/android_app/app/src/main/res/drawable-ldpi/ic_bmr.png deleted file mode 100644 index a497d1ab..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_bmr.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_bone.png b/android_app/app/src/main/res/drawable-ldpi/ic_bone.png deleted file mode 100644 index 2f925ae8..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_bone.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_caliper1.png b/android_app/app/src/main/res/drawable-ldpi/ic_caliper1.png deleted file mode 100644 index e4ce43ee..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_caliper1.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_caliper2.png b/android_app/app/src/main/res/drawable-ldpi/ic_caliper2.png deleted file mode 100644 index ce7d22f5..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_caliper2.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_caliper3.png b/android_app/app/src/main/res/drawable-ldpi/ic_caliper3.png deleted file mode 100644 index b90be305..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_caliper3.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_calories.png b/android_app/app/src/main/res/drawable-ldpi/ic_calories.png deleted file mode 100644 index 7cb8b0e0..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_calories.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_chest.png b/android_app/app/src/main/res/drawable-ldpi/ic_chest.png deleted file mode 100644 index fb9e0dd3..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_chest.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_comment.png b/android_app/app/src/main/res/drawable-ldpi/ic_comment.png deleted file mode 100644 index 3eb8c892..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_comment.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_daysleft.png b/android_app/app/src/main/res/drawable-ldpi/ic_daysleft.png deleted file mode 100644 index 10749296..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_daysleft.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_delete.png b/android_app/app/src/main/res/drawable-ldpi/ic_delete.png deleted file mode 100644 index dd7e82a8..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_delete.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_difference.png b/android_app/app/src/main/res/drawable-ldpi/ic_difference.png deleted file mode 100644 index f9d4305e..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_difference.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_editable.png b/android_app/app/src/main/res/drawable-ldpi/ic_editable.png deleted file mode 100644 index e53a653a..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_editable.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_expand.png b/android_app/app/src/main/res/drawable-ldpi/ic_expand.png deleted file mode 100644 index ca229478..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_expand.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_fat.png b/android_app/app/src/main/res/drawable-ldpi/ic_fat.png deleted file mode 100644 index 89f32170..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_fat.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_fat_caliper.png b/android_app/app/src/main/res/drawable-ldpi/ic_fat_caliper.png deleted file mode 100644 index b85bcac1..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_fat_caliper.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_hip.png b/android_app/app/src/main/res/drawable-ldpi/ic_hip.png deleted file mode 100644 index f3594b6f..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_hip.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_lastmonth.png b/android_app/app/src/main/res/drawable-ldpi/ic_lastmonth.png deleted file mode 100644 index ede13ece..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_lastmonth.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_lastweek.png b/android_app/app/src/main/res/drawable-ldpi/ic_lastweek.png deleted file mode 100644 index d38f60eb..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_lastweek.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_launcher_openscale.png b/android_app/app/src/main/res/drawable-ldpi/ic_launcher_openscale.png deleted file mode 100644 index 2eb78d06..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_launcher_openscale.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_launcher_openscale_light.png b/android_app/app/src/main/res/drawable-ldpi/ic_launcher_openscale_light.png deleted file mode 100644 index f024cd73..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_launcher_openscale_light.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_launcher_openscale_pro.png b/android_app/app/src/main/res/drawable-ldpi/ic_launcher_openscale_pro.png deleted file mode 100644 index 98c7c018..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_launcher_openscale_pro.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_lbm.png b/android_app/app/src/main/res/drawable-ldpi/ic_lbm.png deleted file mode 100644 index e6726f21..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_lbm.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_muscle.png b/android_app/app/src/main/res/drawable-ldpi/ic_muscle.png deleted file mode 100644 index 04d66a81..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_muscle.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_neck.png b/android_app/app/src/main/res/drawable-ldpi/ic_neck.png deleted file mode 100644 index 32371264..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_neck.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_options.png b/android_app/app/src/main/res/drawable-ldpi/ic_options.png deleted file mode 100644 index c3c9517a..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_options.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_preference_donate.png b/android_app/app/src/main/res/drawable-ldpi/ic_preference_donate.png deleted file mode 100644 index cb47f6d7..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_preference_donate.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_about.png b/android_app/app/src/main/res/drawable-ldpi/ic_preferences_about.png deleted file mode 100644 index 17da8d23..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_about.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_backup.png b/android_app/app/src/main/res/drawable-ldpi/ic_preferences_backup.png deleted file mode 100644 index cf0f3d06..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_backup.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_bluetooth.png b/android_app/app/src/main/res/drawable-ldpi/ic_preferences_bluetooth.png deleted file mode 100644 index bd59ba52..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_bluetooth.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_graph.png b/android_app/app/src/main/res/drawable-ldpi/ic_preferences_graph.png deleted file mode 100644 index 65d8f7c1..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_graph.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_help.png b/android_app/app/src/main/res/drawable-ldpi/ic_preferences_help.png deleted file mode 100644 index fe2ea70f..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_help.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_home.png b/android_app/app/src/main/res/drawable-ldpi/ic_preferences_home.png deleted file mode 100644 index d22eb7b4..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_home.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_measurement.png b/android_app/app/src/main/res/drawable-ldpi/ic_preferences_measurement.png deleted file mode 100644 index 5d0b2b3a..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_measurement.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_nav_graph.png b/android_app/app/src/main/res/drawable-ldpi/ic_preferences_nav_graph.png deleted file mode 100644 index 65d8f7c1..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_nav_graph.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_reminder.png b/android_app/app/src/main/res/drawable-ldpi/ic_preferences_reminder.png deleted file mode 100644 index ad05b817..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_reminder.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_settings.png b/android_app/app/src/main/res/drawable-ldpi/ic_preferences_settings.png deleted file mode 100644 index 57e4889c..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_settings.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_statistics.png b/android_app/app/src/main/res/drawable-ldpi/ic_preferences_statistics.png deleted file mode 100644 index fbc9affa..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_statistics.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_table.png b/android_app/app/src/main/res/drawable-ldpi/ic_preferences_table.png deleted file mode 100644 index 14fe7902..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_table.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_users.png b/android_app/app/src/main/res/drawable-ldpi/ic_preferences_users.png deleted file mode 100644 index 26205740..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_preferences_users.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_save.png b/android_app/app/src/main/res/drawable-ldpi/ic_save.png deleted file mode 100644 index ef8863f6..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_save.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_show.png b/android_app/app/src/main/res/drawable-ldpi/ic_show.png deleted file mode 100644 index 4e0a595c..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_show.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_slide_group.png b/android_app/app/src/main/res/drawable-ldpi/ic_slide_group.png deleted file mode 100644 index db69c82b..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_slide_group.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_slide_opensource.png b/android_app/app/src/main/res/drawable-ldpi/ic_slide_opensource.png deleted file mode 100644 index 1c649301..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_slide_opensource.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_slide_privacy.png b/android_app/app/src/main/res/drawable-ldpi/ic_slide_privacy.png deleted file mode 100644 index ff9de101..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_slide_privacy.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_slide_support.png b/android_app/app/src/main/res/drawable-ldpi/ic_slide_support.png deleted file mode 100644 index d64dd4bf..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_slide_support.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_target.png b/android_app/app/src/main/res/drawable-ldpi/ic_target.png deleted file mode 100644 index 2e88bdb8..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_target.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_tdee.png b/android_app/app/src/main/res/drawable-ldpi/ic_tdee.png deleted file mode 100644 index becbf610..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_tdee.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_thigh.png b/android_app/app/src/main/res/drawable-ldpi/ic_thigh.png deleted file mode 100644 index 4b0d8cb2..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_thigh.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_user.png b/android_app/app/src/main/res/drawable-ldpi/ic_user.png deleted file mode 100644 index 0ba453dd..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_user.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_visceral_fat.png b/android_app/app/src/main/res/drawable-ldpi/ic_visceral_fat.png deleted file mode 100644 index 767df8c2..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_visceral_fat.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_waist.png b/android_app/app/src/main/res/drawable-ldpi/ic_waist.png deleted file mode 100644 index 15b5fc2a..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_waist.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_water.png b/android_app/app/src/main/res/drawable-ldpi/ic_water.png deleted file mode 100644 index 6a5f555d..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_water.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_weight.png b/android_app/app/src/main/res/drawable-ldpi/ic_weight.png deleted file mode 100644 index 20369823..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_weight.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_whr.png b/android_app/app/src/main/res/drawable-ldpi/ic_whr.png deleted file mode 100644 index dc646db6..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_whr.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_whtr.png b/android_app/app/src/main/res/drawable-ldpi/ic_whtr.png deleted file mode 100644 index 830cac3c..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_whtr.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/appwidget_bg.9.png b/android_app/app/src/main/res/drawable-mdpi/appwidget_bg.9.png deleted file mode 100644 index da8f77e3..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/appwidget_bg.9.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_add.png b/android_app/app/src/main/res/drawable-mdpi/ic_add.png deleted file mode 100644 index 40e7aa2a..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_add.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_biceps.png b/android_app/app/src/main/res/drawable-mdpi/ic_biceps.png deleted file mode 100644 index 9685d857..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_biceps.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_bluetooth_connection_lost.png b/android_app/app/src/main/res/drawable-mdpi/ic_bluetooth_connection_lost.png deleted file mode 100644 index c2fb4ab6..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_bluetooth_connection_lost.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_bluetooth_connection_success.png b/android_app/app/src/main/res/drawable-mdpi/ic_bluetooth_connection_success.png deleted file mode 100644 index 79d0e58a..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_bluetooth_connection_success.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_bluetooth_device_not_supported.png b/android_app/app/src/main/res/drawable-mdpi/ic_bluetooth_device_not_supported.png deleted file mode 100644 index ddbf12d5..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_bluetooth_device_not_supported.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_bluetooth_device_supported.png b/android_app/app/src/main/res/drawable-mdpi/ic_bluetooth_device_supported.png deleted file mode 100644 index 9166ca06..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_bluetooth_device_supported.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_bluetooth_disabled.png b/android_app/app/src/main/res/drawable-mdpi/ic_bluetooth_disabled.png deleted file mode 100644 index fdd17c8c..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_bluetooth_disabled.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_bluetooth_searching.png b/android_app/app/src/main/res/drawable-mdpi/ic_bluetooth_searching.png deleted file mode 100644 index f84c3ff7..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_bluetooth_searching.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_bmi.png b/android_app/app/src/main/res/drawable-mdpi/ic_bmi.png deleted file mode 100644 index 17df7081..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_bmi.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_bmr.png b/android_app/app/src/main/res/drawable-mdpi/ic_bmr.png deleted file mode 100644 index efcc8966..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_bmr.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_bone.png b/android_app/app/src/main/res/drawable-mdpi/ic_bone.png deleted file mode 100644 index 2b3d329d..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_bone.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_caliper1.png b/android_app/app/src/main/res/drawable-mdpi/ic_caliper1.png deleted file mode 100644 index b6662cf5..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_caliper1.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_caliper2.png b/android_app/app/src/main/res/drawable-mdpi/ic_caliper2.png deleted file mode 100644 index e2a9b32e..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_caliper2.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_caliper3.png b/android_app/app/src/main/res/drawable-mdpi/ic_caliper3.png deleted file mode 100644 index f69a3681..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_caliper3.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_calories.png b/android_app/app/src/main/res/drawable-mdpi/ic_calories.png deleted file mode 100644 index d20a1be9..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_calories.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_chest.png b/android_app/app/src/main/res/drawable-mdpi/ic_chest.png deleted file mode 100644 index ec74ed2e..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_chest.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_comment.png b/android_app/app/src/main/res/drawable-mdpi/ic_comment.png deleted file mode 100644 index 3db86918..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_comment.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_daysleft.png b/android_app/app/src/main/res/drawable-mdpi/ic_daysleft.png deleted file mode 100644 index 4ac6fb7e..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_daysleft.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_delete.png b/android_app/app/src/main/res/drawable-mdpi/ic_delete.png deleted file mode 100644 index e37425df..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_delete.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_difference.png b/android_app/app/src/main/res/drawable-mdpi/ic_difference.png deleted file mode 100644 index 451a2d3d..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_difference.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_editable.png b/android_app/app/src/main/res/drawable-mdpi/ic_editable.png deleted file mode 100644 index 9ef982c0..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_editable.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_expand.png b/android_app/app/src/main/res/drawable-mdpi/ic_expand.png deleted file mode 100644 index 59507644..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_expand.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_fat.png b/android_app/app/src/main/res/drawable-mdpi/ic_fat.png deleted file mode 100644 index 02c3bd0f..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_fat.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_fat_caliper.png b/android_app/app/src/main/res/drawable-mdpi/ic_fat_caliper.png deleted file mode 100644 index c63d10e1..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_fat_caliper.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_hip.png b/android_app/app/src/main/res/drawable-mdpi/ic_hip.png deleted file mode 100644 index 30eaa082..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_hip.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_lastmonth.png b/android_app/app/src/main/res/drawable-mdpi/ic_lastmonth.png deleted file mode 100644 index be97a8df..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_lastmonth.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_lastweek.png b/android_app/app/src/main/res/drawable-mdpi/ic_lastweek.png deleted file mode 100644 index fe5117e0..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_lastweek.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_launcher_openscale.png b/android_app/app/src/main/res/drawable-mdpi/ic_launcher_openscale.png deleted file mode 100644 index 7c9e8c46..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_launcher_openscale.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_launcher_openscale_light.png b/android_app/app/src/main/res/drawable-mdpi/ic_launcher_openscale_light.png deleted file mode 100644 index 5b7b08c1..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_launcher_openscale_light.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_launcher_openscale_pro.png b/android_app/app/src/main/res/drawable-mdpi/ic_launcher_openscale_pro.png deleted file mode 100644 index 0a2ce45e..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_launcher_openscale_pro.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_lbm.png b/android_app/app/src/main/res/drawable-mdpi/ic_lbm.png deleted file mode 100644 index 3cd3ef1a..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_lbm.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_muscle.png b/android_app/app/src/main/res/drawable-mdpi/ic_muscle.png deleted file mode 100644 index 7e2879b2..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_muscle.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_neck.png b/android_app/app/src/main/res/drawable-mdpi/ic_neck.png deleted file mode 100644 index ea48ba7f..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_neck.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_options.png b/android_app/app/src/main/res/drawable-mdpi/ic_options.png deleted file mode 100644 index c608c4c0..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_options.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_preference_donate.png b/android_app/app/src/main/res/drawable-mdpi/ic_preference_donate.png deleted file mode 100644 index 747a3912..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_preference_donate.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_about.png b/android_app/app/src/main/res/drawable-mdpi/ic_preferences_about.png deleted file mode 100644 index 025e312f..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_about.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_backup.png b/android_app/app/src/main/res/drawable-mdpi/ic_preferences_backup.png deleted file mode 100644 index 67c82a79..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_backup.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_bluetooth.png b/android_app/app/src/main/res/drawable-mdpi/ic_preferences_bluetooth.png deleted file mode 100644 index 327131ed..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_bluetooth.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_graph.png b/android_app/app/src/main/res/drawable-mdpi/ic_preferences_graph.png deleted file mode 100644 index 963e6046..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_graph.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_help.png b/android_app/app/src/main/res/drawable-mdpi/ic_preferences_help.png deleted file mode 100644 index dfefc0a0..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_help.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_home.png b/android_app/app/src/main/res/drawable-mdpi/ic_preferences_home.png deleted file mode 100644 index 0e7bf0ca..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_home.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_measurement.png b/android_app/app/src/main/res/drawable-mdpi/ic_preferences_measurement.png deleted file mode 100644 index d775ebac..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_measurement.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_nav_graph.png b/android_app/app/src/main/res/drawable-mdpi/ic_preferences_nav_graph.png deleted file mode 100644 index 963e6046..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_nav_graph.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_reminder.png b/android_app/app/src/main/res/drawable-mdpi/ic_preferences_reminder.png deleted file mode 100644 index 970e6502..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_reminder.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_settings.png b/android_app/app/src/main/res/drawable-mdpi/ic_preferences_settings.png deleted file mode 100644 index 0ba16f88..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_settings.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_statistics.png b/android_app/app/src/main/res/drawable-mdpi/ic_preferences_statistics.png deleted file mode 100644 index e74764c8..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_statistics.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_table.png b/android_app/app/src/main/res/drawable-mdpi/ic_preferences_table.png deleted file mode 100644 index b768e8f2..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_table.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_users.png b/android_app/app/src/main/res/drawable-mdpi/ic_preferences_users.png deleted file mode 100644 index b9e86d27..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_preferences_users.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_save.png b/android_app/app/src/main/res/drawable-mdpi/ic_save.png deleted file mode 100644 index 90625810..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_save.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_show.png b/android_app/app/src/main/res/drawable-mdpi/ic_show.png deleted file mode 100644 index ef2a3498..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_show.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_slide_group.png b/android_app/app/src/main/res/drawable-mdpi/ic_slide_group.png deleted file mode 100644 index 89fad028..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_slide_group.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_slide_opensource.png b/android_app/app/src/main/res/drawable-mdpi/ic_slide_opensource.png deleted file mode 100644 index aee10d5f..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_slide_opensource.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_slide_privacy.png b/android_app/app/src/main/res/drawable-mdpi/ic_slide_privacy.png deleted file mode 100644 index 7027baa2..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_slide_privacy.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_slide_support.png b/android_app/app/src/main/res/drawable-mdpi/ic_slide_support.png deleted file mode 100644 index e13a6efb..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_slide_support.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_target.png b/android_app/app/src/main/res/drawable-mdpi/ic_target.png deleted file mode 100644 index bd8a6e46..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_target.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_tdee.png b/android_app/app/src/main/res/drawable-mdpi/ic_tdee.png deleted file mode 100644 index 389b8c76..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_tdee.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_thigh.png b/android_app/app/src/main/res/drawable-mdpi/ic_thigh.png deleted file mode 100644 index c819bf3e..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_thigh.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_user.png b/android_app/app/src/main/res/drawable-mdpi/ic_user.png deleted file mode 100644 index bb2a33a0..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_user.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_visceral_fat.png b/android_app/app/src/main/res/drawable-mdpi/ic_visceral_fat.png deleted file mode 100644 index c675fe8d..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_visceral_fat.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_waist.png b/android_app/app/src/main/res/drawable-mdpi/ic_waist.png deleted file mode 100644 index 792e46ad..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_waist.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_water.png b/android_app/app/src/main/res/drawable-mdpi/ic_water.png deleted file mode 100644 index fdb29d1c..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_water.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_weight.png b/android_app/app/src/main/res/drawable-mdpi/ic_weight.png deleted file mode 100644 index b7637926..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_weight.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_whr.png b/android_app/app/src/main/res/drawable-mdpi/ic_whr.png deleted file mode 100644 index a33ecacd..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_whr.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_whtr.png b/android_app/app/src/main/res/drawable-mdpi/ic_whtr.png deleted file mode 100644 index 2500b999..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_whtr.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-nodpi/chart_marker.png b/android_app/app/src/main/res/drawable-nodpi/chart_marker.png deleted file mode 100644 index 88852fbf..00000000 Binary files a/android_app/app/src/main/res/drawable-nodpi/chart_marker.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/appwidget_bg.9.png b/android_app/app/src/main/res/drawable-xhdpi/appwidget_bg.9.png deleted file mode 100644 index 69fa70c1..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/appwidget_bg.9.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_add.png b/android_app/app/src/main/res/drawable-xhdpi/ic_add.png deleted file mode 100644 index 5e91b5c3..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_add.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_biceps.png b/android_app/app/src/main/res/drawable-xhdpi/ic_biceps.png deleted file mode 100644 index d791e813..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_biceps.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_bluetooth_connection_lost.png b/android_app/app/src/main/res/drawable-xhdpi/ic_bluetooth_connection_lost.png deleted file mode 100644 index 5f54ecbe..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_bluetooth_connection_lost.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_bluetooth_connection_success.png b/android_app/app/src/main/res/drawable-xhdpi/ic_bluetooth_connection_success.png deleted file mode 100644 index b3a0b690..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_bluetooth_connection_success.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_bluetooth_device_not_supported.png b/android_app/app/src/main/res/drawable-xhdpi/ic_bluetooth_device_not_supported.png deleted file mode 100644 index 641dfb17..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_bluetooth_device_not_supported.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_bluetooth_device_supported.png b/android_app/app/src/main/res/drawable-xhdpi/ic_bluetooth_device_supported.png deleted file mode 100644 index 441e5842..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_bluetooth_device_supported.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_bluetooth_disabled.png b/android_app/app/src/main/res/drawable-xhdpi/ic_bluetooth_disabled.png deleted file mode 100644 index 09f6de4e..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_bluetooth_disabled.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_bluetooth_searching.png b/android_app/app/src/main/res/drawable-xhdpi/ic_bluetooth_searching.png deleted file mode 100644 index 435c295f..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_bluetooth_searching.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_bmi.png b/android_app/app/src/main/res/drawable-xhdpi/ic_bmi.png deleted file mode 100644 index 9bc67d1a..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_bmi.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_bmr.png b/android_app/app/src/main/res/drawable-xhdpi/ic_bmr.png deleted file mode 100644 index a94e8175..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_bmr.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_bone.png b/android_app/app/src/main/res/drawable-xhdpi/ic_bone.png deleted file mode 100644 index 0323375f..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_bone.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_caliper1.png b/android_app/app/src/main/res/drawable-xhdpi/ic_caliper1.png deleted file mode 100644 index 536ade7a..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_caliper1.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_caliper2.png b/android_app/app/src/main/res/drawable-xhdpi/ic_caliper2.png deleted file mode 100644 index ec129615..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_caliper2.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_caliper3.png b/android_app/app/src/main/res/drawable-xhdpi/ic_caliper3.png deleted file mode 100644 index 3d17d86e..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_caliper3.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_calories.png b/android_app/app/src/main/res/drawable-xhdpi/ic_calories.png deleted file mode 100644 index 49eda818..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_calories.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_chest.png b/android_app/app/src/main/res/drawable-xhdpi/ic_chest.png deleted file mode 100644 index 68467afb..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_chest.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_comment.png b/android_app/app/src/main/res/drawable-xhdpi/ic_comment.png deleted file mode 100644 index 2956ca0a..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_comment.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_daysleft.png b/android_app/app/src/main/res/drawable-xhdpi/ic_daysleft.png deleted file mode 100644 index 5ec7d7d7..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_daysleft.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_delete.png b/android_app/app/src/main/res/drawable-xhdpi/ic_delete.png deleted file mode 100644 index 7c2c52c5..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_delete.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_difference.png b/android_app/app/src/main/res/drawable-xhdpi/ic_difference.png deleted file mode 100644 index 8100a5de..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_difference.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_editable.png b/android_app/app/src/main/res/drawable-xhdpi/ic_editable.png deleted file mode 100644 index cf4fac07..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_editable.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_expand.png b/android_app/app/src/main/res/drawable-xhdpi/ic_expand.png deleted file mode 100644 index 41961c80..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_expand.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_fat.png b/android_app/app/src/main/res/drawable-xhdpi/ic_fat.png deleted file mode 100644 index fc98a06d..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_fat.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_fat_caliper.png b/android_app/app/src/main/res/drawable-xhdpi/ic_fat_caliper.png deleted file mode 100644 index 52ee878b..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_fat_caliper.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_hip.png b/android_app/app/src/main/res/drawable-xhdpi/ic_hip.png deleted file mode 100644 index ca1da507..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_hip.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_lastmonth.png b/android_app/app/src/main/res/drawable-xhdpi/ic_lastmonth.png deleted file mode 100644 index 6a92c486..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_lastmonth.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_lastweek.png b/android_app/app/src/main/res/drawable-xhdpi/ic_lastweek.png deleted file mode 100644 index 208c2eb1..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_lastweek.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_launcher_openscale.png b/android_app/app/src/main/res/drawable-xhdpi/ic_launcher_openscale.png deleted file mode 100644 index 88f59688..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_launcher_openscale.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_launcher_openscale_light.png b/android_app/app/src/main/res/drawable-xhdpi/ic_launcher_openscale_light.png deleted file mode 100644 index 5f2db23b..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_launcher_openscale_light.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_launcher_openscale_pro.png b/android_app/app/src/main/res/drawable-xhdpi/ic_launcher_openscale_pro.png deleted file mode 100644 index 7318001e..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_launcher_openscale_pro.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_lbm.png b/android_app/app/src/main/res/drawable-xhdpi/ic_lbm.png deleted file mode 100644 index 0d21f723..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_lbm.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_muscle.png b/android_app/app/src/main/res/drawable-xhdpi/ic_muscle.png deleted file mode 100644 index b7149da8..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_muscle.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_neck.png b/android_app/app/src/main/res/drawable-xhdpi/ic_neck.png deleted file mode 100644 index 799adbae..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_neck.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_options.png b/android_app/app/src/main/res/drawable-xhdpi/ic_options.png deleted file mode 100644 index e7b21b9a..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_options.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_preference_donate.png b/android_app/app/src/main/res/drawable-xhdpi/ic_preference_donate.png deleted file mode 100644 index 150134a8..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_preference_donate.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_about.png b/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_about.png deleted file mode 100644 index cff26f33..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_about.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_backup.png b/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_backup.png deleted file mode 100644 index 3669c8d3..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_backup.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_bluetooth.png b/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_bluetooth.png deleted file mode 100644 index ad5431b5..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_bluetooth.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_graph.png b/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_graph.png deleted file mode 100644 index 0965cae3..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_graph.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_help.png b/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_help.png deleted file mode 100644 index 3f7488ce..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_help.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_home.png b/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_home.png deleted file mode 100644 index 1f872e30..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_home.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_measurement.png b/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_measurement.png deleted file mode 100644 index f80ac7c5..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_measurement.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_nav_graph.png b/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_nav_graph.png deleted file mode 100644 index 0965cae3..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_nav_graph.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_reminder.png b/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_reminder.png deleted file mode 100644 index d1701e6d..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_reminder.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_settings.png b/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_settings.png deleted file mode 100644 index 7fef9f53..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_settings.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_statistics.png b/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_statistics.png deleted file mode 100644 index dee13e8a..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_statistics.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_table.png b/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_table.png deleted file mode 100644 index 94826c8a..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_table.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_users.png b/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_users.png deleted file mode 100644 index 54fc4763..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_preferences_users.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_save.png b/android_app/app/src/main/res/drawable-xhdpi/ic_save.png deleted file mode 100644 index a5248092..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_save.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_show.png b/android_app/app/src/main/res/drawable-xhdpi/ic_show.png deleted file mode 100644 index f9c2ef90..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_show.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_slide_group.png b/android_app/app/src/main/res/drawable-xhdpi/ic_slide_group.png deleted file mode 100644 index 7748325d..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_slide_group.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_slide_opensource.png b/android_app/app/src/main/res/drawable-xhdpi/ic_slide_opensource.png deleted file mode 100644 index c86cc074..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_slide_opensource.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_slide_privacy.png b/android_app/app/src/main/res/drawable-xhdpi/ic_slide_privacy.png deleted file mode 100644 index 4ed6fc31..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_slide_privacy.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_slide_support.png b/android_app/app/src/main/res/drawable-xhdpi/ic_slide_support.png deleted file mode 100644 index 23167953..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_slide_support.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_target.png b/android_app/app/src/main/res/drawable-xhdpi/ic_target.png deleted file mode 100644 index 935e0846..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_target.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_tdee.png b/android_app/app/src/main/res/drawable-xhdpi/ic_tdee.png deleted file mode 100644 index 71921867..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_tdee.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_thigh.png b/android_app/app/src/main/res/drawable-xhdpi/ic_thigh.png deleted file mode 100644 index 54be7eaf..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_thigh.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_user.png b/android_app/app/src/main/res/drawable-xhdpi/ic_user.png deleted file mode 100644 index 191972cd..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_user.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_visceral_fat.png b/android_app/app/src/main/res/drawable-xhdpi/ic_visceral_fat.png deleted file mode 100644 index 204b525b..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_visceral_fat.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_waist.png b/android_app/app/src/main/res/drawable-xhdpi/ic_waist.png deleted file mode 100644 index d470104c..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_waist.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_water.png b/android_app/app/src/main/res/drawable-xhdpi/ic_water.png deleted file mode 100644 index 3c1e3cff..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_water.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_weight.png b/android_app/app/src/main/res/drawable-xhdpi/ic_weight.png deleted file mode 100644 index da0fab6f..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_weight.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_whr.png b/android_app/app/src/main/res/drawable-xhdpi/ic_whr.png deleted file mode 100644 index e83da6d4..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_whr.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_whtr.png b/android_app/app/src/main/res/drawable-xhdpi/ic_whtr.png deleted file mode 100644 index 0636e540..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_whtr.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_add.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_add.png deleted file mode 100644 index 00ead32a..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_add.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_biceps.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_biceps.png deleted file mode 100644 index c2e0db1d..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_biceps.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_bluetooth_connection_lost.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_bluetooth_connection_lost.png deleted file mode 100644 index e7e285f1..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_bluetooth_connection_lost.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_bluetooth_connection_success.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_bluetooth_connection_success.png deleted file mode 100644 index 0645cc7f..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_bluetooth_connection_success.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_bluetooth_device_not_supported.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_bluetooth_device_not_supported.png deleted file mode 100644 index 6159ef0a..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_bluetooth_device_not_supported.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_bluetooth_device_supported.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_bluetooth_device_supported.png deleted file mode 100644 index e238d33b..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_bluetooth_device_supported.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_bluetooth_disabled.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_bluetooth_disabled.png deleted file mode 100644 index 3176f137..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_bluetooth_disabled.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_bluetooth_searching.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_bluetooth_searching.png deleted file mode 100644 index 42825e65..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_bluetooth_searching.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_bmi.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_bmi.png deleted file mode 100644 index 949e65df..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_bmi.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_bmr.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_bmr.png deleted file mode 100644 index 242371fe..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_bmr.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_bone.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_bone.png deleted file mode 100644 index 529bf6bd..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_bone.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_caliper1.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_caliper1.png deleted file mode 100644 index b206daf7..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_caliper1.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_caliper2.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_caliper2.png deleted file mode 100644 index bfa069e3..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_caliper2.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_caliper3.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_caliper3.png deleted file mode 100644 index 2810e1d9..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_caliper3.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_calories.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_calories.png deleted file mode 100644 index 4b14cdb8..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_calories.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_chest.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_chest.png deleted file mode 100644 index 9b1a0a3a..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_chest.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_comment.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_comment.png deleted file mode 100644 index 945181b9..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_comment.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_daysleft.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_daysleft.png deleted file mode 100644 index 51f918ae..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_daysleft.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_delete.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_delete.png deleted file mode 100644 index c419bd69..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_delete.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_difference.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_difference.png deleted file mode 100644 index bca042dd..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_difference.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_editable.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_editable.png deleted file mode 100644 index 8511e4ea..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_editable.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_expand.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_expand.png deleted file mode 100644 index c42bc404..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_expand.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_fat.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_fat.png deleted file mode 100644 index 2877c693..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_fat.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_fat_caliper.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_fat_caliper.png deleted file mode 100644 index 72ede516..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_fat_caliper.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_hip.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_hip.png deleted file mode 100644 index 5bbfbb9a..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_hip.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_lastmonth.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_lastmonth.png deleted file mode 100644 index cbf88a36..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_lastmonth.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_lastweek.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_lastweek.png deleted file mode 100644 index 98b17c39..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_lastweek.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_launcher_openscale.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_launcher_openscale.png deleted file mode 100644 index cc0c57d2..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_launcher_openscale.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_launcher_openscale_light.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_launcher_openscale_light.png deleted file mode 100644 index af9b11ad..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_launcher_openscale_light.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_launcher_openscale_pro.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_launcher_openscale_pro.png deleted file mode 100644 index 25963432..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_launcher_openscale_pro.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_lbm.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_lbm.png deleted file mode 100644 index ce567700..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_lbm.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_muscle.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_muscle.png deleted file mode 100644 index 8368c352..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_muscle.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_neck.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_neck.png deleted file mode 100644 index eb565bb3..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_neck.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_options.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_options.png deleted file mode 100644 index 754bc9b7..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_options.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_preference_donate.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_preference_donate.png deleted file mode 100644 index c7567684..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_preference_donate.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_about.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_about.png deleted file mode 100644 index 1e5957f5..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_about.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_backup.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_backup.png deleted file mode 100644 index 53560436..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_backup.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_bluetooth.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_bluetooth.png deleted file mode 100644 index 859e8279..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_bluetooth.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_graph.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_graph.png deleted file mode 100644 index 5769f183..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_graph.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_help.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_help.png deleted file mode 100644 index 7e957ea7..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_help.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_home.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_home.png deleted file mode 100644 index 4fd9e229..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_home.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_measurement.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_measurement.png deleted file mode 100644 index e5d82041..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_measurement.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_nav_graph.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_nav_graph.png deleted file mode 100644 index 5769f183..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_nav_graph.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_reminder.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_reminder.png deleted file mode 100644 index 208c2eb1..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_reminder.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_settings.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_settings.png deleted file mode 100644 index 951fa7cb..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_settings.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_statistics.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_statistics.png deleted file mode 100644 index 48c4b673..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_statistics.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_table.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_table.png deleted file mode 100644 index ade39128..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_table.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_users.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_users.png deleted file mode 100644 index 0636e540..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_preferences_users.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_save.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_save.png deleted file mode 100644 index 04e9b191..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_save.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_show.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_show.png deleted file mode 100644 index c4df381e..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_show.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_slide_group.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_slide_group.png deleted file mode 100644 index 30e18e57..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_slide_group.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_slide_opensource.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_slide_opensource.png deleted file mode 100644 index cf731c86..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_slide_opensource.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_slide_privacy.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_slide_privacy.png deleted file mode 100644 index 47f4edca..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_slide_privacy.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_slide_support.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_slide_support.png deleted file mode 100644 index 63d0bd79..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_slide_support.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_target.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_target.png deleted file mode 100644 index b0d565fa..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_target.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_tdee.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_tdee.png deleted file mode 100644 index a3fc8482..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_tdee.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_thigh.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_thigh.png deleted file mode 100644 index 0a90a5c4..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_thigh.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_user.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_user.png deleted file mode 100644 index 74fb0b04..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_user.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_visceral_fat.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_visceral_fat.png deleted file mode 100644 index ce36fdb6..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_visceral_fat.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_waist.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_waist.png deleted file mode 100644 index bff1b173..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_waist.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_water.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_water.png deleted file mode 100644 index 2c66bc58..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_water.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_weight.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_weight.png deleted file mode 100644 index aec8c69b..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_weight.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_whr.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_whr.png deleted file mode 100644 index febb3532..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_whr.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_whtr.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_whtr.png deleted file mode 100644 index d7a129be..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_whtr.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_add.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_add.png deleted file mode 100644 index 094de168..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_add.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_biceps.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_biceps.png deleted file mode 100644 index 6bc2eaed..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_biceps.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_bluetooth_connection_lost.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_bluetooth_connection_lost.png deleted file mode 100644 index 822b7081..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_bluetooth_connection_lost.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_bluetooth_connection_success.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_bluetooth_connection_success.png deleted file mode 100644 index fe0a2247..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_bluetooth_connection_success.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_bluetooth_device_not_supported.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_bluetooth_device_not_supported.png deleted file mode 100644 index b1baa400..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_bluetooth_device_not_supported.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_bluetooth_device_supported.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_bluetooth_device_supported.png deleted file mode 100644 index 87a46db2..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_bluetooth_device_supported.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_bluetooth_disabled.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_bluetooth_disabled.png deleted file mode 100644 index 24ef7257..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_bluetooth_disabled.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_bluetooth_searching.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_bluetooth_searching.png deleted file mode 100644 index 325c276c..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_bluetooth_searching.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_bmi.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_bmi.png deleted file mode 100644 index f9384ec8..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_bmi.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_bmr.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_bmr.png deleted file mode 100644 index 528f1538..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_bmr.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_bone.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_bone.png deleted file mode 100644 index c429fbee..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_bone.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_caliper1.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_caliper1.png deleted file mode 100644 index e896cb64..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_caliper1.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_caliper2.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_caliper2.png deleted file mode 100644 index 2836d5b4..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_caliper2.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_caliper3.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_caliper3.png deleted file mode 100644 index 13055cf8..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_caliper3.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_calories.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_calories.png deleted file mode 100644 index d8f79e8e..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_calories.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_chest.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_chest.png deleted file mode 100644 index 912cb124..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_chest.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_comment.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_comment.png deleted file mode 100644 index 2fc25b0a..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_comment.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_daysleft.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_daysleft.png deleted file mode 100644 index 7e860e09..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_daysleft.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_delete.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_delete.png deleted file mode 100644 index 2856200f..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_delete.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_difference.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_difference.png deleted file mode 100644 index 771d179a..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_difference.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_editable.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_editable.png deleted file mode 100644 index 507648a3..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_editable.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_expand.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_expand.png deleted file mode 100644 index f9a07287..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_expand.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_fat.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_fat.png deleted file mode 100644 index 87de23d7..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_fat.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_fat_caliper.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_fat_caliper.png deleted file mode 100644 index 1b374811..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_fat_caliper.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_hip.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_hip.png deleted file mode 100644 index abe5c65d..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_hip.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_lastmonth.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_lastmonth.png deleted file mode 100644 index 2a293c1e..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_lastmonth.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_lastweek.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_lastweek.png deleted file mode 100644 index c740a5d3..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_lastweek.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_launcher_openscale.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_launcher_openscale.png deleted file mode 100644 index a0470123..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_launcher_openscale.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_launcher_openscale_light.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_launcher_openscale_light.png deleted file mode 100644 index 6151badf..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_launcher_openscale_light.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_launcher_openscale_pro.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_launcher_openscale_pro.png deleted file mode 100644 index 81510560..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_launcher_openscale_pro.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_lbm.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_lbm.png deleted file mode 100644 index 3d12dbd5..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_lbm.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_muscle.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_muscle.png deleted file mode 100644 index fa74b386..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_muscle.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_neck.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_neck.png deleted file mode 100644 index 50f128fa..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_neck.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_options.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_options.png deleted file mode 100644 index eb66a139..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_options.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preference_donate.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_preference_donate.png deleted file mode 100644 index 444795ec..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preference_donate.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_about.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_about.png deleted file mode 100644 index 0d7984f7..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_about.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_backup.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_backup.png deleted file mode 100644 index e0d6dca6..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_backup.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_bluetooth.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_bluetooth.png deleted file mode 100644 index 7311c9fc..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_bluetooth.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_graph.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_graph.png deleted file mode 100644 index d2ac30c3..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_graph.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_help.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_help.png deleted file mode 100644 index 867dbef1..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_help.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_home.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_home.png deleted file mode 100644 index b6da6939..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_home.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_measurement.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_measurement.png deleted file mode 100644 index 4b2a0100..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_measurement.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_nav_graph.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_nav_graph.png deleted file mode 100644 index d2ac30c3..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_nav_graph.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_reminder.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_reminder.png deleted file mode 100644 index 95068856..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_reminder.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_settings.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_settings.png deleted file mode 100644 index 42d5e3a2..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_settings.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_statistics.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_statistics.png deleted file mode 100644 index 81300cfb..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_statistics.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_table.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_table.png deleted file mode 100644 index 85ff21b0..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_table.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_users.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_users.png deleted file mode 100644 index 6cade9a6..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_preferences_users.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_save.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_save.png deleted file mode 100644 index 873fca5a..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_save.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_show.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_show.png deleted file mode 100644 index c4136e8e..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_show.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_slide_group.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_slide_group.png deleted file mode 100644 index 1eedcc21..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_slide_group.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_slide_opensource.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_slide_opensource.png deleted file mode 100644 index 9f7feaa3..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_slide_opensource.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_slide_privacy.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_slide_privacy.png deleted file mode 100644 index 8d0a5a92..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_slide_privacy.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_slide_support.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_slide_support.png deleted file mode 100644 index 0721a99b..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_slide_support.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_target.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_target.png deleted file mode 100644 index 9a5adbde..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_target.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_tdee.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_tdee.png deleted file mode 100644 index ca90b922..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_tdee.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_thigh.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_thigh.png deleted file mode 100644 index 448fb4c8..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_thigh.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_user.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_user.png deleted file mode 100644 index 14720bba..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_user.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_visceral_fat.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_visceral_fat.png deleted file mode 100644 index b6f72e25..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_visceral_fat.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_waist.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_waist.png deleted file mode 100644 index eac2f802..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_waist.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_water.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_water.png deleted file mode 100644 index 26e5198b..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_water.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_weight.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_weight.png deleted file mode 100644 index 7f2e2eb0..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_weight.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_whr.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_whr.png deleted file mode 100644 index 55406ea1..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_whr.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_whtr.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_whtr.png deleted file mode 100644 index bd9f6a4a..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_whtr.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable/appwidget_bg.xml b/android_app/app/src/main/res/drawable/appwidget_bg.xml new file mode 100644 index 00000000..70d6ef5d --- /dev/null +++ b/android_app/app/src/main/res/drawable/appwidget_bg.xml @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/android_app/app/src/main/res/drawable/chart_marker.xml b/android_app/app/src/main/res/drawable/chart_marker.xml new file mode 100644 index 00000000..a3870a3b --- /dev/null +++ b/android_app/app/src/main/res/drawable/chart_marker.xml @@ -0,0 +1,13 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_add.xml b/android_app/app/src/main/res/drawable/ic_add.xml new file mode 100644 index 00000000..70046c48 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_add.xml @@ -0,0 +1,5 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_biceps.xml b/android_app/app/src/main/res/drawable/ic_biceps.xml new file mode 100644 index 00000000..32b6ba9f --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_biceps.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_bluetooth_connection_lost.xml b/android_app/app/src/main/res/drawable/ic_bluetooth_connection_lost.xml new file mode 100644 index 00000000..421fef71 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_bluetooth_connection_lost.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_bluetooth_connection_success.xml b/android_app/app/src/main/res/drawable/ic_bluetooth_connection_success.xml new file mode 100644 index 00000000..cb2f304d --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_bluetooth_connection_success.xml @@ -0,0 +1,22 @@ + + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_bluetooth_device_not_supported.xml b/android_app/app/src/main/res/drawable/ic_bluetooth_device_not_supported.xml new file mode 100644 index 00000000..836b5cb6 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_bluetooth_device_not_supported.xml @@ -0,0 +1,5 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_bluetooth_device_supported.xml b/android_app/app/src/main/res/drawable/ic_bluetooth_device_supported.xml new file mode 100644 index 00000000..7e5caacd --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_bluetooth_device_supported.xml @@ -0,0 +1,5 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_bluetooth_disabled.xml b/android_app/app/src/main/res/drawable/ic_bluetooth_disabled.xml new file mode 100644 index 00000000..ba31bd4a --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_bluetooth_disabled.xml @@ -0,0 +1,9 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_bluetooth_searching.xml b/android_app/app/src/main/res/drawable/ic_bluetooth_searching.xml new file mode 100644 index 00000000..3d532d4c --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_bluetooth_searching.xml @@ -0,0 +1,9 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_bmi.xml b/android_app/app/src/main/res/drawable/ic_bmi.xml new file mode 100644 index 00000000..234b2e46 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_bmi.xml @@ -0,0 +1,9 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_bmr.xml b/android_app/app/src/main/res/drawable/ic_bmr.xml new file mode 100644 index 00000000..e577899b --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_bmr.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_bone.xml b/android_app/app/src/main/res/drawable/ic_bone.xml new file mode 100644 index 00000000..658cc49b --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_bone.xml @@ -0,0 +1,12 @@ + + + + diff --git a/android_app/app/src/main/res/drawable/ic_caliper1.xml b/android_app/app/src/main/res/drawable/ic_caliper1.xml new file mode 100644 index 00000000..931521d1 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_caliper1.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_caliper2.xml b/android_app/app/src/main/res/drawable/ic_caliper2.xml new file mode 100644 index 00000000..28adc483 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_caliper2.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_caliper3.xml b/android_app/app/src/main/res/drawable/ic_caliper3.xml new file mode 100644 index 00000000..a984b97a --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_caliper3.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_calories.xml b/android_app/app/src/main/res/drawable/ic_calories.xml new file mode 100644 index 00000000..4a7f0849 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_calories.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_chart_marker.xml b/android_app/app/src/main/res/drawable/ic_chart_marker.xml new file mode 100644 index 00000000..e51fecb5 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_chart_marker.xml @@ -0,0 +1,13 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_chest.xml b/android_app/app/src/main/res/drawable/ic_chest.xml new file mode 100644 index 00000000..40d1986b --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_chest.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_comment.xml b/android_app/app/src/main/res/drawable/ic_comment.xml new file mode 100644 index 00000000..4bb9eb4c --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_comment.xml @@ -0,0 +1,9 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_daysleft.xml b/android_app/app/src/main/res/drawable/ic_daysleft.xml new file mode 100644 index 00000000..0c06355b --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_daysleft.xml @@ -0,0 +1,30 @@ + + + + + + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_delete.xml b/android_app/app/src/main/res/drawable/ic_delete.xml new file mode 100644 index 00000000..3c4030b0 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_delete.xml @@ -0,0 +1,10 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_difference.xml b/android_app/app/src/main/res/drawable/ic_difference.xml new file mode 100644 index 00000000..ddb188a7 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_difference.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_editable.xml b/android_app/app/src/main/res/drawable/ic_editable.xml new file mode 100644 index 00000000..2844bafe --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_editable.xml @@ -0,0 +1,10 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_expand.xml b/android_app/app/src/main/res/drawable/ic_expand.xml new file mode 100644 index 00000000..0f990b20 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_expand.xml @@ -0,0 +1,12 @@ + + + + diff --git a/android_app/app/src/main/res/drawable/ic_fat.xml b/android_app/app/src/main/res/drawable/ic_fat.xml new file mode 100644 index 00000000..3849406a --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_fat.xml @@ -0,0 +1,9 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_fat_caliper.xml b/android_app/app/src/main/res/drawable/ic_fat_caliper.xml new file mode 100644 index 00000000..c92b6c6d --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_fat_caliper.xml @@ -0,0 +1,4 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_hip.xml b/android_app/app/src/main/res/drawable/ic_hip.xml new file mode 100644 index 00000000..e32094f5 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_hip.xml @@ -0,0 +1,12 @@ + + + + diff --git a/android_app/app/src/main/res/drawable/ic_lastmonth.xml b/android_app/app/src/main/res/drawable/ic_lastmonth.xml new file mode 100644 index 00000000..099a7530 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_lastmonth.xml @@ -0,0 +1,21 @@ + + + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_lastweek.xml b/android_app/app/src/main/res/drawable/ic_lastweek.xml new file mode 100644 index 00000000..342545ec --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_lastweek.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_launcher_openscale.xml b/android_app/app/src/main/res/drawable/ic_launcher_openscale.xml new file mode 100644 index 00000000..0717be29 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_launcher_openscale.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_launcher_openscale_light.xml b/android_app/app/src/main/res/drawable/ic_launcher_openscale_light.xml new file mode 100644 index 00000000..4859c63f --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_launcher_openscale_light.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_launcher_openscale_pro.xml b/android_app/app/src/main/res/drawable/ic_launcher_openscale_pro.xml new file mode 100644 index 00000000..2c5d8067 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_launcher_openscale_pro.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_lbm.xml b/android_app/app/src/main/res/drawable/ic_lbm.xml new file mode 100644 index 00000000..606586f5 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_lbm.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_muscle.xml b/android_app/app/src/main/res/drawable/ic_muscle.xml new file mode 100644 index 00000000..ee03ffb4 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_muscle.xml @@ -0,0 +1,21 @@ + + + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_neck.xml b/android_app/app/src/main/res/drawable/ic_neck.xml new file mode 100644 index 00000000..3d99f964 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_neck.xml @@ -0,0 +1,21 @@ + + + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_options.xml b/android_app/app/src/main/res/drawable/ic_options.xml new file mode 100644 index 00000000..454bd7de --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_options.xml @@ -0,0 +1,10 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_preference_donate.xml b/android_app/app/src/main/res/drawable/ic_preference_donate.xml new file mode 100644 index 00000000..f2e51d22 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_preference_donate.xml @@ -0,0 +1,5 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_preferences_about.xml b/android_app/app/src/main/res/drawable/ic_preferences_about.xml new file mode 100644 index 00000000..f6e2d050 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_preferences_about.xml @@ -0,0 +1,5 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_preferences_backup.xml b/android_app/app/src/main/res/drawable/ic_preferences_backup.xml new file mode 100644 index 00000000..65600a46 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_preferences_backup.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_preferences_bluetooth.xml b/android_app/app/src/main/res/drawable/ic_preferences_bluetooth.xml new file mode 100644 index 00000000..151fc623 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_preferences_bluetooth.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_preferences_graph.xml b/android_app/app/src/main/res/drawable/ic_preferences_graph.xml new file mode 100644 index 00000000..1654f14f --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_preferences_graph.xml @@ -0,0 +1,12 @@ + + + + diff --git a/android_app/app/src/main/res/drawable/ic_preferences_help.xml b/android_app/app/src/main/res/drawable/ic_preferences_help.xml new file mode 100644 index 00000000..d5fd2a8d --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_preferences_help.xml @@ -0,0 +1,10 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_preferences_home.xml b/android_app/app/src/main/res/drawable/ic_preferences_home.xml new file mode 100644 index 00000000..2c36c843 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_preferences_home.xml @@ -0,0 +1,10 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_preferences_measurement.xml b/android_app/app/src/main/res/drawable/ic_preferences_measurement.xml new file mode 100644 index 00000000..5224252b --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_preferences_measurement.xml @@ -0,0 +1,12 @@ + + + + diff --git a/android_app/app/src/main/res/drawable/ic_preferences_nav_graph.xml b/android_app/app/src/main/res/drawable/ic_preferences_nav_graph.xml new file mode 100644 index 00000000..9f4d9243 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_preferences_nav_graph.xml @@ -0,0 +1,12 @@ + + + + diff --git a/android_app/app/src/main/res/drawable/ic_preferences_reminder.xml b/android_app/app/src/main/res/drawable/ic_preferences_reminder.xml new file mode 100644 index 00000000..342545ec --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_preferences_reminder.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_preferences_settings.xml b/android_app/app/src/main/res/drawable/ic_preferences_settings.xml new file mode 100644 index 00000000..be2cfd29 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_preferences_settings.xml @@ -0,0 +1,10 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_preferences_statistics.xml b/android_app/app/src/main/res/drawable/ic_preferences_statistics.xml new file mode 100644 index 00000000..347e0bab --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_preferences_statistics.xml @@ -0,0 +1,12 @@ + + + + diff --git a/android_app/app/src/main/res/drawable/ic_preferences_table.xml b/android_app/app/src/main/res/drawable/ic_preferences_table.xml new file mode 100644 index 00000000..607aaf78 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_preferences_table.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_preferences_users.xml b/android_app/app/src/main/res/drawable/ic_preferences_users.xml new file mode 100644 index 00000000..5d25b639 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_preferences_users.xml @@ -0,0 +1,27 @@ + + + + + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_reorder.xml b/android_app/app/src/main/res/drawable/ic_reorder.xml new file mode 100644 index 00000000..45086bd7 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_reorder.xml @@ -0,0 +1,11 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_save.xml b/android_app/app/src/main/res/drawable/ic_save.xml new file mode 100644 index 00000000..1a8d86d2 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_save.xml @@ -0,0 +1,10 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_show.xml b/android_app/app/src/main/res/drawable/ic_show.xml new file mode 100644 index 00000000..a3e222a2 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_show.xml @@ -0,0 +1,10 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_slide_group.xml b/android_app/app/src/main/res/drawable/ic_slide_group.xml new file mode 100644 index 00000000..b20bbb03 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_slide_group.xml @@ -0,0 +1,4 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_slide_opensource.xml b/android_app/app/src/main/res/drawable/ic_slide_opensource.xml new file mode 100644 index 00000000..35127694 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_slide_opensource.xml @@ -0,0 +1,9 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_slide_privacy.xml b/android_app/app/src/main/res/drawable/ic_slide_privacy.xml new file mode 100644 index 00000000..4b4d6310 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_slide_privacy.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_slide_support.xml b/android_app/app/src/main/res/drawable/ic_slide_support.xml new file mode 100644 index 00000000..48d69581 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_slide_support.xml @@ -0,0 +1,5 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_target.xml b/android_app/app/src/main/res/drawable/ic_target.xml new file mode 100644 index 00000000..178e2f5d --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_target.xml @@ -0,0 +1,9 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_tdee.xml b/android_app/app/src/main/res/drawable/ic_tdee.xml new file mode 100644 index 00000000..96ae2a70 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_tdee.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_thigh.xml b/android_app/app/src/main/res/drawable/ic_thigh.xml new file mode 100644 index 00000000..0d1e93eb --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_thigh.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_user.xml b/android_app/app/src/main/res/drawable/ic_user.xml new file mode 100644 index 00000000..f7b20227 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_user.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/android_app/app/src/main/res/drawable/ic_visceral_fat.xml b/android_app/app/src/main/res/drawable/ic_visceral_fat.xml new file mode 100644 index 00000000..85f1ea47 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_visceral_fat.xml @@ -0,0 +1,4 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_waist.xml b/android_app/app/src/main/res/drawable/ic_waist.xml new file mode 100644 index 00000000..1f302aaf --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_waist.xml @@ -0,0 +1,9 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_water.xml b/android_app/app/src/main/res/drawable/ic_water.xml new file mode 100644 index 00000000..dadaf7ab --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_water.xml @@ -0,0 +1,9 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_weight.xml b/android_app/app/src/main/res/drawable/ic_weight.xml new file mode 100644 index 00000000..34a5cd3f --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_weight.xml @@ -0,0 +1,9 @@ + + + diff --git a/android_app/app/src/main/res/drawable/ic_whr.xml b/android_app/app/src/main/res/drawable/ic_whr.xml new file mode 100644 index 00000000..07edb720 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_whr.xml @@ -0,0 +1,12 @@ + + + + diff --git a/android_app/app/src/main/res/drawable/ic_whtr.xml b/android_app/app/src/main/res/drawable/ic_whtr.xml new file mode 100644 index 00000000..5d25b639 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_whtr.xml @@ -0,0 +1,27 @@ + + + + + + + + + diff --git a/android_app/app/src/main/res/layout/activity_main.xml b/android_app/app/src/main/res/layout/activity_main.xml index f1a49394..a2bd8ff0 100644 --- a/android_app/app/src/main/res/layout/activity_main.xml +++ b/android_app/app/src/main/res/layout/activity_main.xml @@ -1,7 +1,5 @@ - @@ -17,31 +15,37 @@ android:weightSum="100" android:orientation="vertical"> - - - + android:theme="@style/AppTheme.AppBarOverlay"> + + + + - + android:layout_weight="90" + app:defaultNavHost="true" + app:navGraph="@navigation/mobile_navigation" /> + + + + + + + + + \ No newline at end of file diff --git a/android_app/app/src/main/res/layout/chart_markerview.xml b/android_app/app/src/main/res/layout/chart_markerview.xml index 516fb3db..2d45b937 100644 --- a/android_app/app/src/main/res/layout/chart_markerview.xml +++ b/android_app/app/src/main/res/layout/chart_markerview.xml @@ -20,8 +20,8 @@ android:textAppearance="?android:attr/textAppearanceSmall" /> + android:background="@drawable/chart_marker" /> diff --git a/android_app/app/src/main/res/layout/activity_bluetoothsettings.xml b/android_app/app/src/main/res/layout/fragment_bluetoothsettings.xml similarity index 71% rename from android_app/app/src/main/res/layout/activity_bluetoothsettings.xml rename to android_app/app/src/main/res/layout/fragment_bluetoothsettings.xml index 17299886..d3113dbb 100644 --- a/android_app/app/src/main/res/layout/activity_bluetoothsettings.xml +++ b/android_app/app/src/main/res/layout/fragment_bluetoothsettings.xml @@ -1,19 +1,9 @@ - - - - @@ -20,11 +20,10 @@ - + android:background="?attr/colorPrimaryDark" + android:gravity="left" + android:orientation="horizontal">