Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 0 additions & 10 deletions .idea/runConfigurations.xml

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.rsschool.android2021

interface ActionPerformedListener {
fun onActionPerformedOne(previousNumber: Int)
fun onActionPerformedTwo(min: Int, max: Int)
}
43 changes: 40 additions & 3 deletions app/src/main/java/com/rsschool/android2021/FirstFragment.kt
Original file line number Diff line number Diff line change
@@ -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?,
Expand All @@ -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
Expand Down
22 changes: 19 additions & 3 deletions app/src/main/java/com/rsschool/android2021/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,39 @@
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);
}

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);
}
}
28 changes: 23 additions & 5 deletions app/src/main/java/com/rsschool/android2021/SecondFragment.kt
Original file line number Diff line number Diff line change
@@ -1,18 +1,28 @@
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.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?,
Expand All @@ -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)
Expand All @@ -29,26 +40,33 @@ 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
fun newInstance(min: Int, max: Int): SecondFragment {
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
}
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
}
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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