Готовые формы и переходы между формами

This commit is contained in:
Емцова Надежда 2025-05-04 17:45:08 +03:00
parent 5ebe213205
commit 56d127fd3f
10 changed files with 266 additions and 132 deletions

View File

@ -21,6 +21,12 @@
<activity <activity
android:name=".timer" android:name=".timer"
android:exported="false" /> android:exported="false" />
<activity
android:name=".AllTraining"
android:exported="true"/>
<activity
android:name=".AddWorkout"
android:exported="true"/>
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
android:exported="true"> android:exported="true">

View File

@ -23,7 +23,7 @@ class AllTraining : AppCompatActivity() {
} }
val buttonSaveAll: Button = findViewById(R.id.btn_save_all_vse) val buttonSaveAll: Button = findViewById(R.id.btn_save_all_vse)
buttonSaveAll.setOnClickListener { buttonSaveAll.setOnClickListener {
val intent = Intent(this, MainActivity::class.java) val intent = Intent(this, CreatingTraining::class.java)
startActivity(intent) startActivity(intent)
isSave = true isSave = true

View File

@ -25,6 +25,8 @@ class CreatingTraining : AppCompatActivity() {
buttonSave.setOnClickListener { buttonSave.setOnClickListener {
isSave=true isSave=true
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
} }
val button_on_main: Button = findViewById(R.id.btn_on_main) 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)
}
} }
} }

View File

@ -31,18 +31,24 @@ class MainActivity : AppCompatActivity() {
startTrainingButton.setOnClickListener { startTrainingButton.setOnClickListener {
Toast.makeText(this, "Запуск тренировки!", Toast.LENGTH_SHORT).show() // Заглушка Toast.makeText(this, "Запуск тренировки!", Toast.LENGTH_SHORT).show() // Заглушка
//TODO: Intent для запуска Activity тренировки (форма 5) //TODO: Intent для запуска Activity тренировки (форма 5)
val intent = Intent(this, timer::class.java)
startActivity(intent)
} }
val templatesButton: Button = findViewById(R.id.templatesButton) val templatesButton: Button = findViewById(R.id.templatesButton)
templatesButton.setOnClickListener { templatesButton.setOnClickListener {
Toast.makeText(this, "Открытие шаблонов!", Toast.LENGTH_SHORT).show() // Заглушка //Toast.makeText(this, "Открытие шаблонов!", Toast.LENGTH_SHORT).show() // Заглушка
//TODO: Intent для открытия Activity шаблонов (форма 3) //TODO: Intent для открытия Activity шаблонов (форма 3)
val intent = Intent(this, AddWorkout::class.java)
startActivity(intent)
} }
val newTemplateButton: Button = findViewById(R.id.newTemplateButton) val newTemplateButton: Button = findViewById(R.id.newTemplateButton)
newTemplateButton.setOnClickListener { newTemplateButton.setOnClickListener {
Toast.makeText(this, "Создание нового шаблона!", Toast.LENGTH_SHORT).show() // Заглушка //Toast.makeText(this, "Создание нового шаблона!", Toast.LENGTH_SHORT).show() // Заглушка
//TODO: Intent для открытия Activity создания шаблона (форма 3) //TODO: Intent для открытия Activity создания шаблона (форма 3)
} }
} }
} }

View File

@ -1,6 +1,7 @@
package com.example.timert package com.example.timert
import android.content.Context import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.os.Bundle import android.os.Bundle
import android.widget.Switch import android.widget.Switch
@ -16,61 +17,17 @@ class SettingsActivity : AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_settings2) 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) 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 { developersButton.setOnClickListener {
AlertDialog.Builder(this) AlertDialog.Builder(this)
.setTitle("Разработчики") .setTitle("Разработчики")
.setMessage(HtmlCompat.fromHtml( .setMessage(HtmlCompat.fromHtml(
"<p style='margin-left: 2em;'><b>Вятский государственный университет</b></p><br>" + "<p style='margin-left: 2em;'><b>Программу разработали:</b></p><br>" +
"<p style='margin-left: 2em;'>Емцова Надежда Александровна</p>" + "<p style='margin-left: 2em;'>Емцова Надежда Александровна</p>" +
"<p style='margin-left: 2em;'>Новиков Николай Алексеевич</p>" + "<p style='margin-left: 2em;'>Новиков Николай Алексеевич</p>" +
"<p style='margin-left: 2em;'>Пискун Алёна Викторовна</p>", "<p style='margin-left: 2em;'>Пискун Алёна Викторовна</p>",
@ -79,5 +36,10 @@ class SettingsActivity : AppCompatActivity() {
.setPositiveButton("ОК", null) .setPositiveButton("ОК", null)
.show() .show()
} }
val on_main: Button = findViewById(R.id.btn_on_main)
on_main.setOnClickListener {
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
}
}
} }
}

View File

@ -4,15 +4,30 @@ import android.app.AlertDialog
import android.content.Intent import android.content.Intent
import android.media.Image import android.media.Image
import android.os.Bundle import android.os.Bundle
import android.os.CountDownTimer
import android.widget.Button import android.widget.Button
import android.widget.ImageButton import android.widget.ImageButton
import android.widget.TextView
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
class timer : AppCompatActivity() { class timer : AppCompatActivity() {
private var isPlay = false 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?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
enableEdgeToEdge() enableEdgeToEdge()
@ -22,6 +37,18 @@ class timer : AppCompatActivity() {
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets 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) val button: ImageButton = findViewById(R.id.stop)
button.setOnClickListener { button.setOnClickListener {
AlertDialog.Builder(this) 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<ConstraintLayout>(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<ConstraintLayout>(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()
}
} }

View File

@ -20,7 +20,7 @@
android:id="@+id/textView2" android:id="@+id/textView2"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Тренировка" android:text="Добавить упражнение"
android:textAlignment="center" android:textAlignment="center"
android:textSize="34sp" /> android:textSize="34sp" />
@ -88,7 +88,7 @@
android:id="@+id/textView8_all" android:id="@+id/textView8_all"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Отдых между подходами" android:text="Отдых между упражнениями"
android:textAlignment="center" android:textAlignment="center"
android:textSize="24sp" /> android:textSize="24sp" />
@ -131,21 +131,6 @@
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
tools:layout_editor_absoluteX="7dp"> tools:layout_editor_absoluteX="7dp">
<Button
android:id="@+id/btn_save_all_vse"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_weight="1"
android:background="@drawable/gradient_purpure"
android:text="Сохранить"
android:textAlignment="center"
android:textColor="@color/white"
tools:layout_editor_absoluteX="245dp"
tools:layout_editor_absoluteY="653dp" />
<Button <Button
android:id="@+id/btn_on_main_all_vse" android:id="@+id/btn_on_main_all_vse"
android:layout_width="150dp" android:layout_width="150dp"
@ -160,5 +145,20 @@
android:textColor="@color/white" android:textColor="@color/white"
tools:layout_editor_absoluteX="16dp" tools:layout_editor_absoluteX="16dp"
tools:layout_editor_absoluteY="653dp" /> tools:layout_editor_absoluteY="653dp" />
<Button
android:id="@+id/btn_save_all_vse"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_weight="1"
android:background="@drawable/gradient_purpure"
android:text="Сохранить"
android:textAlignment="center"
android:textColor="@color/white"
tools:layout_editor_absoluteX="245dp"
tools:layout_editor_absoluteY="653dp" />
</LinearLayout> </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -19,15 +19,15 @@
<Button <Button
android:id="@+id/settingsButton" android:id="@+id/settingsButton"
android:layout_width="48dp" android:layout_width="56dp"
android:layout_height="48dp" android:layout_height="56dp"
android:background="@drawable/ic_settings"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:layout_marginEnd="16dp" android:layout_marginEnd="16dp"
android:background="@android:drawable/ic_menu_info_details"
android:backgroundTint="@color/black"
android:contentDescription="Настройки" android:contentDescription="Настройки"
android:backgroundTint="@color/black" /> app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.cardview.widget.CardView <androidx.cardview.widget.CardView
android:id="@+id/startTrainingCardView" android:id="@+id/startTrainingCardView"

View File

@ -1,65 +1,106 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical" android:orientation="vertical"
android:padding="16dp" android:padding="16dp"
android:background="@drawable/background_image2"> <!-- Добавили background --> android:background="@drawable/background_image2"> <!-- Добавили background -->
<TextView <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent">
android:text="Настройки"
android:textSize="24sp" <LinearLayout
android:textStyle="bold" android:id="@+id/about_progr_layout"
android:layout_marginBottom="16dp"/> android:layout_width="match_parent"
android:layout_height="450dp"
android:layout_marginTop="35dp"
android:orientation="vertical"
app:layout_constraintTop_toTopOf="parent"
tools:layout_editor_absoluteX="0dp">
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Таймер для тренировок" android:layout_gravity="center"
android:textSize="18sp" android:layout_marginBottom="16dp"
android:layout_marginBottom="8dp"/> android:text="О программе"
android:textAlignment="center"
android:textSize="24sp"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="Название приложения: Таймер для тренировок"
android:textSize="18sp" />
<TextView
android:id="@+id/textView7"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="Данное приложение поможет пользователю в организации своих тренировок."
android:textSize="18sp" />
<TextView
android:id="@+id/textView9"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="Оно поможет задавать количество подходов и упражнений, устанавливать время работы и отдыха, запускать последние 3 тренировки."
android:textSize="18sp" />
<TextView
android:id="@+id/textView12"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="Можно задавать как интервалы для всех упражнений, так и для каждого отдельно, добавляя названия упражнений."
android:textSize="18sp" />
<TextView
android:id="@+id/versionTextView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:text="При возникновении проблем обращаться на почту: stud179277@vyatsu.ru" />
<TextView <TextView
android:id="@+id/versionTextView" android:id="@+id/versionTextView"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Версия: 1.0" android:layout_marginBottom="16dp"
android:layout_marginBottom="16dp"/> android:text="Версия: 1.0" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_marginBottom="8dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Темная тема"
android:textSize="16sp"/>
<Switch
android:id="@+id/darkModeSwitch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout> </LinearLayout>
<Button <LinearLayout
android:id="@+id/aboutButton" android:id="@+id/btn_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="100dp"
android:text="О программе" android:layout_marginBottom="16dp"
android:layout_marginBottom="8dp"/> android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
tools:layout_editor_absoluteX="0dp">
<Button <Button
android:id="@+id/developersButton" android:id="@+id/developersButton"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Разработчики"/> android:background="@drawable/blue_gradient"
android:text="Разработчики" />
<Button
android:id="@+id/btn_on_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="@drawable/blue_gradient"
android:text="На главную" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout> </LinearLayout>

View File

@ -69,9 +69,9 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:gravity="center" android:gravity="center"
android:text="Подход №" android:text="Подход № "
android:textAlignment="textEnd" android:textAlignment="textEnd"
android:textColor="#D0CBCB" android:textColor="@color/black"
android:textSize="34sp" /> android:textSize="34sp" />
<TextView <TextView
@ -82,7 +82,7 @@
android:gravity="center" android:gravity="center"
android:text=" 1" android:text=" 1"
android:textAlignment="viewStart" android:textAlignment="viewStart"
android:textColor="#D0CBCB" android:textColor="@color/black"
android:textSize="34sp" /> android:textSize="34sp" />
</LinearLayout> </LinearLayout>
@ -96,9 +96,9 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:text="Упражнение" android:text="Упражнение "
android:textAlignment="textEnd" android:textAlignment="textEnd"
android:textColor="#D0CBCB" android:textColor="@color/black"
android:textSize="34sp" /> android:textSize="34sp" />
<TextView <TextView
@ -108,12 +108,12 @@
android:layout_weight="1" android:layout_weight="1"
android:text=" 1" android:text=" 1"
android:textAlignment="viewStart" android:textAlignment="viewStart"
android:textColor="#D0CBCB" android:textColor="@color/black"
android:textSize="34sp" /> android:textSize="34sp" />
</LinearLayout> </LinearLayout>
<TextView <TextView
android:id="@+id/time" android:id="@+id/timerText"
android:layout_width="163dp" android:layout_width="163dp"
android:layout_height="153dp" android:layout_height="153dp"
android:layout_gravity="center" android:layout_gravity="center"
@ -123,13 +123,13 @@
android:textSize="60sp" /> android:textSize="60sp" />
<TextView <TextView
android:id="@+id/work" android:id="@+id/statusText"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="70dp" android:layout_height="70dp"
android:gravity="center" android:gravity="center"
android:text="Работа" android:text="Работа"
android:textAlignment="center" android:textAlignment="center"
android:textColor="#D0CBCB" android:textColor="@color/black"
android:textSize="34sp" /> android:textSize="34sp" />
</LinearLayout> </LinearLayout>