From 56d127fd3f58b375542f086ccf4034f90ce57d50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=BC=D1=86=D0=BE=D0=B2=D0=B0=20=D0=9D=D0=B0=D0=B4?= =?UTF-8?q?=D0=B5=D0=B6=D0=B4=D0=B0?= Date: Sun, 4 May 2025 17:45:08 +0300 Subject: [PATCH] =?UTF-8?q?=D0=93=D0=BE=D1=82=D0=BE=D0=B2=D1=8B=D0=B5=20?= =?UTF-8?q?=D1=84=D0=BE=D1=80=D0=BC=D1=8B=20=D0=B8=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D1=85=D0=BE=D0=B4=D1=8B=20=D0=BC=D0=B5=D0=B6=D0=B4=D1=83?= =?UTF-8?q?=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 6 + .../java/com/example/timert/AllTraining.kt | 2 +- .../com/example/timert/CreatingTraining.kt | 7 + .../java/com/example/timert/MainActivity.kt | 10 +- .../com/example/timert/SettingsActivity.kt | 58 ++------ app/src/main/java/com/example/timert/timer.kt | 112 ++++++++++++++ .../main/res/layout/activity_all_training.xml | 34 ++--- app/src/main/res/layout/activity_main.xml | 12 +- .../main/res/layout/activity_settings2.xml | 139 ++++++++++++------ app/src/main/res/layout/activity_timer.xml | 18 +-- 10 files changed, 266 insertions(+), 132 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a191c3a..bd7fb96 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,12 @@ + + diff --git a/app/src/main/java/com/example/timert/AllTraining.kt b/app/src/main/java/com/example/timert/AllTraining.kt index 15b5e70..db2b385 100644 --- a/app/src/main/java/com/example/timert/AllTraining.kt +++ b/app/src/main/java/com/example/timert/AllTraining.kt @@ -23,7 +23,7 @@ class AllTraining : AppCompatActivity() { } val buttonSaveAll: Button = findViewById(R.id.btn_save_all_vse) buttonSaveAll.setOnClickListener { - val intent = Intent(this, MainActivity::class.java) + val intent = Intent(this, CreatingTraining::class.java) startActivity(intent) isSave = true diff --git a/app/src/main/java/com/example/timert/CreatingTraining.kt b/app/src/main/java/com/example/timert/CreatingTraining.kt index 1f6cdaa..5b6d0a7 100644 --- a/app/src/main/java/com/example/timert/CreatingTraining.kt +++ b/app/src/main/java/com/example/timert/CreatingTraining.kt @@ -25,6 +25,8 @@ class CreatingTraining : AppCompatActivity() { buttonSave.setOnClickListener { isSave=true + val intent = Intent(this, MainActivity::class.java) + startActivity(intent) } val button_on_main: Button = findViewById(R.id.btn_on_main) @@ -48,6 +50,11 @@ class CreatingTraining : AppCompatActivity() { } } + val button_add: Button = findViewById(R.id.add_workout) + button_add.setOnClickListener { + val intent = Intent(this, AllTraining::class.java) + startActivity(intent) + } } } \ No newline at end of file diff --git a/app/src/main/java/com/example/timert/MainActivity.kt b/app/src/main/java/com/example/timert/MainActivity.kt index ab134be..b365dcf 100644 --- a/app/src/main/java/com/example/timert/MainActivity.kt +++ b/app/src/main/java/com/example/timert/MainActivity.kt @@ -31,18 +31,24 @@ class MainActivity : AppCompatActivity() { startTrainingButton.setOnClickListener { Toast.makeText(this, "Запуск тренировки!", Toast.LENGTH_SHORT).show() // Заглушка //TODO: Intent для запуска Activity тренировки (форма 5) + val intent = Intent(this, timer::class.java) + startActivity(intent) } val templatesButton: Button = findViewById(R.id.templatesButton) templatesButton.setOnClickListener { - Toast.makeText(this, "Открытие шаблонов!", Toast.LENGTH_SHORT).show() // Заглушка + //Toast.makeText(this, "Открытие шаблонов!", Toast.LENGTH_SHORT).show() // Заглушка //TODO: Intent для открытия Activity шаблонов (форма 3) + val intent = Intent(this, AddWorkout::class.java) + startActivity(intent) } val newTemplateButton: Button = findViewById(R.id.newTemplateButton) newTemplateButton.setOnClickListener { - Toast.makeText(this, "Создание нового шаблона!", Toast.LENGTH_SHORT).show() // Заглушка + //Toast.makeText(this, "Создание нового шаблона!", Toast.LENGTH_SHORT).show() // Заглушка //TODO: Intent для открытия Activity создания шаблона (форма 3) + + } } } \ No newline at end of file diff --git a/app/src/main/java/com/example/timert/SettingsActivity.kt b/app/src/main/java/com/example/timert/SettingsActivity.kt index b7b5df6..d156f5a 100644 --- a/app/src/main/java/com/example/timert/SettingsActivity.kt +++ b/app/src/main/java/com/example/timert/SettingsActivity.kt @@ -1,6 +1,7 @@ package com.example.timert import android.content.Context +import android.content.Intent import android.content.pm.PackageManager import android.os.Bundle import android.widget.Switch @@ -16,61 +17,17 @@ class SettingsActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_settings2) - val versionTextView: TextView = findViewById(R.id.versionTextView) - val darkModeSwitch: Switch = findViewById(R.id.darkModeSwitch) - val aboutButton: Button = findViewById(R.id.aboutButton) + + val developersButton: Button = findViewById(R.id.developersButton) - // Получаем сохраненное состояние темы из SharedPreferences - val sharedPreferences = getSharedPreferences("AppSettings", Context.MODE_PRIVATE) - val isDarkMode = sharedPreferences.getBoolean("DarkMode", false) // По умолчанию - светлая тема - darkModeSwitch.isChecked = isDarkMode - - // Применяем тему - if (isDarkMode) { - AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) - } else { - AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) - } - - try { - val packageInfo = packageManager.getPackageInfo(packageName, 0) - val versionName = packageInfo.versionName - versionTextView.text = "Версия: $versionName" - } catch (e: PackageManager.NameNotFoundException) { - versionTextView.text = "Версия: Неизвестно" - } - - // Устанавливаем слушатель для Switch - darkModeSwitch.setOnCheckedChangeListener { _, isChecked -> - // Сохраняем состояние темы в SharedPreferences - val editor = sharedPreferences.edit() - editor.putBoolean("DarkMode", isChecked) - editor.apply() - - // Применяем тему - if (isChecked) { - AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) - } else { - AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) - } - } - - // Обработчик нажатия на кнопку "О программе" - aboutButton.setOnClickListener { - AlertDialog.Builder(this) - .setTitle("О программе") - .setMessage("Краткое описание пользования приложением.\n\nНапример: Это приложение позволяет тренироваться, чтобы быть как арнольдшварцнигер 😄") - .setPositiveButton("ОК", null) - .show() - } // Обработчик нажатия на кнопку "Разработчики" developersButton.setOnClickListener { AlertDialog.Builder(this) .setTitle("Разработчики") .setMessage(HtmlCompat.fromHtml( - "

Вятский государственный университет


" + + "

Программу разработали:


" + "

Емцова Надежда Александровна

" + "

Новиков Николай Алексеевич

" + "

Пискун Алёна Викторовна

", @@ -79,5 +36,10 @@ class SettingsActivity : AppCompatActivity() { .setPositiveButton("ОК", null) .show() } + val on_main: Button = findViewById(R.id.btn_on_main) + on_main.setOnClickListener { + val intent = Intent(this, MainActivity::class.java) + startActivity(intent) + } + } } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/timert/timer.kt b/app/src/main/java/com/example/timert/timer.kt index b4679a9..26277ba 100644 --- a/app/src/main/java/com/example/timert/timer.kt +++ b/app/src/main/java/com/example/timert/timer.kt @@ -4,15 +4,30 @@ import android.app.AlertDialog import android.content.Intent import android.media.Image import android.os.Bundle +import android.os.CountDownTimer import android.widget.Button import android.widget.ImageButton +import android.widget.TextView import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity +import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat class timer : AppCompatActivity() { private var isPlay = false + + private lateinit var statusText: TextView + private lateinit var timerText: TextView + private lateinit var statusSet: TextView + private lateinit var statusExercise: TextView + private var numApproaches = 3 + private var numExercises = 5 + private var restBetweenExercises = 30 + private var restBetweenApproaches = 60 + private var exerciseDuration = 45 // например, 45 секунд упражнение + private var currentTimer: CountDownTimer? = null + private var timeLeftInMillis: Long = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() @@ -22,6 +37,18 @@ class timer : AppCompatActivity() { v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) insets } + statusText = findViewById(R.id.statusText) + timerText = findViewById(R.id.timerText) + statusSet = findViewById(R.id.number_set) + statusExercise = findViewById(R.id.num_exercise) + numApproaches = intent.getIntExtra("numApproaches", numApproaches) + numExercises = intent.getIntExtra("numExercises", numExercises) + restBetweenExercises = intent.getIntExtra("restBetweenExercises", restBetweenExercises) + restBetweenApproaches = intent.getIntExtra("restBetweenApproaches", restBetweenApproaches) + exerciseDuration = intent.getIntExtra("exerciseDuration", exerciseDuration) + + startTraining() + val button: ImageButton = findViewById(R.id.stop) button.setOnClickListener { AlertDialog.Builder(this) @@ -58,5 +85,90 @@ class timer : AppCompatActivity() { } + private fun resumeTimer(onFinish: () -> Unit) { + currentTimer = object : CountDownTimer(timeLeftInMillis, 1000) { + override fun onTick(millisUntilFinished: Long) { + timeLeftInMillis = millisUntilFinished + timerText.text = "${millisUntilFinished / 1000}" + } + + override fun onFinish() { + onFinish() + } + }.start() + } + + private fun startTraining() { + var currentApproach = 1 + val rootLayout = findViewById(R.id.main) + fun nextApproach() { + if (currentApproach > numApproaches) { + statusText.text = "Тренировка завершена!" + rootLayout.setBackgroundResource(R.drawable.blue_gradient) + timerText.text = "00:00" + return + } + + var currentExercise = 1 + + fun nextExercise() { + if (currentExercise > numExercises) { + statusText.text = "Отдых между подходами" + rootLayout.setBackgroundResource(R.drawable.green_gradient) + startRest(restBetweenApproaches) { + currentApproach++ + nextApproach() + } + return + } + rootLayout.setBackgroundResource(R.drawable.gradient_pink) + statusText.text="Работа" + + statusExercise.text = "$currentExercise / $numExercises" + statusSet.text="$currentApproach" + startTimer(exerciseDuration) { + statusText.text = "Отдых" + rootLayout.setBackgroundResource(R.drawable.green_gradient) + startRest(restBetweenExercises) { + currentExercise++ + nextExercise() + } + } + } + + nextExercise() + } + + nextApproach() + } + + private fun startTimer(seconds: Int, onFinish: () -> Unit) { + timeLeftInMillis = seconds * 1000L + object : CountDownTimer(seconds * 1000L, 1000) { + override fun onTick(millisUntilFinished: Long) { + timerText.text = "${millisUntilFinished / 1000}" + } + + override fun onFinish() { + onFinish() + } + }.start() + } + + private fun startRest(seconds: Int, onFinish: () -> Unit) { + val rootLayout = findViewById(R.id.main) + rootLayout.setBackgroundResource(R.drawable.green_gradient) + object : CountDownTimer(seconds * 1000L, 1000) { + override fun onTick(millisUntilFinished: Long) { + timerText.text = "${millisUntilFinished / 1000}" + statusText.text = "Отдых" + + } + + override fun onFinish() { + onFinish() + } + }.start() + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_all_training.xml b/app/src/main/res/layout/activity_all_training.xml index 30314e2..7446484 100644 --- a/app/src/main/res/layout/activity_all_training.xml +++ b/app/src/main/res/layout/activity_all_training.xml @@ -20,7 +20,7 @@ android:id="@+id/textView2" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="Тренировка" + android:text="Добавить упражнение" android:textAlignment="center" android:textSize="34sp" /> @@ -88,7 +88,7 @@ android:id="@+id/textView8_all" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="Отдых между подходами" + android:text="Отдых между упражнениями" android:textAlignment="center" android:textSize="24sp" /> @@ -131,21 +131,6 @@ app:layout_constraintBottom_toBottomOf="parent" tools:layout_editor_absoluteX="7dp"> -