diff --git a/android_app/app/src/main/AndroidManifest.xml b/android_app/app/src/main/AndroidManifest.xml index 76d58a74..4747e06f 100644 --- a/android_app/app/src/main/AndroidManifest.xml +++ b/android_app/app/src/main/AndroidManifest.xml @@ -14,7 +14,7 @@ android:allowBackup="true" android:icon="@drawable/ic_launcher_openscale" android:label="@string/app_name" - android:theme="@style/AppTheme" > + android:theme="@style/AppTheme_Light" > 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 919a219f..613499ac 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 @@ -73,6 +73,12 @@ public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { + String app_theme = PreferenceManager.getDefaultSharedPreferences(this).getString("app_theme", "Light"); + + if (app_theme.equals("Dark")) { + setTheme(R.style.AppTheme_Dark); + } + super.onCreate(savedInstanceState); CaocConfig.Builder.create() @@ -245,7 +251,9 @@ public class MainActivity extends AppCompatActivity { fragmentClass = StatisticsFragment.class; break; case R.id.nav_settings: - startActivityForResult(new Intent(this, SettingsActivity.class), 1); + Intent settingsIntent = new Intent(this, SettingsActivity.class); + settingsIntent.putExtra("tintColor", navDrawer.getItemTextColor().getDefaultColor()); + startActivityForResult(settingsIntent, 1); return; default: fragmentClass = OverviewFragment.class; 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 index e8e103bd..05159197 100644 --- 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 @@ -15,7 +15,11 @@ */ package com.health.openscale.gui.activities; +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; @@ -25,12 +29,28 @@ import java.util.List; public class SettingsActivity extends PreferenceActivity { private static List fragments = new ArrayList(); + @Override + public void onCreate(Bundle savedInstanceState) { + String app_theme = PreferenceManager.getDefaultSharedPreferences(this).getString("app_theme", "Light"); + + if (app_theme.equals("Dark")) { + setTheme(R.style.AppTheme_Dark); + } + + super.onCreate(savedInstanceState); + } + @Override public void onBuildHeaders(List
target) { loadHeadersFromResource(R.xml.header_preferences, target); + int tintColor = getIntent().getIntExtra("tintColor", 0); + fragments.clear(); for (Header header : target) { + Drawable icon = getResources().getDrawable(header.iconRes); + icon.setColorFilter(tintColor, PorterDuff.Mode.SRC_IN); + fragments.add(header.fragment); } } 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/fragments/GraphFragment.java index 4ea56bcb..c4d7f935 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/fragments/GraphFragment.java @@ -83,6 +83,8 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { private FloatingActionButton enableMonth; private SharedPreferences prefs; + private int textColor; + private OpenScale openScale; private Calendar calYears; @@ -124,6 +126,9 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { chartBottom.setOnValueTouchListener(new chartBottomValueTouchListener()); chartTop.setOnValueTouchListener(new chartTopValueTouchListener()); + // HACK: get default text color from hidden text view to set the correct axis colors + textColor = ((TextView)graphView.findViewById(R.id.colorHack)).getCurrentTextColor(); + txtYear = (TextView) graphView.findViewById(R.id.txtYear); txtYear.setText(Integer.toString(calYears.get(Calendar.YEAR))); @@ -421,13 +426,13 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { LineChartData lineData = new LineChartData(lines); lineData.setAxisXBottom(new Axis(axisValues). setHasLines(true). - setTextColor(Color.BLACK) + setTextColor(textColor) ); lineData.setAxisYLeft(new Axis(). setHasLines(true). setMaxLabelChars(5). - setTextColor(Color.BLACK) + setTextColor(textColor) ); chartBottom.setLineChartData(lineData); @@ -507,7 +512,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { ColumnChartData columnData = new ColumnChartData(columns); - columnData.setAxisXBottom(new Axis(axisValues).setHasLines(true).setTextColor(Color.BLACK)); + columnData.setAxisXBottom(new Axis(axisValues).setHasLines(true).setTextColor(textColor)); chartTop.setColumnChartData(columnData); chartTop.setValueSelectionEnabled(true); 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/fragments/OverviewFragment.java index 8896d292..9b01235f 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/fragments/OverviewFragment.java @@ -359,13 +359,13 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener LineChartData lineData = new LineChartData(lines); lineData.setAxisXBottom(new Axis(axisValues). setHasLines(true). - setTextColor(Color.BLACK) + setTextColor(txtTitleLastMeasurement.getCurrentTextColor()) ); lineData.setAxisYLeft(new Axis(). setHasLines(true). setMaxLabelChars(5). - setTextColor(Color.BLACK) + setTextColor(txtTitleLastMeasurement.getCurrentTextColor()) ); lineChartLast.setLineChartData(lineData); @@ -405,7 +405,8 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener pieChartData.setHasCenterCircle(true); pieChartData.setCenterText1(String.format("%.2f %s", lastScaleMeasurement.getConvertedWeight(unit), unit.toString())); pieChartData.setCenterText2(DateFormat.getDateInstance(DateFormat.MEDIUM).format(lastScaleMeasurement.getDateTime())); - + pieChartData.setCenterText1Color(txtTitleLastMeasurement.getCurrentTextColor()); + pieChartData.setCenterText2Color(txtTitleLastMeasurement.getCurrentTextColor()); if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE || (getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) { 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 new file mode 100644 index 00000000..6ca949fd --- /dev/null +++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/GeneralPreferences.java @@ -0,0 +1,128 @@ +/* Copyright (C) 2014 olie.xdev +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +*/ +package com.health.openscale.gui.preferences; + +import android.content.SharedPreferences; +import android.os.Bundle; +import android.preference.EditTextPreference; +import android.preference.ListPreference; +import android.preference.MultiSelectListPreference; +import android.preference.Preference; +import android.preference.PreferenceFragment; +import android.preference.PreferenceGroup; +import android.widget.Toast; + +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 { + private static final String PREFERENCE_KEY_APP_THEME = "app_theme"; + + private ListPreference appThemeList; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + addPreferencesFromResource(R.xml.general_preferences); + + appThemeList = (ListPreference)findPreference(PREFERENCE_KEY_APP_THEME); + + appThemeList.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object o) { + Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.info_app_restart_required), Toast.LENGTH_LONG).show(); + + return 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)); + } + } 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()); + } + } + + @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)); + } +} 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/views/MeasurementView.java index 296e445e..830da970 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/views/MeasurementView.java @@ -102,14 +102,13 @@ public abstract class MeasurementView extends TableLayout { iconView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); iconView.setPadding(20,0,20,0); + iconView.setColorFilter(nameView.getCurrentTextColor()); nameView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15); - nameView.setTextColor(Color.BLACK); nameView.setLines(2); nameView.setLayoutParams(new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 0.55f)); valueView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15); - valueView.setTextColor(Color.BLACK); valueView.setGravity(Gravity.RIGHT | Gravity.CENTER); valueView.setPadding(0,0,20,0); valueView.setLayoutParams(new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 0.29f)); @@ -122,6 +121,7 @@ public abstract class MeasurementView extends TableLayout { editModeView.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_editable)); editModeView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); editModeView.setVisibility(View.GONE); + editModeView.setColorFilter(nameView.getCurrentTextColor()); indicatorView.setLayoutParams(new TableRow.LayoutParams(0, LayoutParams.MATCH_PARENT, 0.01f)); indicatorView.setBackgroundColor(Color.GRAY); @@ -185,8 +185,14 @@ public abstract class MeasurementView extends TableLayout { valueView.setGravity(Gravity.RIGHT | Gravity.CENTER); if (!isEditable()) { - editModeView.setImageDrawable(ContextCompat.getDrawable(getContext(), - R.drawable.ic_noteeditable)); + // if measurement is not editable, darken the icon color + float[] hsv = new float[3]; + int color = nameView.getCurrentTextColor(); + Color.colorToHSV(color, hsv); + hsv[2] *= 0.4f; // value component + color = Color.HSVToColor(hsv); + + editModeView.setColorFilter(color); } showEvaluatorRow(false); diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_noteeditable.png b/android_app/app/src/main/res/drawable-hdpi/ic_noteeditable.png deleted file mode 100644 index 33556939..00000000 Binary files a/android_app/app/src/main/res/drawable-hdpi/ic_noteeditable.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_noteeditable.png b/android_app/app/src/main/res/drawable-ldpi/ic_noteeditable.png deleted file mode 100644 index 3ff470bf..00000000 Binary files a/android_app/app/src/main/res/drawable-ldpi/ic_noteeditable.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_noteeditable.png b/android_app/app/src/main/res/drawable-mdpi/ic_noteeditable.png deleted file mode 100644 index ba7d43b6..00000000 Binary files a/android_app/app/src/main/res/drawable-mdpi/ic_noteeditable.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_noteeditable.png b/android_app/app/src/main/res/drawable-xhdpi/ic_noteeditable.png deleted file mode 100644 index 3749773e..00000000 Binary files a/android_app/app/src/main/res/drawable-xhdpi/ic_noteeditable.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_noteeditable.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_noteeditable.png deleted file mode 100644 index 0d322611..00000000 Binary files a/android_app/app/src/main/res/drawable-xxhdpi/ic_noteeditable.png and /dev/null differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_noteeditable.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_noteeditable.png deleted file mode 100644 index 2ad92c9c..00000000 Binary files a/android_app/app/src/main/res/drawable-xxxhdpi/ic_noteeditable.png and /dev/null differ diff --git a/android_app/app/src/main/res/layout/fragment_graph.xml b/android_app/app/src/main/res/layout/fragment_graph.xml index f7183348..69baa54c 100644 --- a/android_app/app/src/main/res/layout/fragment_graph.xml +++ b/android_app/app/src/main/res/layout/fragment_graph.xml @@ -114,48 +114,54 @@ - - -