diff --git a/app-backup/src/main/java/xyz/aprildown/timer/app/backup/AppPreferencesProviderImpl.kt b/app-backup/src/main/java/xyz/aprildown/timer/app/backup/AppPreferencesProviderImpl.kt index cbfd92b6..65b73c89 100644 --- a/app-backup/src/main/java/xyz/aprildown/timer/app/backup/AppPreferencesProviderImpl.kt +++ b/app-backup/src/main/java/xyz/aprildown/timer/app/backup/AppPreferencesProviderImpl.kt @@ -13,6 +13,7 @@ import xyz.aprildown.timer.app.base.data.PreferenceData.getTypeColor import xyz.aprildown.timer.app.base.data.PreferenceData.oneLayout import xyz.aprildown.timer.app.base.data.PreferenceData.oneOneFourActions import xyz.aprildown.timer.app.base.data.PreferenceData.oneOneTimeSize +import xyz.aprildown.timer.app.base.data.PreferenceData.oneOneUsingStep import xyz.aprildown.timer.app.base.data.PreferenceData.oneOneUsingTimingBar import xyz.aprildown.timer.app.base.data.PreferenceData.saveTypeColor import xyz.aprildown.timer.app.base.data.PreferenceData.shouldNotifierPlusGoBack @@ -284,6 +285,7 @@ private class AudioTypePreferenceItem : PreferenceItem { private class OneLayoutPreferenceItem : PreferenceItem { override fun storeToMap(context: Context, map: MutableMap) { map[KEY_LAYOUT] = context.oneLayout + map[KEY_ONE_STEP] = context.oneOneUsingStep.toString() map[KEY_ONE_BAR] = context.oneOneUsingTimingBar.toString() map[KEY_ONE_SIZE] = context.oneOneTimeSize.toString() map[KEY_FOUR_ACTIONS] = context.oneOneFourActions.joinToString(separator = ",") @@ -298,6 +300,9 @@ private class OneLayoutPreferenceItem : PreferenceItem { prefs.ifHasKey(KEY_LAYOUT) { editor.putString(KEY_LAYOUT, it) } + prefs.ifHasKey(KEY_ONE_STEP) { + context.oneOneUsingStep = it.toBoolean() + } prefs.ifHasKey(KEY_ONE_BAR) { context.oneOneUsingTimingBar = it.toBoolean() } @@ -314,6 +319,7 @@ private class OneLayoutPreferenceItem : PreferenceItem { companion object { private const val KEY_LAYOUT = PreferenceData.KEY_ONE_LAYOUT + private const val KEY_ONE_STEP = PreferenceData.PREF_ONE_LAYOUT_ONE_STEP private const val KEY_ONE_BAR = PreferenceData.PREF_ONE_LAYOUT_ONE_TIMING_BAR private const val KEY_ONE_SIZE = PreferenceData.PREF_ONE_LAYOUT_ONE_TIME_SIZE private const val KEY_FOUR_ACTIONS = PreferenceData.PREF_ONE_LAYOUT_ONE_ACTIONS diff --git a/app-base/src/main/java/xyz/aprildown/timer/app/base/data/PreferenceData.kt b/app-base/src/main/java/xyz/aprildown/timer/app/base/data/PreferenceData.kt index e48eaea9..115865d2 100644 --- a/app-base/src/main/java/xyz/aprildown/timer/app/base/data/PreferenceData.kt +++ b/app-base/src/main/java/xyz/aprildown/timer/app/base/data/PreferenceData.kt @@ -180,6 +180,11 @@ object PreferenceData { // region One Layout: One + const val PREF_ONE_LAYOUT_ONE_STEP = "pref_one_one_step" + var Context.oneOneUsingStep: Boolean + get() = safeSharedPreference.getBoolean(PREF_ONE_LAYOUT_ONE_STEP, false) + set(value) = safeSharedPreference.edit { putBoolean(PREF_ONE_LAYOUT_ONE_STEP, value) } + const val PREF_ONE_LAYOUT_ONE_TIMING_BAR = "pref_one_one_timing_bar" var Context.oneOneUsingTimingBar: Boolean get() = safeSharedPreference.getBoolean(PREF_ONE_LAYOUT_ONE_TIMING_BAR, false) diff --git a/app-base/src/main/res/values/strings.xml b/app-base/src/main/res/values/strings.xml index be40851b..c7e14066 100644 --- a/app-base/src/main/res/values/strings.xml +++ b/app-base/src/main/res/values/strings.xml @@ -347,6 +347,7 @@ Shortcut name Open timer screen on click + Step Timing Bar Time Text Size diff --git a/app-intro/src/main/java/xyz/aprildown/timer/app/intro/start/StartRunInstructionView.kt b/app-intro/src/main/java/xyz/aprildown/timer/app/intro/start/StartRunInstructionView.kt index 373f726d..12413e12 100644 --- a/app-intro/src/main/java/xyz/aprildown/timer/app/intro/start/StartRunInstructionView.kt +++ b/app-intro/src/main/java/xyz/aprildown/timer/app/intro/start/StartRunInstructionView.kt @@ -42,6 +42,11 @@ internal class StartRunInstructionView : InstructionView(RTimerOne.id.textOneStep).run { + textSize = context.dp(context.oneOneTimeSize) + text = (timer.steps.first() as StepEntity.Step).label + } + findViewById(RTimerOne.id.textOneLoop) .text = index.getNiceLoopString(max = timer.loop) diff --git a/app-timer-one/src/main/java/xyz/aprildown/timer/app/timer/one/OneFragment.kt b/app-timer-one/src/main/java/xyz/aprildown/timer/app/timer/one/OneFragment.kt index 76dcdcf3..89e6b495 100644 --- a/app-timer-one/src/main/java/xyz/aprildown/timer/app/timer/one/OneFragment.kt +++ b/app-timer-one/src/main/java/xyz/aprildown/timer/app/timer/one/OneFragment.kt @@ -19,6 +19,7 @@ import dagger.hilt.android.AndroidEntryPoint import xyz.aprildown.timer.app.base.data.PreferenceData import xyz.aprildown.timer.app.base.data.PreferenceData.oneOneFourActions import xyz.aprildown.timer.app.base.data.PreferenceData.oneOneTimeSize +import xyz.aprildown.timer.app.base.data.PreferenceData.oneOneUsingStep import xyz.aprildown.timer.app.base.data.PreferenceData.oneOneUsingTimingBar import xyz.aprildown.timer.app.base.data.PreferenceData.timePanels import xyz.aprildown.timer.app.base.utils.produceTime @@ -213,6 +214,11 @@ class OneFragment : private fun applySettings(binding: FragmentOneBinding) { val context = binding.root.context + + binding.textOneStep.textSize = context.dp(context.oneOneTimeSize) + binding.layoutTextOneStep.visibility = if (context.oneOneUsingStep) View.VISIBLE else View.GONE + binding.textOneStep.isSelected = true // to allow it to scroll horizontally + if (context.oneOneUsingTimingBar) { val mpb = binding.stubTimingBar.inflate() as LinearProgressIndicator viewModel.timerCurrentTime.observe(viewLifecycleOwner) { @@ -289,11 +295,25 @@ class OneFragment : viewModel.timerCurrentIndex.observe(viewLifecycleOwner) { index -> if (index == null) return@observe val totalLoop = viewModel.timer.value?.loop ?: return@observe + binding.textOneStep.setTextIfChanged(when (index) { + is TimerIndex.Start -> viewModel.timer.value?.startStep?.label + is TimerIndex.Step -> (viewModel.timer.value?.steps?.get(index.stepIndex) as StepEntity.Step).label + is TimerIndex.Group -> ((viewModel.timer.value?.steps?.get(index.stepIndex) as StepEntity.Group).steps[index.groupStepIndex.stepIndex] as StepEntity.Step).label + is TimerIndex.End -> viewModel.timer.value?.endStep?.label + else -> "" + }) binding.textOneLoop.setTextIfChanged(index.getNiceLoopString(totalLoop)) binding.listOneSteps.toIndex(index) } viewModel.timer.observe(viewLifecycleOwner) { timer -> if (timer == null) return@observe + binding.textOneStep.setTextIfChanged(when (val currentIndex = viewModel.timerCurrentIndex.value) { + is TimerIndex.Start -> timer.startStep?.label + is TimerIndex.Step -> (timer.steps[currentIndex.stepIndex] as StepEntity.Step).label + is TimerIndex.Group -> ((timer.steps[currentIndex.stepIndex] as StepEntity.Group).steps[currentIndex.groupStepIndex.stepIndex] as StepEntity.Step).label + is TimerIndex.End -> timer.endStep?.label + else -> "" + }) binding.listOneSteps.setTimer(timer) } viewModel.timerCurrentState.observe(viewLifecycleOwner) { state -> diff --git a/app-timer-one/src/main/java/xyz/aprildown/timer/app/timer/one/layout/one/OneLayoutOneFragment.kt b/app-timer-one/src/main/java/xyz/aprildown/timer/app/timer/one/layout/one/OneLayoutOneFragment.kt index a2133e95..10978e2f 100644 --- a/app-timer-one/src/main/java/xyz/aprildown/timer/app/timer/one/layout/one/OneLayoutOneFragment.kt +++ b/app-timer-one/src/main/java/xyz/aprildown/timer/app/timer/one/layout/one/OneLayoutOneFragment.kt @@ -5,6 +5,7 @@ import android.view.View import android.view.ViewGroup import android.view.ViewStub import android.widget.CompoundButton +import android.widget.LinearLayout import android.widget.ProgressBar import android.widget.SeekBar import android.widget.TextView @@ -17,6 +18,7 @@ import com.github.zawadz88.materialpopupmenu.popupMenu import xyz.aprildown.timer.app.base.data.PreferenceData import xyz.aprildown.timer.app.base.data.PreferenceData.oneOneFourActions import xyz.aprildown.timer.app.base.data.PreferenceData.oneOneTimeSize +import xyz.aprildown.timer.app.base.data.PreferenceData.oneOneUsingStep import xyz.aprildown.timer.app.base.data.PreferenceData.oneOneUsingTimingBar import xyz.aprildown.timer.app.base.data.PreferenceData.timePanels import xyz.aprildown.timer.app.base.data.ShowcaseData @@ -45,6 +47,9 @@ internal class OneLayoutOneFragment : view.findViewById(R.id.textOneTime).run { text = 8158000L.produceTime() } + view.findViewById(R.id.textOneStep).run { + text = ShowcaseData.getSampleSteps()[0].label + } view.findViewById(R.id.textOneLoop).text = "1/3" view.findViewById(R.id.listOneSteps).run { setHasFixedSize(true) @@ -56,6 +61,7 @@ internal class OneLayoutOneFragment : view.findViewById(R.id.layoutOneTweakTime) .setCallback(requireActivity(), this) + toggleStep(context.oneOneUsingStep) toggleTimingBar(context.oneOneUsingTimingBar) setTimeTextSize(context.oneOneTimeSize) toggleTimePanels() @@ -96,6 +102,16 @@ internal class OneLayoutOneFragment : val context = requireContext() val view = View.inflate(context, R.layout.layout_one_settings_one, null) + view.findViewById(R.id.itemOneLayoutOneStep).run { + getLayoutView().run { + isChecked = context.oneOneUsingStep + setOnCheckedChangeListener { _, isChecked -> + toggleStep(isChecked) + context.oneOneUsingStep = isChecked + } + } + } + view.findViewById(R.id.itemOneLayoutOneBar).run { getLayoutView().run { isChecked = context.oneOneUsingTimingBar @@ -133,6 +149,11 @@ internal class OneLayoutOneFragment : return view } + private fun toggleStep(show: Boolean) { + val view = requireView() + view.findViewById(R.id.layoutTextOneStep).visibility = if (show) View.VISIBLE else View.GONE + } + private fun toggleTimingBar(show: Boolean) { val view = requireView() val stub: ViewStub? = view.findViewById(R.id.stubTimingBar) @@ -152,6 +173,7 @@ internal class OneLayoutOneFragment : private fun setTimeTextSize(size: Int) { view?.findViewById(R.id.textOneTime)?.textSize = requireContext().dp(size) + view?.findViewById(R.id.textOneStep)?.textSize = requireContext().dp(size) } private fun toggleTimePanels() { diff --git a/app-timer-one/src/main/res/layout-land/fragment_one.xml b/app-timer-one/src/main/res/layout-land/fragment_one.xml index a91ab8c5..9216cbd9 100644 --- a/app-timer-one/src/main/res/layout-land/fragment_one.xml +++ b/app-timer-one/src/main/res/layout-land/fragment_one.xml @@ -27,6 +27,31 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + + + + +