diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml deleted file mode 100644 index 797acea..0000000 --- a/.idea/runConfigurations.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/rsschool/android2021/ActionPerformedListener.kt b/app/src/main/java/com/rsschool/android2021/ActionPerformedListener.kt new file mode 100644 index 0000000..6645086 --- /dev/null +++ b/app/src/main/java/com/rsschool/android2021/ActionPerformedListener.kt @@ -0,0 +1,6 @@ +package com.rsschool.android2021 + +interface ActionPerformedListener { + fun onActionPerformedOne(previousNumber: Int) + fun onActionPerformedTwo(min: Int, max: Int) +} \ No newline at end of file diff --git a/app/src/main/java/com/rsschool/android2021/FirstFragment.kt b/app/src/main/java/com/rsschool/android2021/FirstFragment.kt index 2449535..9ad6e3e 100644 --- a/app/src/main/java/com/rsschool/android2021/FirstFragment.kt +++ b/app/src/main/java/com/rsschool/android2021/FirstFragment.kt @@ -1,18 +1,33 @@ package com.rsschool.android2021 +import android.content.Context import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Button +import android.widget.EditText import android.widget.TextView import androidx.fragment.app.Fragment class FirstFragment : Fragment() { + private var listener: ActionPerformedListener? = null private var generateButton: Button? = null private var previousResult: TextView? = null + private var minValue: EditText? = null + private var maxValue: EditText? = null + private var min: Int = 0 + private var max: Int = 0 + private var yesOrNo: Boolean = false + // Добавляем слушатель через контекст + override fun onAttach(context: Context) { + super.onAttach(context) + listener = context as ActionPerformedListener + } + + // Создаем фрагмент используя inflater.inflate override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -21,22 +36,44 @@ class FirstFragment : Fragment() { return inflater.inflate(R.layout.fragment_first, container, false) } + // Создаем содержимое фрагмента override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) previousResult = view.findViewById(R.id.previous_result) generateButton = view.findViewById(R.id.generate) + minValue = view.findViewById(R.id.min_value) + maxValue = view.findViewById(R.id.max_value) val result = arguments?.getInt(PREVIOUS_RESULT_KEY) previousResult?.text = "Previous result: ${result.toString()}" - // TODO: val min = ... - // TODO: val max = ... + // Переносим инициализацию min и max по нажатию кнопки под generateButton?.setOnClickListener generateButton?.setOnClickListener { - // TODO: send min and max to the SecondFragment + + if (minValue?.text?.isEmpty() == true) minValue!!.error = "Введите минимальное значение." + else + if (maxValue?.text?.isEmpty() == true) maxValue!!.error = "Введите максимальное значение." + else + // Так как в условии явно не указано максимальное значение положительного целого числа, + // А смысл подгонки верхнего значения из String в Integer через Long логически не обоснован, + // Принял архитектурное решение, что верхнее ограничение будет 999 999 999 для простоты кода. + if ( minValue?.text.toString().length > 9 ) minValue!!.error = "Значение должно быть меньше 999 999 999." + else + if ( maxValue?.text.toString().length > 9 ) maxValue!!.error = "Значение должно быть меньше 1 000 000 000." + else { + min = minValue?.text.toString().toInt() + max = maxValue?.text.toString().toInt() + if ( (max) <= (min) ) { + minValue!!.error = "Я должен быть меньше своего брата." + maxValue!!.error = "Я должен быть больше своего брата." + } + else listener?.onActionPerformedTwo(min as Int, max as Int) + } } } + // Передаем данные в новый фрагмент, который создаст MainActivity companion object { @JvmStatic diff --git a/app/src/main/java/com/rsschool/android2021/MainActivity.java b/app/src/main/java/com/rsschool/android2021/MainActivity.java index ced8ec9..07f9fa4 100644 --- a/app/src/main/java/com/rsschool/android2021/MainActivity.java +++ b/app/src/main/java/com/rsschool/android2021/MainActivity.java @@ -7,12 +7,13 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentTransaction; -public class MainActivity extends AppCompatActivity { +public class MainActivity extends AppCompatActivity implements ActionPerformedListener { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + openFirstFragment(0); } @@ -20,10 +21,25 @@ private void openFirstFragment(int previousNumber) { final Fragment firstFragment = FirstFragment.newInstance(previousNumber); final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.container, firstFragment); - // TODO: invoke function which apply changes of the transaction + transaction.commit(); + // Здесь нехватало лишь добавить коммит } private void openSecondFragment(int min, int max) { - // TODO: implement it + // Здесь добавил FragmentTransaction, добавил в него второй врагмент и закоммитил + final Fragment secondFragment = SecondFragment.newInstance(min, max); + final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + transaction.replace(R.id.container, secondFragment); + transaction.commit(); + } + + @Override + public void onActionPerformedOne(int previousNumber) { + openFirstFragment(previousNumber); + } + + @Override + public void onActionPerformedTwo(int min, int max) { + openSecondFragment(min, max); } } diff --git a/app/src/main/java/com/rsschool/android2021/SecondFragment.kt b/app/src/main/java/com/rsschool/android2021/SecondFragment.kt index 536fdb1..933d536 100644 --- a/app/src/main/java/com/rsschool/android2021/SecondFragment.kt +++ b/app/src/main/java/com/rsschool/android2021/SecondFragment.kt @@ -1,5 +1,6 @@ package com.rsschool.android2021 +import android.content.Context import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -7,12 +8,21 @@ import android.view.ViewGroup import android.widget.Button import android.widget.TextView import androidx.fragment.app.Fragment +import kotlin.random.Random class SecondFragment : Fragment() { + private var listener: ActionPerformedListener? = null private var backButton: Button? = null private var result: TextView? = null + // Добавляем слушатель через контекст + override fun onAttach(context: Context) { + super.onAttach(context) + listener = context as ActionPerformedListener + } + + // Создаем фрагмент, переопределив метод и используя inflater.inflate override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -21,6 +31,7 @@ class SecondFragment : Fragment() { return inflater.inflate(R.layout.fragment_second, container, false) } + // Создаем содержимое фрагмента override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) result = view.findViewById(R.id.result) @@ -29,18 +40,22 @@ class SecondFragment : Fragment() { val min = arguments?.getInt(MIN_VALUE_KEY) ?: 0 val max = arguments?.getInt(MAX_VALUE_KEY) ?: 0 - result?.text = generate(min, max).toString() + val resultRandom = generate(min, max) + result?.text = resultRandom.toString() backButton?.setOnClickListener { - // TODO: implement back + // Вызываем первый фрагмент, используя метод, который принадлежит объекту MainActivity + listener?.onActionPerformedOne(resultRandom) + } } private fun generate(min: Int, max: Int): Int { - // TODO: generate random number - return 0 + // Для генерации случайного числа, перем готовый метод из библиотеки + return Random.nextInt(from = min, until = max) } + // Передаем данные в новый фрагмент, который создаст MainActivity companion object { @JvmStatic @@ -48,7 +63,10 @@ class SecondFragment : Fragment() { val fragment = SecondFragment() val args = Bundle() - // TODO: implement adding arguments + // Полученные значения связываем парой <ключ, значение> и кладем в объект хранения + args.putInt(MIN_VALUE_KEY, min) + args.putInt(MAX_VALUE_KEY, max) + fragment.arguments = args return fragment } diff --git a/build.gradle b/build.gradle index 7c71d04..79d3da6 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { jcenter() } dependencies { - classpath "com.android.tools.build:gradle:4.1.3" + classpath 'com.android.tools.build:gradle:4.2.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b750993..6e36d96 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip