From f59167f948f55b2d98fc73535b02c897723f2836 Mon Sep 17 00:00:00 2001 From: DreierF Date: Sun, 15 Jan 2017 15:50:25 +0100 Subject: [PATCH] Fixed various bugs (#227) * Fixed crash when opening InputActivity * Fixed critical crash in statistics activity * Collapse unused properties for arrows like for bows * Fixed wrong end number in input Fixed minimum cluster size * Fixed persistence of incomplete ends * Removed timer setting from training * Added arrow diameter input validation * Fixed backup and added automatic label update * Fixed import selection from Google Drive * Added arrow to shooting indoor image * Fixed color in shortcuts * Fixed end index update on delete * Made fab buttons green * Persist last indoor/outdoor selection * Fixed old shots not updating bug * Fixed android test compile * Updated translations * Closed #186 * Closed #188 * Fixed few more bugs * Updated translations * Fixed back stack * Fixed crash in EditStandardRoundFragment * Fixed disabled button color * Fix crash on wear app * Fixed bug in migration * Adjusted test --- .../dreier/mytargets/app/MigrationTest.java | 6 +- .../settings/SettingsActivityTest.java | 15 +- .../settings/SettingsManagerTest.java | 12 ++ .../training/input/InputActivityTest.java | 2 +- .../test/utils/rules/DbTestRuleBase.java | 1 - .../test/utils/rules/SimpleDbTestRule.java | 1 - .../main/assets/migrations/database/18.sql | 7 +- .../SimpleFragmentActivityBase.java | 14 ++ .../header/ExpandableListAdapter.java | 2 +- .../base/fragments/FragmentBase.java | 9 + .../features/arrows/EditArrowFragment.java | 34 +++- .../features/bows/EditBowFragment.java | 2 +- .../features/main/IntroActivity.java | 4 +- .../features/settings/ESettingsScreens.java | 3 + .../settings/OverviewSettingsFragment.java | 20 +++ .../features/settings/SettingsManager.java | 35 +++- .../backup/BackupSettingsFragment.java | 25 ++- .../provider/ExternalStorageBackup.java | 2 +- .../provider/InternalStorageBackup.java | 2 +- .../features/statistics/ArrowStatistic.java | 1 + .../features/timer/TimerFragment.java | 6 +- .../features/training/RoundActivity.java | 1 - .../features/training/RoundFragment.java | 3 +- .../features/training/TrainingFragment.java | 11 +- .../training/edit/EditTrainingFragment.java | 6 - .../training/environment/CurrentWeather.java | 10 +- .../environment/EnvironmentFragment.java | 2 + .../training/input/InputActivity.java | 166 +++++++++++++----- .../features/training/input/TargetView.java | 16 +- .../training/overview/TrainingsFragment.java | 2 +- .../EditStandardRoundFragment.java | 36 ++-- .../dreier/mytargets/utils/IntentWrapper.java | 7 +- .../java/de/dreier/mytargets/utils/Utils.java | 6 + .../views/selector/EnvironmentSelector.java | 11 +- .../views/selector/StandardRoundSelector.java | 2 +- .../ic_app_shortcut_album_blue_24px.xml | 2 +- .../ic_app_shortcut_trending_up_blue_24px.xml | 2 +- app/src/main/res/drawable/ic_house.xml | 9 +- ...600_24dp.xml => ic_timer_grey600_24dp.xml} | 0 ...0_24dp.xml => ic_timer_off_white_24dp.xml} | 9 +- .../main/res/drawable/ic_timer_white_24dp.xml | 24 +++ ...24dp.xml => ic_view_list_grey600_24dp.xml} | 4 +- ..._intro_screen_1.xml => intro_screen_1.xml} | 0 ..._intro_screen_2.xml => intro_screen_2.xml} | 0 app/src/main/res/drawable/timer.xml | 27 --- app/src/main/res/layout/fragment_bows.xml | 12 +- .../main/res/layout/fragment_edit_arrow.xml | 64 ++++++- app/src/main/res/layout/fragment_edit_bow.xml | 5 +- .../res/layout/fragment_edit_training.xml | 15 -- app/src/main/res/menu/input_end.xml | 17 +- app/src/main/res/values-af/strings.xml | 21 ++- app/src/main/res/values-ar/strings.xml | 21 ++- app/src/main/res/values-ca/strings.xml | 21 ++- app/src/main/res/values-cs/strings.xml | 23 ++- app/src/main/res/values-da/strings.xml | 21 ++- app/src/main/res/values-de/strings.xml | 45 +++-- app/src/main/res/values-el/strings.xml | 21 ++- app/src/main/res/values-es/strings.xml | 21 ++- app/src/main/res/values-fi/strings.xml | 21 ++- app/src/main/res/values-fr/strings.xml | 21 ++- app/src/main/res/values-hu/strings.xml | 21 ++- app/src/main/res/values-in/strings.xml | 21 ++- app/src/main/res/values-it/strings.xml | 21 ++- app/src/main/res/values-iw/strings.xml | 21 ++- app/src/main/res/values-ja/strings.xml | 21 ++- app/src/main/res/values-ko/strings.xml | 21 ++- app/src/main/res/values-nl/strings.xml | 21 ++- app/src/main/res/values-no/strings.xml | 21 ++- app/src/main/res/values-pl/strings.xml | 21 ++- app/src/main/res/values-pt-rBR/strings.xml | 21 ++- app/src/main/res/values-pt-rPT/strings.xml | 21 ++- app/src/main/res/values-ro/strings.xml | 21 ++- app/src/main/res/values-ru/strings.xml | 21 ++- app/src/main/res/values-sk/strings.xml | 21 ++- app/src/main/res/values-sl/strings.xml | 21 ++- app/src/main/res/values-sr/strings.xml | 21 ++- app/src/main/res/values-sv/strings.xml | 21 ++- app/src/main/res/values-tr/strings.xml | 21 ++- app/src/main/res/values-uk/strings.xml | 21 ++- app/src/main/res/values-vi/strings.xml | 21 ++- app/src/main/res/values-zh-rCN/strings.xml | 21 ++- app/src/main/res/values-zh-rTW/strings.xml | 21 ++- app/src/main/res/values/colors.xml | 2 +- app/src/main/res/values/strings.xml | 13 +- app/src/main/res/values/styles.xml | 4 +- app/src/main/res/xml/preferences.xml | 30 +++- .../aggregation/IAggregationStrategy.java | 3 +- .../aggregation/cluster/ClusterStrategy.java | 2 +- .../mytargets/shared/models/EBowType.java | 12 +- .../dreier/mytargets/shared/models/Score.java | 55 +++++- .../mytargets/shared/models/db/Arrow.java | 11 ++ .../mytargets/shared/models/db/Bow.java | 23 +++ .../mytargets/shared/models/db/End.java | 16 ++ .../mytargets/shared/models/db/Training.java | 3 - .../shared/views/TargetViewBase.java | 6 +- ...00_24dp.xml => ic_bow_bare_white_24dp.xml} | 2 +- ...4dp.xml => ic_bow_compound_white_24dp.xml} | 2 +- ...0_24dp.xml => ic_bow_horse_white_24dp.xml} | 2 +- ...00_24dp.xml => ic_bow_long_white_24dp.xml} | 2 +- ...24dp.xml => ic_bow_recurve_white_24dp.xml} | 2 +- ...00_24dp.xml => ic_bow_yumi_white_24dp.xml} | 2 +- ....xml => ic_compat_bow_bare_white_24dp.xml} | 2 +- .../ic_compat_bow_compound_grey600_24dp.xml | 18 -- .../ic_compat_bow_compound_white_24dp.xml | 18 ++ ...xml => ic_compat_bow_horse_white_24dp.xml} | 2 +- ....xml => ic_compat_bow_long_white_24dp.xml} | 2 +- .../ic_compat_bow_recurve_grey600_24dp.xml | 18 -- ...l => ic_compat_bow_recurve_white_24dp.xml} | 2 +- .../ic_compat_bow_yumi_white_24dp.xml | 18 ++ .../src/main/res/values-cs/target_faces.xml | 6 +- .../src/main/res/values-de/target_faces.xml | 6 +- 111 files changed, 1299 insertions(+), 355 deletions(-) create mode 100644 app/src/main/java/de/dreier/mytargets/features/settings/OverviewSettingsFragment.java rename app/src/main/res/drawable/{ic_traffic_grey600_24dp.xml => ic_timer_grey600_24dp.xml} (100%) rename app/src/main/res/drawable/{ic_timer_off_grey600_24dp.xml => ic_timer_off_white_24dp.xml} (84%) create mode 100644 app/src/main/res/drawable/ic_timer_white_24dp.xml rename app/src/main/res/drawable/{ic_timer_accent_24dp.xml => ic_view_list_grey600_24dp.xml} (56%) rename app/src/main/res/drawable/{ic_intro_screen_1.xml => intro_screen_1.xml} (100%) rename app/src/main/res/drawable/{ic_intro_screen_2.xml => intro_screen_2.xml} (100%) delete mode 100644 app/src/main/res/drawable/timer.xml rename shared/src/main/res/drawable/{ic_bow_bare_grey600_24dp.xml => ic_bow_bare_white_24dp.xml} (98%) rename shared/src/main/res/drawable/{ic_bow_compound_grey600_24dp.xml => ic_bow_compound_white_24dp.xml} (99%) rename shared/src/main/res/drawable/{ic_bow_horse_grey600_24dp.xml => ic_bow_horse_white_24dp.xml} (98%) rename shared/src/main/res/drawable/{ic_bow_long_grey600_24dp.xml => ic_bow_long_white_24dp.xml} (97%) rename shared/src/main/res/drawable/{ic_bow_recurve_grey600_24dp.xml => ic_bow_recurve_white_24dp.xml} (98%) rename shared/src/main/res/drawable/{ic_bow_yumi_grey600_24dp.xml => ic_bow_yumi_white_24dp.xml} (98%) rename shared/src/main/res/drawable/{ic_compat_bow_bare_grey600_24dp.xml => ic_compat_bow_bare_white_24dp.xml} (91%) delete mode 100644 shared/src/main/res/drawable/ic_compat_bow_compound_grey600_24dp.xml create mode 100644 shared/src/main/res/drawable/ic_compat_bow_compound_white_24dp.xml rename shared/src/main/res/drawable/{ic_compat_bow_long_grey600_24dp.xml => ic_compat_bow_horse_white_24dp.xml} (91%) rename shared/src/main/res/drawable/{ic_compat_bow_yumi_grey600_24dp.xml => ic_compat_bow_long_white_24dp.xml} (91%) delete mode 100644 shared/src/main/res/drawable/ic_compat_bow_recurve_grey600_24dp.xml rename shared/src/main/res/drawable/{ic_compat_bow_horse_grey_600_24dp.xml => ic_compat_bow_recurve_white_24dp.xml} (91%) create mode 100644 shared/src/main/res/drawable/ic_compat_bow_yumi_white_24dp.xml diff --git a/app/src/androidTest/java/de/dreier/mytargets/app/MigrationTest.java b/app/src/androidTest/java/de/dreier/mytargets/app/MigrationTest.java index 181fac929..f7290bd32 100644 --- a/app/src/androidTest/java/de/dreier/mytargets/app/MigrationTest.java +++ b/app/src/androidTest/java/de/dreier/mytargets/app/MigrationTest.java @@ -112,7 +112,6 @@ private void assertTraining1(Training training) { Truth.assertThat(training.bowId).isEqualTo(null); Truth.assertThat(training.arrowId).isEqualTo(null); Truth.assertThat(training.arrowNumbering).isEqualTo(false); - Truth.assertThat(training.timePerEnd).isEqualTo(-1); Truth.assertThat(training.indoor).isEqualTo(true); Truth.assertThat(training.weather).isEqualTo(EWeather.SUNNY); Truth.assertThat(training.windDirection).isEqualTo(0); @@ -125,7 +124,7 @@ private void assertTraining1(Training training) { Truth.assertThat(rounds.get(1).getId()).isEqualTo(2L); Truth.assertThat(rounds.get(1).trainingId).isEqualTo(1L); Truth.assertThat(rounds.get(1).index).isEqualTo(1); - Truth.assertThat(rounds.get(1).shotsPerEnd).isEqualTo(2); + Truth.assertThat(rounds.get(1).shotsPerEnd).isEqualTo(3); Truth.assertThat(rounds.get(1).maxEndCount).isEqualTo(null); Truth.assertThat(rounds.get(1).distance).isEqualTo(new Dimension(20, METER)); Truth.assertThat(rounds.get(1).comment).isEqualTo("Kommentar"); @@ -140,7 +139,7 @@ private void assertRound11(List rounds) { Truth.assertThat(round1.getId()).isEqualTo(1L); Truth.assertThat(round1.trainingId).isEqualTo(1L); Truth.assertThat(round1.index).isEqualTo(0); - Truth.assertThat(round1.shotsPerEnd).isEqualTo(3); + Truth.assertThat(round1.shotsPerEnd).isEqualTo(4); Truth.assertThat(round1.maxEndCount).isEqualTo(null); Truth.assertThat(round1.distance).isEqualTo(new Dimension(50, METER)); Truth.assertThat(round1.comment).isEqualTo(""); @@ -177,7 +176,6 @@ private void assertTraining2(Training training) { Truth.assertThat(training.bowId).isEqualTo(1); Truth.assertThat(training.arrowId).isEqualTo(1); Truth.assertThat(training.arrowNumbering).isEqualTo(false); - Truth.assertThat(training.timePerEnd).isEqualTo(-1); Truth.assertThat(training.indoor).isEqualTo(false); Truth.assertThat(training.weather).isEqualTo(EWeather.LIGHT_RAIN); Truth.assertThat(training.windDirection).isEqualTo(0); diff --git a/app/src/androidTest/java/de/dreier/mytargets/features/settings/SettingsActivityTest.java b/app/src/androidTest/java/de/dreier/mytargets/features/settings/SettingsActivityTest.java index 73de2d67d..7d96aaf02 100644 --- a/app/src/androidTest/java/de/dreier/mytargets/features/settings/SettingsActivityTest.java +++ b/app/src/androidTest/java/de/dreier/mytargets/features/settings/SettingsActivityTest.java @@ -77,6 +77,11 @@ public void settingsActivityTest() { clickOnPreference(1); + matchToolbarTitle(getActivity().getString(R.string.overview)); + pressBack(); + + clickOnPreference(2); + matchToolbarTitle(getActivity().getString(R.string.input)); matchPreferenceSummary(7, "3.0x"); @@ -94,7 +99,7 @@ public void settingsActivityTest() { pressBack(); matchToolbarTitle(getActivity().getString(R.string.preferences)); - clickOnPreference(2); + clickOnPreference(3); matchToolbarTitle(getActivity().getString(R.string.scoreboard)); clickOnPreference(1); @@ -133,7 +138,7 @@ public void settingsActivityTest() { pressBack(); matchToolbarTitle(getActivity().getString(R.string.preferences)); - clickOnPreference(3); + clickOnPreference(4); matchToolbarTitle(getActivity().getString(R.string.timer)); matchPreferenceSummary(0, getActivity() @@ -147,16 +152,16 @@ public void settingsActivityTest() { pressBack(); - clickOnPreference(5); + clickOnPreference(6); allowPermissionsIfNeeded(getActivity(), WRITE_EXTERNAL_STORAGE); matchToolbarTitle(getActivity().getString(R.string.backup_action)); pressBack(); - clickOnPreference(7); + clickOnPreference(8); matchToolbarTitle(getActivity().getString(R.string.about)); pressBack(); - clickOnPreference(8); + clickOnPreference(9); matchToolbarTitle(getActivity().getString(R.string.licences)); pressBack(); } diff --git a/app/src/androidTest/java/de/dreier/mytargets/features/settings/SettingsManagerTest.java b/app/src/androidTest/java/de/dreier/mytargets/features/settings/SettingsManagerTest.java index 37a632442..99a93a4c7 100644 --- a/app/src/androidTest/java/de/dreier/mytargets/features/settings/SettingsManagerTest.java +++ b/app/src/androidTest/java/de/dreier/mytargets/features/settings/SettingsManagerTest.java @@ -37,6 +37,7 @@ import de.dreier.mytargets.features.training.input.TargetView; import de.dreier.mytargets.shared.analysis.aggregation.EAggregationStrategy; import de.dreier.mytargets.shared.models.Dimension; +import de.dreier.mytargets.shared.models.Score; import de.dreier.mytargets.shared.models.Target; import de.dreier.mytargets.shared.targets.models.NFAAAnimal; import de.dreier.mytargets.shared.targets.models.WAFull; @@ -294,4 +295,15 @@ public void setInputSummaryConfiguration() { SettingsManager.setInputSummaryConfiguration(config); assertThat(SettingsManager.getInputSummaryConfiguration()).isEqualTo(config); } + + @Test + public void setScoreConfiguration() { + Score.Configuration config = new Score.Configuration(); + config.showReachedScore = true; + config.showTotalScore = true; + config.showPercentage = false; + config.showAverage = true; + SettingsManager.setScoreConfiguration(config); + assertThat(SettingsManager.getScoreConfiguration()).isEqualTo(config); + } } \ No newline at end of file diff --git a/app/src/androidTest/java/de/dreier/mytargets/features/training/input/InputActivityTest.java b/app/src/androidTest/java/de/dreier/mytargets/features/training/input/InputActivityTest.java index 19fe007e8..4cfa9c409 100644 --- a/app/src/androidTest/java/de/dreier/mytargets/features/training/input/InputActivityTest.java +++ b/app/src/androidTest/java/de/dreier/mytargets/features/training/input/InputActivityTest.java @@ -82,7 +82,7 @@ public void inputActivityTest() { onView(allOf(withContentDescription("X"), withId(R.id.targetView))) .check(doesNotExist()); - clickActionBarItem(R.id.action_show_sidebar, R.string.keyboard); + clickActionBarItem(R.id.action_keyboard, R.string.keyboard); //onView(withContentDescription("X")).check(matches(isDisplayed())); } diff --git a/app/src/androidTest/java/de/dreier/mytargets/test/utils/rules/DbTestRuleBase.java b/app/src/androidTest/java/de/dreier/mytargets/test/utils/rules/DbTestRuleBase.java index 148b15e1b..4ca9e162b 100644 --- a/app/src/androidTest/java/de/dreier/mytargets/test/utils/rules/DbTestRuleBase.java +++ b/app/src/androidTest/java/de/dreier/mytargets/test/utils/rules/DbTestRuleBase.java @@ -130,7 +130,6 @@ protected Training saveDefaultTraining(Long standardRoundId, Random generator) { training.bowId = null; training.arrowId = null; training.arrowNumbering = false; - training.timePerEnd = 0; training.save(); return training; } diff --git a/app/src/androidTest/java/de/dreier/mytargets/test/utils/rules/SimpleDbTestRule.java b/app/src/androidTest/java/de/dreier/mytargets/test/utils/rules/SimpleDbTestRule.java index 881bf1a29..03f22ca6a 100644 --- a/app/src/androidTest/java/de/dreier/mytargets/test/utils/rules/SimpleDbTestRule.java +++ b/app/src/androidTest/java/de/dreier/mytargets/test/utils/rules/SimpleDbTestRule.java @@ -147,7 +147,6 @@ private void addFullTraining(Bow bow) { training.bowId = bow.id; training.arrowId = null; training.arrowNumbering = false; - training.timePerEnd = 0; training.save(); Round round1 = new Round(standardRound.getRounds().get(0)); diff --git a/app/src/main/assets/migrations/database/18.sql b/app/src/main/assets/migrations/database/18.sql index 3b8842c18..00c8f46fd 100644 --- a/app/src/main/assets/migrations/database/18.sql +++ b/app/src/main/assets/migrations/database/18.sql @@ -131,7 +131,6 @@ CREATE TABLE IF NOT EXISTS `Training`( `bow` INTEGER, `arrow` INTEGER, `arrowNumbering` INTEGER, - `timePerEnd` INTEGER, `indoor` INTEGER, `weather` INTEGER, `windDirection` INTEGER, @@ -147,7 +146,7 @@ UPDATE TRAINING_OLD SET arrow = null WHERE arrow < 1; INSERT INTO `Training` SELECT t.`_id`,t.`title`,t.`datum`, CASE WHEN s.club < 512 THEN t.`standard_round` ELSE NULL END, - t.`bow`,t.`arrow`, t.`arrow_numbering`,t.`time`, + t.`bow`,t.`arrow`, t.`arrow_numbering`, s.`indoor`,t.`weather`,t.`wind_direction`,t.`wind_speed`,t.`location` FROM TRAINING_OLD t, STANDARD_ROUND_TEMPLATE_OLD s WHERE t.standard_round=s._id; @@ -167,8 +166,8 @@ CREATE TABLE IF NOT EXISTS `Round`( FOREIGN KEY(`training`) REFERENCES Training(`_id`) ON UPDATE NO ACTION ON DELETE CASCADE ); INSERT INTO `Round` - SELECT r.`_id`,r.`training`,t.`r_index`,t.`passes`, - CASE WHEN s.club = 512 THEN NULL ELSE t.`arrows` END, + SELECT r.`_id`,r.`training`,t.`r_index`,t.`arrows`, + CASE WHEN s.club = 512 THEN NULL ELSE t.`passes` END, t.`distance` || ' ' || t.`unit`, r.`comment`,r.`target`,r.`scoring_style`, t.`size` || ' ' || t.`target_unit` FROM ROUND_OLD r, ROUND_TEMPLATE_OLD t, STANDARD_ROUND_TEMPLATE_OLD s diff --git a/app/src/main/java/de/dreier/mytargets/base/activities/SimpleFragmentActivityBase.java b/app/src/main/java/de/dreier/mytargets/base/activities/SimpleFragmentActivityBase.java index ab6086eff..9ced752ef 100644 --- a/app/src/main/java/de/dreier/mytargets/base/activities/SimpleFragmentActivityBase.java +++ b/app/src/main/java/de/dreier/mytargets/base/activities/SimpleFragmentActivityBase.java @@ -15,6 +15,7 @@ package de.dreier.mytargets.base.activities; +import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; @@ -49,4 +50,17 @@ public void onCreate(Bundle savedInstanceState) { public Fragment getChildFragment() { return getSupportFragmentManager().findFragmentByTag(FRAGMENT_TAG); } + + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + setIntent(intent); + childFragment = instantiateFragment(); + Bundle bundle = intent != null ? intent.getExtras() : null; + childFragment.setArguments(bundle); + + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + ft.replace(android.R.id.content, childFragment, FRAGMENT_TAG); + ft.commit(); + } } \ No newline at end of file diff --git a/app/src/main/java/de/dreier/mytargets/base/adapters/header/ExpandableListAdapter.java b/app/src/main/java/de/dreier/mytargets/base/adapters/header/ExpandableListAdapter.java index fe193982e..7eab28aa2 100644 --- a/app/src/main/java/de/dreier/mytargets/base/adapters/header/ExpandableListAdapter.java +++ b/app/src/main/java/de/dreier/mytargets/base/adapters/header/ExpandableListAdapter.java @@ -146,7 +146,7 @@ protected HeaderViewHolder

getTopLevelViewHolder(ViewGroup parent) { return new HeaderViewHolder<>(itemView); } - private static class HeaderViewHolder

extends ExpandableHeaderBindingHolder
{ + private static class HeaderViewHolder

extends ExpandableHeaderBindingHolder

{ private final ItemHeaderExpandableBinding binding; HeaderViewHolder(View itemView) { diff --git a/app/src/main/java/de/dreier/mytargets/base/fragments/FragmentBase.java b/app/src/main/java/de/dreier/mytargets/base/fragments/FragmentBase.java index 793535215..27836abf0 100644 --- a/app/src/main/java/de/dreier/mytargets/base/fragments/FragmentBase.java +++ b/app/src/main/java/de/dreier/mytargets/base/fragments/FragmentBase.java @@ -16,6 +16,7 @@ package de.dreier.mytargets.base.fragments; import android.os.Bundle; +import android.support.annotation.CallSuper; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.UiThread; @@ -25,6 +26,8 @@ import android.support.v4.content.AsyncTaskLoader; import android.support.v4.content.Loader; +import com.google.firebase.analytics.FirebaseAnalytics; + import de.dreier.mytargets.R; import de.dreier.mytargets.utils.Utils; import icepick.Icepick; @@ -38,9 +41,15 @@ public abstract class FragmentBase extends Fragment implements LoaderManager.Loa private static final int LOADER_ID = 0; + public void logEvent(String event) { + FirebaseAnalytics.getInstance(getContext()).logEvent(event, null); + } + + @CallSuper @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + logEvent(getClass().getSimpleName()); Icepick.restoreInstanceState(this, savedInstanceState); } diff --git a/app/src/main/java/de/dreier/mytargets/features/arrows/EditArrowFragment.java b/app/src/main/java/de/dreier/mytargets/features/arrows/EditArrowFragment.java index ea129b5ef..847f0f105 100644 --- a/app/src/main/java/de/dreier/mytargets/features/arrows/EditArrowFragment.java +++ b/app/src/main/java/de/dreier/mytargets/features/arrows/EditArrowFragment.java @@ -61,6 +61,7 @@ public static IntentWrapper editIntent(Arrow arrow) { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = super.onCreateView(inflater, container, savedInstanceState); contentBinding = FragmentEditArrowBinding.inflate(inflater, binding.content, true); + contentBinding.moreFields.setOnClickListener(v -> contentBinding.setShowAll(true)); if (savedInstanceState == null) { Bundle bundle = getArguments(); @@ -73,9 +74,9 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa } setImageFiles(arrow.getImages()); - ToolbarUtils.setTitle(this, arrow.name); contentBinding.diameterUnit.setSelection(arrow.diameter.unit == MILLIMETER ? 0 : 1); } + ToolbarUtils.setTitle(this, arrow.name); contentBinding.setArrow(arrow); loadImage(imageFile); return rootView; @@ -90,10 +91,41 @@ public void onSaveInstanceState(Bundle outState) { @Override public void onSave() { super.onSave(); + if (!validateInput()) { + return; + } buildArrow().save(); finish(); } + private boolean validateInput() { + float diameterValue; + try { + diameterValue = Float.parseFloat(contentBinding.diameter.getText().toString()); + } catch (NumberFormatException ignored) { + contentBinding.diameterTextInputLayout + .setError(getString(R.string.invalid_decimal_number)); + return false; + } + final int selectedUnit = contentBinding.diameterUnit.getSelectedItemPosition(); + Dimension.Unit diameterUnit = selectedUnit == 0 ? MILLIMETER : INCH; + if (diameterUnit == MILLIMETER) { + if (diameterValue < 1 || diameterValue > 20) { + contentBinding.diameterTextInputLayout + .setError(getString(R.string.not_within_expected_range_mm)); + return false; + } + } else { + if (diameterValue < 0 || diameterValue > 1) { + contentBinding.diameterTextInputLayout + .setError(getString(R.string.not_within_expected_range_inch)); + return false; + } + } + contentBinding.diameterTextInputLayout.setError(null); + return true; + } + private Arrow buildArrow() { arrow.name = contentBinding.name.getText().toString(); arrow.length = contentBinding.length.getText().toString(); diff --git a/app/src/main/java/de/dreier/mytargets/features/bows/EditBowFragment.java b/app/src/main/java/de/dreier/mytargets/features/bows/EditBowFragment.java index a1f8e60b1..9b2085185 100644 --- a/app/src/main/java/de/dreier/mytargets/features/bows/EditBowFragment.java +++ b/app/src/main/java/de/dreier/mytargets/features/bows/EditBowFragment.java @@ -100,8 +100,8 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa bow.getSightMarks().add(new SightMark()); } setImageFiles(bow.getImages()); - ToolbarUtils.setTitle(this, bow.name); } + ToolbarUtils.setTitle(this, bow.name); contentBinding.setBow(bow); loadImage(imageFile); diff --git a/app/src/main/java/de/dreier/mytargets/features/main/IntroActivity.java b/app/src/main/java/de/dreier/mytargets/features/main/IntroActivity.java index da9c64b99..7757f92ac 100644 --- a/app/src/main/java/de/dreier/mytargets/features/main/IntroActivity.java +++ b/app/src/main/java/de/dreier/mytargets/features/main/IntroActivity.java @@ -34,7 +34,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { addSlide(new SlideFragmentBuilder() .backgroundColor(R.color.introBackground) .buttonsColor(R.color.colorAccent) - .image(R.drawable.ic_intro_screen_1) + .image(R.drawable.intro_screen_1) .title(getString(R.string.intro_title_track_training_progress)) .description(getString(R.string.intro_description_track_training_progress)) .build()); @@ -42,7 +42,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { addSlide(new SlideFragmentBuilder() .backgroundColor(R.color.introBackground) .buttonsColor(R.color.colorAccent) - .image(R.drawable.ic_intro_screen_2) + .image(R.drawable.intro_screen_2) .title(getString(R.string.intro_title_everything_in_one_place)) .description(getString(R.string.intro_description_everything_in_one_place)) .build()); diff --git a/app/src/main/java/de/dreier/mytargets/features/settings/ESettingsScreens.java b/app/src/main/java/de/dreier/mytargets/features/settings/ESettingsScreens.java index 83be29b52..147402ce0 100644 --- a/app/src/main/java/de/dreier/mytargets/features/settings/ESettingsScreens.java +++ b/app/src/main/java/de/dreier/mytargets/features/settings/ESettingsScreens.java @@ -19,6 +19,7 @@ public enum ESettingsScreens { MAIN(MainSettingsFragment.class), + OVERVIEW(OverviewSettingsFragment.class), INPUT(InputSettingsFragment.class), TIMER(TimerSettingsFragment.class), SCOREBOARD(ScoreboardSettingsFragment.class), @@ -32,6 +33,8 @@ public enum ESettingsScreens { public static ESettingsScreens from(String key) { switch (key) { + case "overview": + return OVERVIEW; case "input": return INPUT; case "timer": diff --git a/app/src/main/java/de/dreier/mytargets/features/settings/OverviewSettingsFragment.java b/app/src/main/java/de/dreier/mytargets/features/settings/OverviewSettingsFragment.java new file mode 100644 index 000000000..f0e46ca9f --- /dev/null +++ b/app/src/main/java/de/dreier/mytargets/features/settings/OverviewSettingsFragment.java @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2017 Florian Dreier + * + * This file is part of MyTargets. + * + * MyTargets is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 + * as published by the Free Software Foundation. + * + * MyTargets 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. + */ + +package de.dreier.mytargets.features.settings; + +public class OverviewSettingsFragment extends SettingsFragmentBase { + +} diff --git a/app/src/main/java/de/dreier/mytargets/features/settings/SettingsManager.java b/app/src/main/java/de/dreier/mytargets/features/settings/SettingsManager.java index 2a63804f9..3f4222454 100644 --- a/app/src/main/java/de/dreier/mytargets/features/settings/SettingsManager.java +++ b/app/src/main/java/de/dreier/mytargets/features/settings/SettingsManager.java @@ -36,6 +36,7 @@ import de.dreier.mytargets.features.training.input.TargetView.EKeyboardType; import de.dreier.mytargets.shared.analysis.aggregation.EAggregationStrategy; import de.dreier.mytargets.shared.models.Dimension; +import de.dreier.mytargets.shared.models.Score; import de.dreier.mytargets.shared.models.Target; import de.dreier.mytargets.shared.views.TargetViewBase; @@ -49,14 +50,14 @@ public class SettingsManager { public static final String KEY_PROFILE_LAST_NAME = "profile_last_name"; public static final String KEY_PROFILE_BIRTHDAY = "profile_birthday"; public static final String KEY_PROFILE_CLUB = "profile_club"; - private static final String KEY_INPUT_SUMMARY_SHOW_END = "input_summary_show_end"; - private static final String KEY_INPUT_SUMMARY_SHOW_ROUND = "input_summary_show_round"; - private static final String KEY_INPUT_SUMMARY_SHOW_TRAINING = "input_summary_show_training"; - private static final String KEY_INPUT_SUMMARY_SHOW_AVERAGE = "input_summary_show_average"; public static final String KEY_INPUT_SUMMARY_AVERAGE_OF = "input_summary_average_of"; public static final String KEY_INPUT_ARROW_DIAMETER_SCALE = "input_arrow_diameter_scale"; public static final String KEY_INPUT_TARGET_ZOOM = "input_target_zoom"; public static final String KEY_INPUT_KEYBOARD_TYPE = "input_keyboard_type"; + private static final String KEY_INPUT_SUMMARY_SHOW_END = "input_summary_show_end"; + private static final String KEY_INPUT_SUMMARY_SHOW_ROUND = "input_summary_show_round"; + private static final String KEY_INPUT_SUMMARY_SHOW_TRAINING = "input_summary_show_training"; + private static final String KEY_INPUT_SUMMARY_SHOW_AVERAGE = "input_summary_show_average"; private static final String KEY_FIRST_TRAINING_SHOWN = "first_training_shown"; private static final String KEY_BACKUP_INTERVAL = "backup_interval"; private static final String KEY_DONATED = "donated"; @@ -88,9 +89,13 @@ public class SettingsManager { private static final String KEY_BACKUP_AUTOMATICALLY = "backup_automatically"; private static final String KEY_STANDARD_ROUNDS_LAST_USED = "standard_round_last_used"; private static final String KEY_INTRO_SHOWED = "intro_showed"; + private static final String KEY_OVERVIEW_SHOW_REACHED_SCORE = "overview_show_reached_score"; + private static final String KEY_OVERVIEW_SHOW_TOTAL_SCORE = "overview_show_total_score"; + private static final String KEY_OVERVIEW_SHOW_PERCENTAGE = "overview_show_percentage"; + private static final String KEY_OVERVIEW_SHOW_ARROW_AVERAGE = "overview_show_arrow_average"; - public static int getStandardRound() { - return lastUsed.getInt(KEY_STANDARD_ROUND, 32); + public static Long getStandardRound() { + return (long) lastUsed.getInt(KEY_STANDARD_ROUND, 32); } public static void setStandardRound(long id) { @@ -530,4 +535,22 @@ public static void setInputSummaryConfiguration(SummaryConfiguration configurati .putString(KEY_INPUT_SUMMARY_AVERAGE_OF, configuration.averageScope.name()) .apply(); } + + public static Score.Configuration getScoreConfiguration() { + Score.Configuration config = new Score.Configuration(); + config.showReachedScore = preferences.getBoolean(KEY_OVERVIEW_SHOW_REACHED_SCORE, true); + config.showTotalScore = preferences.getBoolean(KEY_OVERVIEW_SHOW_TOTAL_SCORE, true); + config.showPercentage = preferences.getBoolean(KEY_OVERVIEW_SHOW_PERCENTAGE, false); + config.showAverage = preferences.getBoolean(KEY_OVERVIEW_SHOW_ARROW_AVERAGE, false); + return config; + } + + public static void setScoreConfiguration(Score.Configuration configuration) { + preferences.edit() + .putBoolean(KEY_OVERVIEW_SHOW_REACHED_SCORE, configuration.showReachedScore) + .putBoolean(KEY_OVERVIEW_SHOW_TOTAL_SCORE, configuration.showTotalScore) + .putBoolean(KEY_OVERVIEW_SHOW_PERCENTAGE, configuration.showPercentage) + .putBoolean(KEY_OVERVIEW_SHOW_ARROW_AVERAGE, configuration.showAverage) + .apply(); + } } diff --git a/app/src/main/java/de/dreier/mytargets/features/settings/backup/BackupSettingsFragment.java b/app/src/main/java/de/dreier/mytargets/features/settings/backup/BackupSettingsFragment.java index 4ea3d3c05..39af815db 100644 --- a/app/src/main/java/de/dreier/mytargets/features/settings/backup/BackupSettingsFragment.java +++ b/app/src/main/java/de/dreier/mytargets/features/settings/backup/BackupSettingsFragment.java @@ -45,6 +45,8 @@ import java.util.Arrays; import java.util.List; import java.util.Locale; +import java.util.Timer; +import java.util.TimerTask; import de.dreier.mytargets.R; import de.dreier.mytargets.databinding.FragmentBackupBinding; @@ -76,6 +78,7 @@ public class BackupSettingsFragment extends SettingsFragmentBase implements IAsy private IAsyncBackupRestore backup; private BackupAdapter adapter; private FragmentBackupBinding binding; + private Timer updateLabelTimer; /** * Handle to a SyncObserver. The ProgressBar element is visible until the SyncObserver reports * that the sync is complete. @@ -258,6 +261,9 @@ public void onPause() { if (backup != null) { backup.stop(); } + if (updateLabelTimer != null) { + updateLabelTimer.cancel(); + } if (mSyncObserverHandle != null) { ContentResolver.removeStatusChangeListener(mSyncObserverHandle); mSyncObserverHandle = null; @@ -298,9 +304,22 @@ private void onBackupsLoaded(List list) { binding.recentBackupsList.setVisibility(VISIBLE); adapter.setList(list); binding.lastBackupLabel.setVisibility(list.size() > 0 ? VISIBLE : GONE); + if (updateLabelTimer != null) { + updateLabelTimer.cancel(); + } if (list.size() > 0) { - binding.lastBackupLabel.setText(getString(R.string.last_backup, DateUtils - .getRelativeTimeSpanString(list.get(0).getModifiedDate().getTime()))); + final long time = list.get(0).getModifiedDate().getTime(); + updateLabelTimer = new Timer(); + TimerTask timerTask = new TimerTask() { + @Override + public void run() { + getActivity().runOnUiThread(() -> + binding.lastBackupLabel + .setText(getString(R.string.last_backup, DateUtils + .getRelativeTimeSpanString(time)))); + } + }; + updateLabelTimer.schedule(timerTask, 0, 10000); } } @@ -375,7 +394,7 @@ public void onError(String message) { @NeedsPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) void showFilePicker() { final Intent getContentIntent = new Intent(Intent.ACTION_GET_CONTENT); - getContentIntent.setType("*/zip"); + getContentIntent.setType("application/zip"); getContentIntent.addCategory(Intent.CATEGORY_OPENABLE); Intent intent = Intent.createChooser(getContentIntent, getString(R.string.select_a_file)); startActivityForResult(intent, IMPORT_FROM_URI); diff --git a/app/src/main/java/de/dreier/mytargets/features/settings/backup/provider/ExternalStorageBackup.java b/app/src/main/java/de/dreier/mytargets/features/settings/backup/provider/ExternalStorageBackup.java index 1d6a5216f..2bce33d61 100644 --- a/app/src/main/java/de/dreier/mytargets/features/settings/backup/provider/ExternalStorageBackup.java +++ b/app/src/main/java/de/dreier/mytargets/features/settings/backup/provider/ExternalStorageBackup.java @@ -105,7 +105,7 @@ public void getBackups(OnLoadFinishedListener listener) { } private boolean isBackup(File file) { - return file.isFile() && file.getName().startsWith("backup_") && file.getName() + return file.isFile() && file.getName().contains("backup_") && file.getName() .endsWith(".zip"); } diff --git a/app/src/main/java/de/dreier/mytargets/features/settings/backup/provider/InternalStorageBackup.java b/app/src/main/java/de/dreier/mytargets/features/settings/backup/provider/InternalStorageBackup.java index 981c8dbb3..b8bc6a979 100644 --- a/app/src/main/java/de/dreier/mytargets/features/settings/backup/provider/InternalStorageBackup.java +++ b/app/src/main/java/de/dreier/mytargets/features/settings/backup/provider/InternalStorageBackup.java @@ -82,7 +82,7 @@ public void getBackups(OnLoadFinishedListener listener) { } private boolean isBackup(File file) { - return file.isFile() && file.getName().startsWith("backup_") && file.getName() + return file.isFile() && file.getName().contains("backup_") && file.getName() .endsWith(".zip"); } diff --git a/app/src/main/java/de/dreier/mytargets/features/statistics/ArrowStatistic.java b/app/src/main/java/de/dreier/mytargets/features/statistics/ArrowStatistic.java index 97e34c222..14e0a652d 100644 --- a/app/src/main/java/de/dreier/mytargets/features/statistics/ArrowStatistic.java +++ b/app/src/main/java/de/dreier/mytargets/features/statistics/ArrowStatistic.java @@ -71,6 +71,7 @@ public static List getAll(Target target, List rounds) { return Stream.of(t.getValue()) .flatMap(r -> Stream.of(r.getEnds()) .flatMap(e -> Stream.of(e.getShots()))) + .filter(s -> s.arrowNumber != null) .groupBy(shot -> shot.arrowNumber) .filter(entry -> entry.getValue().size() > 1) .map(stringListEntry -> new ArrowStatistic(arrow.getName(), diff --git a/app/src/main/java/de/dreier/mytargets/features/timer/TimerFragment.java b/app/src/main/java/de/dreier/mytargets/features/timer/TimerFragment.java index a78cbc9c2..fb3fb7f8e 100644 --- a/app/src/main/java/de/dreier/mytargets/features/timer/TimerFragment.java +++ b/app/src/main/java/de/dreier/mytargets/features/timer/TimerFragment.java @@ -49,7 +49,6 @@ */ public class TimerFragment extends FragmentBase implements View.OnClickListener { - private static final String SHOOTING_TIME = "shooting_time"; private TimerState mCurStatus = WAIT_FOR_START; private CountDownTimer countdown; private MediaPlayer horn; @@ -58,9 +57,8 @@ public class TimerFragment extends FragmentBase implements View.OnClickListener private FragmentTimerBinding binding; @NonNull - public static IntentWrapper getIntent(int timePerEnd) { - return new IntentWrapper(TimerActivity.class) - .with(SHOOTING_TIME, timePerEnd); + public static IntentWrapper getIntent() { + return new IntentWrapper(TimerActivity.class); } @Override diff --git a/app/src/main/java/de/dreier/mytargets/features/training/RoundActivity.java b/app/src/main/java/de/dreier/mytargets/features/training/RoundActivity.java index e02eb8609..d4d3ea034 100644 --- a/app/src/main/java/de/dreier/mytargets/features/training/RoundActivity.java +++ b/app/src/main/java/de/dreier/mytargets/features/training/RoundActivity.java @@ -25,5 +25,4 @@ public class RoundActivity extends SimpleFragmentActivityBase { public Fragment instantiateFragment() { return new RoundFragment(); } - } diff --git a/app/src/main/java/de/dreier/mytargets/features/training/RoundFragment.java b/app/src/main/java/de/dreier/mytargets/features/training/RoundFragment.java index 84010573e..d101b2488 100644 --- a/app/src/main/java/de/dreier/mytargets/features/training/RoundFragment.java +++ b/app/src/main/java/de/dreier/mytargets/features/training/RoundFragment.java @@ -67,7 +67,8 @@ public RoundFragment() { @NonNull public static IntentWrapper getIntent(Round round) { return new IntentWrapper(RoundActivity.class) - .with(ROUND_ID, round.getId()); + .with(ROUND_ID, round.getId()) + .clearTopSingleTop(); } @Override diff --git a/app/src/main/java/de/dreier/mytargets/features/training/TrainingFragment.java b/app/src/main/java/de/dreier/mytargets/features/training/TrainingFragment.java index 0393321e4..210060b81 100644 --- a/app/src/main/java/de/dreier/mytargets/features/training/TrainingFragment.java +++ b/app/src/main/java/de/dreier/mytargets/features/training/TrainingFragment.java @@ -31,6 +31,8 @@ import com.annimon.stream.Collectors; import com.annimon.stream.Stream; +import junit.framework.Assert; + import java.util.List; import java.util.Locale; @@ -42,6 +44,7 @@ import de.dreier.mytargets.features.rounds.EditRoundFragment; import de.dreier.mytargets.features.scoreboard.HtmlUtils; import de.dreier.mytargets.features.scoreboard.ScoreboardActivity; +import de.dreier.mytargets.features.settings.SettingsManager; import de.dreier.mytargets.features.statistics.StatisticsActivity; import de.dreier.mytargets.shared.models.db.Round; import de.dreier.mytargets.shared.models.db.Training; @@ -88,9 +91,8 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa binding.recyclerView.setAdapter(adapter); // Get training - if (getArguments() != null) { - trainingId = getArguments().getLong(ITEM_ID); - } + Assert.assertNotNull(getArguments()); + trainingId = getArguments().getLong(ITEM_ID); binding.fab.setVisibility(View.GONE); binding.fab.setOnClickListener(view -> { @@ -219,7 +221,8 @@ public void bindItem() { } else { binding.subtitle.setVisibility(View.VISIBLE); } - binding.points.setText(item.getReachedScore().toString()); + binding.points.setText( + item.getReachedScore().format(SettingsManager.getScoreConfiguration())); } } } diff --git a/app/src/main/java/de/dreier/mytargets/features/training/edit/EditTrainingFragment.java b/app/src/main/java/de/dreier/mytargets/features/training/edit/EditTrainingFragment.java index 7b6c02aa3..35cfa5f6c 100644 --- a/app/src/main/java/de/dreier/mytargets/features/training/edit/EditTrainingFragment.java +++ b/app/src/main/java/de/dreier/mytargets/features/training/edit/EditTrainingFragment.java @@ -139,9 +139,7 @@ public void onStopTrackingTouch(DiscreteSeekBar seekBar) { binding.standardRound.setOnUpdateListener( item -> roundTarget = item.getRounds().get(0).getTargetTemplate()); binding.numberArrows.setChecked(SettingsManager.getArrowNumbersEnabled()); - binding.timer.setChecked(SettingsManager.getTimerEnabled()); binding.environment.queryWeather(this, REQUEST_LOCATION_PERMISSION); - final StandardRound item = binding.standardRound.getSelectedItem(); roundTarget = item.getRounds().get(0).getTargetTemplate(); } else { @@ -155,7 +153,6 @@ public void onStopTrackingTouch(DiscreteSeekBar seekBar) { binding.environment.setItem(train.getEnvironment()); setTrainingDate(); binding.notEditable.setVisibility(View.GONE); - binding.timer.setChecked(train.timePerEnd != -1); } binding.standardRound.setOnActivityResultContext(this); binding.standardRound.setOnUpdateListener(this::updateChangeTargetFaceVisibility); @@ -292,13 +289,10 @@ private Training getTraining() { .getId(); training.arrowId = binding.arrow.getSelectedItem() == null ? null : binding.arrow .getSelectedItem().getId(); - training.timePerEnd = binding.timer.isChecked() ? SettingsManager - .getTimerShootTime() : -1; training.arrowNumbering = binding.numberArrows.isChecked(); SettingsManager.setBow(training.bowId); SettingsManager.setArrow(training.arrowId); - SettingsManager.setTimerEnabled(binding.timer.isChecked()); SettingsManager.setArrowNumbersEnabled(training.arrowNumbering); SettingsManager.setIndoor(training.indoor); return training; diff --git a/app/src/main/java/de/dreier/mytargets/features/training/environment/CurrentWeather.java b/app/src/main/java/de/dreier/mytargets/features/training/environment/CurrentWeather.java index acf368421..974a3fc92 100644 --- a/app/src/main/java/de/dreier/mytargets/features/training/environment/CurrentWeather.java +++ b/app/src/main/java/de/dreier/mytargets/features/training/environment/CurrentWeather.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.List; +import de.dreier.mytargets.features.settings.SettingsManager; import de.dreier.mytargets.shared.models.EWeather; import de.dreier.mytargets.shared.models.Environment; @@ -33,8 +34,6 @@ public class CurrentWeather { public List weather = new ArrayList<>(); @SerializedName("wind") public Wind wind; - @SerializedName("clouds") - public Clouds clouds; private static Double mpsToKmh(Double mps) { return mps / 0.277777778; @@ -47,7 +46,7 @@ private static int kmhToBeaufort(Double kmh) { public Environment toEnvironment() { Environment e = new Environment(); int code = Integer.parseInt(weather.get(0).icon.substring(0, 2)); - e.indoor = false; + e.indoor = SettingsManager.getIndoor(); e.weather = imageCodeToWeather(code); e.windDirection = 0; e.location = cityName; @@ -74,11 +73,6 @@ private EWeather imageCodeToWeather(int code) { } } - public class Clouds { - @SerializedName("all") - public Integer all; - } - public class Wind { @SerializedName("speed") public Double speed; diff --git a/app/src/main/java/de/dreier/mytargets/features/training/environment/EnvironmentFragment.java b/app/src/main/java/de/dreier/mytargets/features/training/environment/EnvironmentFragment.java index dc613f18b..3446a06ca 100644 --- a/app/src/main/java/de/dreier/mytargets/features/training/environment/EnvironmentFragment.java +++ b/app/src/main/java/de/dreier/mytargets/features/training/environment/EnvironmentFragment.java @@ -35,6 +35,7 @@ import de.dreier.mytargets.base.fragments.FragmentBase; import de.dreier.mytargets.base.fragments.ListFragmentBase; import de.dreier.mytargets.databinding.FragmentEnvironmentBinding; +import de.dreier.mytargets.features.settings.SettingsManager; import de.dreier.mytargets.shared.models.EWeather; import de.dreier.mytargets.shared.models.Environment; import de.dreier.mytargets.utils.ToolbarUtils; @@ -132,6 +133,7 @@ public void onSave() { e.location = binding.location.getText().toString(); listener.onItemSelected(Parcels.wrap(e)); finish(); + SettingsManager.setIndoor(e.indoor); } @Override diff --git a/app/src/main/java/de/dreier/mytargets/features/training/input/InputActivity.java b/app/src/main/java/de/dreier/mytargets/features/training/input/InputActivity.java index 6da7042fa..01130aefa 100644 --- a/app/src/main/java/de/dreier/mytargets/features/training/input/InputActivity.java +++ b/app/src/main/java/de/dreier/mytargets/features/training/input/InputActivity.java @@ -17,6 +17,7 @@ import android.content.Context; import android.databinding.DataBindingUtil; +import android.graphics.Color; import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; @@ -38,8 +39,10 @@ import de.dreier.mytargets.R; import de.dreier.mytargets.base.activities.ChildActivityBase; import de.dreier.mytargets.databinding.ActivityInputBinding; +import de.dreier.mytargets.features.rounds.EditRoundFragment; import de.dreier.mytargets.features.settings.SettingsManager; import de.dreier.mytargets.features.timer.TimerFragment; +import de.dreier.mytargets.features.training.RoundFragment; import de.dreier.mytargets.shared.analysis.aggregation.EAggregationStrategy; import de.dreier.mytargets.shared.models.Dimension; import de.dreier.mytargets.shared.models.NotificationInfo; @@ -101,6 +104,15 @@ private static T lastItem(List list) { return list.isEmpty() ? null : list.get(list.size() - 1); } + private static boolean shouldShowRound(Round r, ETrainingScope shotShowScope, Long roundId) { + return shotShowScope != ETrainingScope.END + && (shotShowScope == ETrainingScope.TRAINING || r.getId().equals(roundId)); + } + + private static boolean shouldShowEnd(End end, Long currentEndId) { + return !Utils.equals(end.getId(), currentEndId) && end.exact; + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -133,7 +145,7 @@ private void updateSummaryVisibility() { binding.roundSummary.setVisibility(config.showRound ? VISIBLE : GONE); binding.trainingSummary.setVisibility(config.showTraining ? VISIBLE : GONE); binding.averageSummary.setVisibility(config.showAverage ? VISIBLE : GONE); - summaryShowScope = config.showAverage ? config.averageScope : null; + summaryShowScope = config.averageScope; } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @@ -161,19 +173,31 @@ public boolean onCreateOptionsMenu(Menu menu) { @Override public boolean onPrepareOptionsMenu(Menu menu) { final MenuItem eye = menu.findItem(R.id.action_show); - final MenuItem showSidebar = menu.findItem(R.id.action_show_sidebar); + final MenuItem keyboard = menu.findItem(R.id.action_keyboard); final MenuItem grouping = menu.findItem(R.id.action_grouping); + final MenuItem timer = menu.findItem(R.id.action_timer); + final MenuItem newRound = menu.findItem(R.id.action_new_round); if (targetView == null || getEnds().size() == 0) { eye.setVisible(false); - showSidebar.setVisible(false); + keyboard.setVisible(false); grouping.setVisible(false); + timer.setVisible(false); + newRound.setVisible(false); } else { final boolean plotting = targetView.getInputMode() == EInputMethod.PLOTTING; eye.setVisible(plotting); grouping.setVisible(plotting); - showSidebar.setIcon( - plotting ? R.drawable.ic_keyboard_white_24dp : R.drawable.ic_keyboard_white_off_24dp); - showSidebar.setVisible(getCurrentEnd().getId() == null); + keyboard.setIcon(plotting + ? R.drawable.ic_keyboard_white_24dp + : R.drawable.ic_keyboard_white_off_24dp); + keyboard.setChecked(!plotting); + keyboard.setVisible(getCurrentEnd().getId() == null); + timer.setIcon(SettingsManager.getTimerEnabled() + ? R.drawable.ic_timer_off_white_24dp + : R.drawable.ic_timer_white_24dp); + timer.setVisible(true); + timer.setChecked(SettingsManager.getTimerEnabled()); + newRound.setVisible(data.training.standardRoundId == null); } switch (SettingsManager.getShowMode()) { @@ -228,14 +252,26 @@ public boolean onOptionsItemSelected(MenuItem item) { case R.id.action_show_training: setShotShowScope(ETrainingScope.TRAINING); break; - case R.id.action_show_sidebar: + case R.id.action_keyboard: final EInputMethod inputMethod = targetView.getInputMode() == EInputMethod.KEYBOARD ? EInputMethod.PLOTTING : EInputMethod.KEYBOARD; targetView.setInputMethod(inputMethod, true); SettingsManager.setInputMethod(inputMethod); + item.setChecked(inputMethod == EInputMethod.KEYBOARD); + supportInvalidateOptionsMenu(); + return true; + case R.id.action_timer: + SettingsManager.setTimerEnabled(!SettingsManager.getTimerEnabled()); + openTimer(); + item.setChecked(SettingsManager.getTimerEnabled()); supportInvalidateOptionsMenu(); return true; + case R.id.action_new_round: + EditRoundFragment.createIntent(data.training) + .withContext(this) + .start(); + return true; default: return super.onOptionsItemSelected(item); } @@ -272,9 +308,6 @@ private void onDataLoadFinished() { targetView.setAggregationStrategy(SettingsManager.getAggregationStrategy()); targetView.setInputMethod(SettingsManager.getInputMethod(), false); updateOldShoots(); - - binding.next.setOnClickListener(view -> showEnd(data.endIndex + 1)); - binding.prev.setOnClickListener(view -> showEnd(data.endIndex - 1)); } @Override @@ -297,45 +330,39 @@ protected void onDestroy() { private void showEnd(int endIndex) { // Create a new end + data.endIndex = endIndex; if (endIndex == getEnds().size()) { getCurrentRound().addEnd(); updateOldShoots(); } - data.endIndex = endIndex; - // Open timer if end has not been saved yet - if (getCurrentEnd().getId() == null && data.training.timePerEnd > 0) { - openTimer(); - } + openTimer(); updateEnd(); supportInvalidateOptionsMenu(); } public void updateOldShoots() { + final End currentEnd = getCurrentEnd(); + final Long currentRoundId = getCurrentRound().getId(); + final Long currentEndId = currentEnd == null ? null : currentEnd.getId(); + final ETrainingScope shotShowScope = this.shotShowScope; final LoaderResult data = this.data; final Stream shotStream = Stream.of(data.training.getRounds()) - .filter(this::shouldShowRound) + .filter((r) -> shouldShowRound(r, shotShowScope, currentRoundId)) .flatMap(r -> Stream.of(r.getEnds())) - .filter(this::shouldShowEnd) + .filter((end) -> shouldShowEnd(end, currentEndId)) .flatMap(p -> Stream.of(p.getShots())); targetView.setTransparentShots(shotStream); } - private boolean shouldShowRound(Round r) { - return shotShowScope != ETrainingScope.END - && (shotShowScope == ETrainingScope.TRAINING || r.getId() - .equals(getCurrentEnd().roundId)); - } - - private boolean shouldShowEnd(End end) { - return !Utils.equals(end.getId(), getCurrentEnd().getId()) && end.exact; - } - private void updateEnd() { targetView.setEnd(getCurrentEnd()); + final int totalEnds = getCurrentRound().maxEndCount == null + ? getEnds().size() + : getCurrentRound().maxEndCount; binding.endTitle.setText( - getString(R.string.passe) + " " + (data.endIndex + 1) + "/" + getEnds().size()); + getString(R.string.passe) + " " + (data.endIndex + 1) + "/" + totalEnds); binding.roundTitle.setText(getString( R.string.round) + " " + (getCurrentRound().index + 1) + "/" + data.training .getRounds().size()); @@ -346,9 +373,60 @@ private void updateEnd() { } private void updateNavigationButtons() { - binding.prev.setEnabled(data.endIndex > 0); - binding.next.setEnabled(getCurrentEnd().getId() != null && - (getCurrentRound().maxEndCount == null || data.endIndex + 1 < getCurrentRound().maxEndCount)); + updatePreviousButton(); + updateNextButton(); + } + + private void updatePreviousButton() { + final boolean isFirstEnd = data.endIndex == 0; + final boolean isFirstRound = data.roundIndex == 0; + boolean showPreviousRound = isFirstEnd && !isFirstRound; + final boolean isEnabled = !isFirstEnd || !isFirstRound; + final int color; + if (showPreviousRound) { + final Round round = data.training.getRounds().get(data.roundIndex - 1); + binding.prev.setOnClickListener(view -> openRound(round, round.getEnds().size() - 1)); + binding.prev.setText(R.string.previous_round); + color = getResources().getColor(R.color.colorPrimary); + } else { + binding.prev.setOnClickListener(view -> showEnd(data.endIndex - 1)); + binding.prev.setText(R.string.prev); + color = Color.BLACK; + } + binding.prev.setTextColor(Utils.argb(isEnabled ? 0xFF : 0x42, color)); + binding.prev.setEnabled(isEnabled); + } + + private void updateNextButton() { + final boolean endFinished = getCurrentEnd().getId() != null; + boolean isLastEnd = getCurrentRound().maxEndCount != null && data.endIndex + 1 == getCurrentRound().maxEndCount; + final boolean hasOneMoreRound = data.roundIndex + 1 < data.training.getRounds().size(); + boolean showNextRound = isLastEnd && hasOneMoreRound; + final boolean isEnabled = endFinished && (!isLastEnd || hasOneMoreRound); + final int color; + if (showNextRound) { + final Round round = data.training.getRounds().get(data.roundIndex + 1); + binding.next.setOnClickListener(view -> openRound(round, 0)); + binding.next.setText(R.string.next_round); + color = getResources().getColor(R.color.colorPrimary); + } else { + binding.next.setOnClickListener(view -> showEnd(data.endIndex + 1)); + binding.next.setText(R.string.next); + color = Color.BLACK; + } + binding.next.setTextColor(Utils.argb(isEnabled ? 0xFF : 0x42, color)); + binding.next.setEnabled(isEnabled); + } + + private void openRound(Round round, int endIndex) { + finish(); + RoundFragment.getIntent(round) + .noAnimation() + .withContext(this) + .start(); + InputActivity.getIntent(round, endIndex) + .withContext(this) + .start(); } public void setShotShowScope(ETrainingScope shotShowScope) { @@ -358,12 +436,16 @@ public void setShotShowScope(ETrainingScope shotShowScope) { } private void openTimer() { - if (transitionFinished) { - TimerFragment.getIntent(data.training.timePerEnd) - .withContext(this) - .start(); - } else if (Utils.isLollipop()) { - startTimerDelayed(); + if (getCurrentEnd().getId() == null + && getCurrentEnd().getShots().get(0).scoringRing == Shot.NOTHING_SELECTED + && SettingsManager.getTimerEnabled()) { + if (transitionFinished) { + TimerFragment.getIntent() + .withContext(this) + .start(); + } else if (Utils.isLollipop()) { + startTimerDelayed(); + } } } @@ -372,7 +454,7 @@ private void startTimerDelayed() { getWindow().getSharedElementEnterTransition().addListener(new TransitionAdapter() { @Override public void onTransitionEnd(Transition transition) { - TimerFragment.getIntent(data.training.timePerEnd) + TimerFragment.getIntent() .withContext(InputActivity.this) .start(); getWindow().getSharedElementEnterTransition().removeListener(this); @@ -425,7 +507,7 @@ public void onEndFinished(List shots, boolean remote) { } // Change round template if end is out of range defined in template - if (getCurrentRound().getEnds().size() - 1 == data.endIndex) { + if (getCurrentRound().getEnds().size() == data.endIndex) { getCurrentRound().addEnd(); } @@ -473,7 +555,11 @@ private Round getCurrentRound() { } private End getCurrentEnd() { - return getEnds().get(data.endIndex); + final List ends = getEnds(); + if (ends.size() <= data.endIndex) { + return null; + } + return ends.get(data.endIndex); } @Override diff --git a/app/src/main/java/de/dreier/mytargets/features/training/input/TargetView.java b/app/src/main/java/de/dreier/mytargets/features/training/input/TargetView.java index 2266c52c9..f9c5592d8 100644 --- a/app/src/main/java/de/dreier/mytargets/features/training/input/TargetView.java +++ b/app/src/main/java/de/dreier/mytargets/features/training/input/TargetView.java @@ -486,13 +486,9 @@ private Matrix getSpotEndMatrix() { @Override protected void onArrowChanged() { - if (!arrowNumbering || getCurrentShotIndex() != EndRenderer.NO_SELECTION - && shots.get(getCurrentShotIndex()).arrowNumber != null) { + if (!arrowNumbering) { super.onArrowChanged(); } else { - List numbers = Stream.rangeClosed(1, 12) - .map(String::valueOf) - .collect(Collectors.toList()); // Prepare grid view GridView gridView = new GridView(getContext()); @@ -503,17 +499,23 @@ protected void onArrowChanged() { .setCancelable(false) .setTitle(R.string.arrow_numbers) .create(); + + List numbers = Stream.rangeClosed(1, 12) + .map(String::valueOf) + .collect(Collectors.toList()); gridView.setAdapter( new ArrayAdapter<>(getContext(), android.R.layout.simple_list_item_1, numbers)); gridView.setNumColumns(4); - gridView.setOnItemClickListener((parent, view, position, id) -> - { + gridView.setOnItemClickListener((parent, view, position, id) -> { if (getCurrentShotIndex() < shots.size()) { shots.get(getCurrentShotIndex()).arrowNumber = numbers.get(position); } dialog.dismiss(); + setOnTouchListener(this); super.onArrowChanged(); }); + // Disable touch input while dialog is visible + setOnTouchListener(null); dialog.show(); } } diff --git a/app/src/main/java/de/dreier/mytargets/features/training/overview/TrainingsFragment.java b/app/src/main/java/de/dreier/mytargets/features/training/overview/TrainingsFragment.java index aaeabe09f..8bb030483 100644 --- a/app/src/main/java/de/dreier/mytargets/features/training/overview/TrainingsFragment.java +++ b/app/src/main/java/de/dreier/mytargets/features/training/overview/TrainingsFragment.java @@ -181,7 +181,7 @@ public ViewHolder(View itemView) { public void bindItem() { binding.training.setText(item.title); binding.trainingDate.setText(item.getFormattedDate()); - binding.gesTraining.setText(item.getReachedScore().format(false)); + binding.gesTraining.setText(item.getReachedScore().format(SettingsManager.getScoreConfiguration())); } } } diff --git a/app/src/main/java/de/dreier/mytargets/features/training/standardround/EditStandardRoundFragment.java b/app/src/main/java/de/dreier/mytargets/features/training/standardround/EditStandardRoundFragment.java index cca6695bd..b734e8c08 100644 --- a/app/src/main/java/de/dreier/mytargets/features/training/standardround/EditStandardRoundFragment.java +++ b/app/src/main/java/de/dreier/mytargets/features/training/standardround/EditStandardRoundFragment.java @@ -28,7 +28,6 @@ import org.parceler.Parcels; -import java.util.ArrayList; import java.util.List; import de.dreier.mytargets.R; @@ -58,8 +57,7 @@ public class EditStandardRoundFragment extends EditFragmentBase { public static final int RESULT_STANDARD_ROUND_DELETED = Activity.RESULT_FIRST_USER; @State(ParcelsBundler.class) - List roundTemplateList = new ArrayList<>(); - private StandardRound standardRound; + StandardRound standardRound; private RoundTemplateAdapter adapter; private FragmentEditStandardRoundBinding binding; @@ -76,7 +74,6 @@ public static IntentWrapper editIntent(StandardRound item) { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - super.onCreate(savedInstanceState); binding = DataBindingUtil .inflate(inflater, R.layout.fragment_edit_standard_round, container, false); @@ -84,11 +81,10 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa ToolbarUtils.showUpAsX(this); setHasOptionsMenu(true); - if (getArguments() != null) { - standardRound = Parcels.unwrap(getArguments().getParcelable(ITEM)); - } - if (savedInstanceState == null) { + if (getArguments() != null) { + standardRound = Parcels.unwrap(getArguments().getParcelable(ITEM)); + } if (standardRound == null) { standardRound = new StandardRound(); ToolbarUtils.setTitle(this, R.string.new_round_template); @@ -99,24 +95,25 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa round.endCount = SettingsManager.getEndCount(); round.setTargetTemplate(SettingsManager.getTarget()); round.distance = SettingsManager.getDistance(); - roundTemplateList.add(round); + standardRound.getRounds().add(round); } else { ToolbarUtils.setTitle(this, R.string.edit_standard_round); // Load saved values - roundTemplateList = standardRound.getRounds(); if (standardRound.club == StandardRoundFactory.CUSTOM) { binding.name.setText(standardRound.name); } else { binding.name.setText( String.format("%s %s", getString(R.string.custom), standardRound.name)); - for (RoundTemplate round : roundTemplateList) { - round.setId(-1L); + // When copying an existing standard round make sure + // we don't overwrite the other rounds templates + for (RoundTemplate round : standardRound.getRounds()) { + round.setId(null); } } } } - adapter = new RoundTemplateAdapter(this, roundTemplateList); + adapter = new RoundTemplateAdapter(this, standardRound.getRounds()); binding.rounds.setAdapter(adapter); binding.addButton.setOnClickListener((view) -> onAddRound()); binding.deleteStandardRound.setOnClickListener((view) -> onDeleteStandardRound()); @@ -131,14 +128,14 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) { } private void onAddRound() { - RoundTemplate r = roundTemplateList.get(roundTemplateList.size() - 1); + RoundTemplate r = standardRound.getRounds().get(standardRound.getRounds().size() - 1); RoundTemplate roundTemplate = new RoundTemplate(); roundTemplate.endCount = r.endCount; roundTemplate.shotsPerEnd = r.shotsPerEnd; roundTemplate.distance = r.distance; roundTemplate.setTargetTemplate(r.getTargetTemplate()); - roundTemplateList.add(roundTemplate); - adapter.notifyItemInserted(roundTemplateList.size() - 1); + standardRound.getRounds().add(roundTemplate); + adapter.notifyItemInserted(standardRound.getRounds().size() - 1); } private void onDeleteStandardRound() { @@ -151,10 +148,9 @@ private void onDeleteStandardRound() { protected void onSave() { standardRound.club = StandardRoundFactory.CUSTOM; standardRound.name = binding.name.getText().toString(); - standardRound.setRounds(roundTemplateList); standardRound.save(); - RoundTemplate round = roundTemplateList.get(0); + RoundTemplate round = standardRound.getRounds().get(0); SettingsManager.setShotsPerEnd(round.shotsPerEnd); SettingsManager.setEndCount(round.endCount); SettingsManager.setTarget(round.getTargetTemplate()); @@ -176,11 +172,11 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { final Parcelable parcelable = data.getParcelableExtra(ITEM); switch (requestCode) { case DistanceSelector.DISTANCE_REQUEST_CODE: - roundTemplateList.get(index).distance = Parcels.unwrap(parcelable); + standardRound.getRounds().get(index).distance = Parcels.unwrap(parcelable); adapter.notifyItemChanged(index); break; case TargetSelector.TARGET_REQUEST_CODE: - roundTemplateList.get(index).setTargetTemplate(Parcels.unwrap(parcelable)); + standardRound.getRounds().get(index).setTargetTemplate(Parcels.unwrap(parcelable)); adapter.notifyItemChanged(index); break; } diff --git a/app/src/main/java/de/dreier/mytargets/utils/IntentWrapper.java b/app/src/main/java/de/dreier/mytargets/utils/IntentWrapper.java index 3b2d04fea..1532fac5d 100644 --- a/app/src/main/java/de/dreier/mytargets/utils/IntentWrapper.java +++ b/app/src/main/java/de/dreier/mytargets/utils/IntentWrapper.java @@ -124,11 +124,16 @@ public IntentWrapper forResult(int requestCode) { } public IntentWrapper noAnimation() { - intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NO_ANIMATION); animate = false; return this; } + public IntentWrapper clearTopSingleTop() { + intent.addFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); + return this; + } + public void start() { if (fragment == null) { start(activity); diff --git a/app/src/main/java/de/dreier/mytargets/utils/Utils.java b/app/src/main/java/de/dreier/mytargets/utils/Utils.java index 3c62fdd3d..1369933cb 100644 --- a/app/src/main/java/de/dreier/mytargets/utils/Utils.java +++ b/app/src/main/java/de/dreier/mytargets/utils/Utils.java @@ -18,6 +18,7 @@ import android.app.PendingIntent; import android.content.Context; import android.content.Intent; +import android.graphics.Color; import android.os.Process; import android.text.Html; import android.text.Spanned; @@ -77,4 +78,9 @@ public static Spanned fromHtml(String html) { return Html.fromHtml(html); } } + + public static int argb(int alpha, int color) { + return Color.argb(alpha, Color.red(color), Color.green(color), + Color.blue(color)); + } } diff --git a/app/src/main/java/de/dreier/mytargets/views/selector/EnvironmentSelector.java b/app/src/main/java/de/dreier/mytargets/views/selector/EnvironmentSelector.java index 21a7b31cf..605147d26 100644 --- a/app/src/main/java/de/dreier/mytargets/views/selector/EnvironmentSelector.java +++ b/app/src/main/java/de/dreier/mytargets/views/selector/EnvironmentSelector.java @@ -19,12 +19,14 @@ import android.content.Context; import android.content.pm.PackageManager; import android.location.Location; +import android.support.annotation.NonNull; import android.support.annotation.RequiresPermission; import android.support.v4.app.Fragment; import android.support.v4.content.ContextCompat; import android.util.AttributeSet; import de.dreier.mytargets.R; +import de.dreier.mytargets.features.settings.SettingsManager; import de.dreier.mytargets.features.training.environment.CurrentWeather; import de.dreier.mytargets.features.training.environment.EnvironmentActivity; import de.dreier.mytargets.features.training.environment.Locator; @@ -114,14 +116,19 @@ public void onLocationNotFound() { } private void setDefaultWeather() { - setItem(new Environment(false, EWeather.SUNNY, 0, 0, "")); + setItem(getDefaultEnvironment()); } @Override public Environment getSelectedItem() { if (item == null) { - return new Environment(false, EWeather.SUNNY, 0, 0, ""); + return getDefaultEnvironment(); } return item; } + + @NonNull + private Environment getDefaultEnvironment() { + return new Environment(SettingsManager.getIndoor(), EWeather.SUNNY, 0, 0, ""); + } } diff --git a/app/src/main/java/de/dreier/mytargets/views/selector/StandardRoundSelector.java b/app/src/main/java/de/dreier/mytargets/views/selector/StandardRoundSelector.java index 84b0e9943..41d7c05be 100644 --- a/app/src/main/java/de/dreier/mytargets/views/selector/StandardRoundSelector.java +++ b/app/src/main/java/de/dreier/mytargets/views/selector/StandardRoundSelector.java @@ -35,7 +35,7 @@ public StandardRoundSelector(Context context, AttributeSet attrs) { requestCode = STANDARD_ROUND_REQUEST_CODE; } - public void setItemId(long standardRoundId) { + public void setItemId(Long standardRoundId) { StandardRound standardRound = StandardRound.get(standardRoundId); // If the round has been removed, choose default one if (standardRound == null) { diff --git a/app/src/main/res/drawable/ic_app_shortcut_album_blue_24px.xml b/app/src/main/res/drawable/ic_app_shortcut_album_blue_24px.xml index 29d062abf..ddf1dd7b3 100644 --- a/app/src/main/res/drawable/ic_app_shortcut_album_blue_24px.xml +++ b/app/src/main/res/drawable/ic_app_shortcut_album_blue_24px.xml @@ -22,6 +22,6 @@ android:fillColor="#F5F5F5" android:pathData="M48,48m-44,0a44,44 0,1 1,88 0a44,44 0,1 1,-88 0"/> diff --git a/app/src/main/res/drawable/ic_app_shortcut_trending_up_blue_24px.xml b/app/src/main/res/drawable/ic_app_shortcut_trending_up_blue_24px.xml index df78d92ab..f79f12878 100644 --- a/app/src/main/res/drawable/ic_app_shortcut_trending_up_blue_24px.xml +++ b/app/src/main/res/drawable/ic_app_shortcut_trending_up_blue_24px.xml @@ -22,6 +22,6 @@ android:fillColor="#F5F5F5" android:pathData="M48,48m-44,0a44,44 0,1 1,88 0a44,44 0,1 1,-88 0"/> diff --git a/app/src/main/res/drawable/ic_house.xml b/app/src/main/res/drawable/ic_house.xml index 8d843b3dd..ee1b1bbcc 100644 --- a/app/src/main/res/drawable/ic_house.xml +++ b/app/src/main/res/drawable/ic_house.xml @@ -20,9 +20,10 @@ - - - + + + + + - diff --git a/app/src/main/res/drawable/ic_traffic_grey600_24dp.xml b/app/src/main/res/drawable/ic_timer_grey600_24dp.xml similarity index 100% rename from app/src/main/res/drawable/ic_traffic_grey600_24dp.xml rename to app/src/main/res/drawable/ic_timer_grey600_24dp.xml diff --git a/app/src/main/res/drawable/ic_timer_off_grey600_24dp.xml b/app/src/main/res/drawable/ic_timer_off_white_24dp.xml similarity index 84% rename from app/src/main/res/drawable/ic_timer_off_grey600_24dp.xml rename to app/src/main/res/drawable/ic_timer_off_white_24dp.xml index dcb898879..ddeb10e6b 100644 --- a/app/src/main/res/drawable/ic_timer_off_grey600_24dp.xml +++ b/app/src/main/res/drawable/ic_timer_off_white_24dp.xml @@ -18,16 +18,13 @@ android:height="24dp" android:viewportWidth="24.0" android:viewportHeight="24.0"> - + android:fillColor="@color/md_white_1000"/> + android:fillColor="@color/md_white_1000"/> + android:fillColor="@color/md_white_1000"/> diff --git a/app/src/main/res/drawable/ic_timer_white_24dp.xml b/app/src/main/res/drawable/ic_timer_white_24dp.xml new file mode 100644 index 000000000..0d625ae93 --- /dev/null +++ b/app/src/main/res/drawable/ic_timer_white_24dp.xml @@ -0,0 +1,24 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_timer_accent_24dp.xml b/app/src/main/res/drawable/ic_view_list_grey600_24dp.xml similarity index 56% rename from app/src/main/res/drawable/ic_timer_accent_24dp.xml rename to app/src/main/res/drawable/ic_view_list_grey600_24dp.xml index c17121157..f31d101a9 100644 --- a/app/src/main/res/drawable/ic_timer_accent_24dp.xml +++ b/app/src/main/res/drawable/ic_view_list_grey600_24dp.xml @@ -19,6 +19,6 @@ android:viewportWidth="24.0" android:viewportHeight="24.0"> + android:fillColor="@color/md_grey_600" + android:pathData="M4,14h4v-4L4,10v4zM4,19h4v-4L4,15v4zM4,9h4L8,5L4,5v4zM9,14h12v-4L9,10v4zM9,19h12v-4L9,15v4zM9,5v4h12L21,5L9,5z"/> diff --git a/app/src/main/res/drawable/ic_intro_screen_1.xml b/app/src/main/res/drawable/intro_screen_1.xml similarity index 100% rename from app/src/main/res/drawable/ic_intro_screen_1.xml rename to app/src/main/res/drawable/intro_screen_1.xml diff --git a/app/src/main/res/drawable/ic_intro_screen_2.xml b/app/src/main/res/drawable/intro_screen_2.xml similarity index 100% rename from app/src/main/res/drawable/ic_intro_screen_2.xml rename to app/src/main/res/drawable/intro_screen_2.xml diff --git a/app/src/main/res/drawable/timer.xml b/app/src/main/res/drawable/timer.xml deleted file mode 100644 index 5d7fa55b8..000000000 --- a/app/src/main/res/drawable/timer.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_bows.xml b/app/src/main/res/layout/fragment_bows.xml index 69c11ca60..5bfe3766b 100644 --- a/app/src/main/res/layout/fragment_bows.xml +++ b/app/src/main/res/layout/fragment_bows.xml @@ -40,37 +40,37 @@ diff --git a/app/src/main/res/layout/fragment_edit_arrow.xml b/app/src/main/res/layout/fragment_edit_arrow.xml index 1b84ca66f..3975b7b7b 100644 --- a/app/src/main/res/layout/fragment_edit_arrow.xml +++ b/app/src/main/res/layout/fragment_edit_arrow.xml @@ -18,10 +18,16 @@ + + + + - + - + - + - + @@ -158,7 +178,11 @@ - + - + - + - + - + +