Skip to content

Commit 1e4f02b

Browse files
init: Update!
1 parent d852ae8 commit 1e4f02b

21 files changed

+247
-58
lines changed

.gitignore

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
*.iml
22
.gradle
33
/local.properties
4+
/.idea/caches
5+
/.idea/libraries
6+
/.idea/modules.xml
7+
/.idea/workspace.xml
8+
/.idea/navEditor.xml
9+
/.idea/assetWizardSettings.xml
410
.DS_Store
511
/build
612
/captures
713
.externalNativeBuild
814
.cxx
9-
local.properties
10-
.idea/*

app/src/main/AndroidManifest.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
<category android:name="android.intent.category.LAUNCHER" />
2121
</intent-filter>
2222
</activity>
23+
<meta-data
24+
android:name="preloaded_fonts"
25+
android:resource="@array/preloaded_fonts" />
2326

2427
</application>
2528

Lines changed: 54 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,86 @@
11
package com.rsschool.android2021
22

3+
import android.content.Context
34
import android.os.Bundle
45
import android.view.LayoutInflater
56
import android.view.View
67
import android.view.ViewGroup
78
import android.widget.Button
9+
import android.widget.EditText
810
import android.widget.TextView
911
import androidx.fragment.app.Fragment
1012

1113
class FirstFragment : Fragment() {
1214

13-
private var generateButton: Button? = null
14-
private var previousResult: TextView? = null
15+
private lateinit var onClickFirstFragment: OnClickFirstFragment // Интерфейс клика для генрации, проинецилизированна переменная после в коде
16+
private var generateButton: Button? = null // Кнопка для Генерации
17+
private var previousResult: TextView? = null // Предыдущий результат
18+
private var editMinValue: EditText? = null // Редактирование Минимума
19+
private var editMaxValue: EditText? = null // Редактирование максимума
20+
21+
override fun onAttach(context: Context) {
22+
super.onAttach(context)
23+
onClickFirstFragment = context as OnClickFirstFragment
24+
}
1525

1626
override fun onCreateView(
1727
inflater: LayoutInflater,
1828
container: ViewGroup?,
1929
savedInstanceState: Bundle?
2030
): View? {
21-
return inflater.inflate(R.layout.fragment_first, container, false)
31+
return inflater.inflate(R.layout.fragment_first, container, false) // расширяем фрагмент
2232
}
2333

24-
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
34+
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { // создаем View
2535
super.onViewCreated(view, savedInstanceState)
26-
previousResult = view.findViewById(R.id.previous_result)
27-
generateButton = view.findViewById(R.id.generate)
36+
// инициализация
37+
previousResult = view.findViewById(R.id.previous_result) // предыдущий результат
38+
generateButton = view.findViewById(R.id.generate) // кнопка генерация
2839

29-
val result = arguments?.getInt(PREVIOUS_RESULT_KEY)
30-
previousResult?.text = "Previous result: ${result.toString()}"
40+
editMinValue = view.findViewById(R.id.min_value) // EditText минимального диапазона
41+
editMaxValue = view.findViewById(R.id.max_value) // EditText максимального диапазона
42+
43+
val result =
44+
arguments?.getInt(PREVIOUS_RESULT_KEY) // получаем из аргумента последний результат
45+
previousResult?.text = "Previous result: ${result.toString()}" // заносим в TextView
3146

32-
// TODO: val min = ...
33-
// TODO: val max = ...
3447

3548
generateButton?.setOnClickListener {
36-
// TODO: send min and max to the SecondFragment
49+
50+
val min: Long =
51+
editMinValue?.text.toString().toLongOrNull()
52+
?: 0 // получаем минимальное значения из EditText
53+
val max: Long =
54+
editMaxValue?.text.toString().toLongOrNull()
55+
?: 0 // получаем максимальное значени EditText
56+
57+
if (min == 0L || max == 0L)
58+
showToast("Вы не ввели минимальное и/или максимальное значение")
59+
else if (min > Int.MAX_VALUE || max > Int.MAX_VALUE) // проверка на диапозон Int хранимых значений для Long
60+
showToast("Введены значение превышающие хранимых в памяти! \n Обратитесь к разработчику, для перевода в Long значения =)")
61+
else if (min in 0 until max) // min от 0 и больше max (min не включает max)
62+
onClickFirstFragment.onGoSecondFragment(min.toInt(), max.toInt())
63+
3764
}
3865
}
3966

40-
companion object {
4167

42-
@JvmStatic
43-
fun newInstance(previousResult: Int): FirstFragment {
44-
val fragment = FirstFragment()
45-
val args = Bundle()
46-
args.putInt(PREVIOUS_RESULT_KEY, previousResult)
47-
fragment.arguments = args
48-
return fragment
68+
companion object { // статичные данные
69+
70+
@JvmStatic // для вызова из Java доступным - генерация доп метода
71+
fun newInstance(previousResult: Int): FirstFragment { // получаем Предыдущий результат
72+
val fragment = FirstFragment() // получаем фрагмент
73+
val args = Bundle() // получаем бандл
74+
args.putInt(
75+
PREVIOUS_RESULT_KEY,
76+
previousResult
77+
) // послаем результат - предыдущий результат
78+
fragment.arguments = args // заносим в аргументы
79+
return fragment // возвращаем фрагмент с аргументами
4980
}
5081

51-
private const val PREVIOUS_RESULT_KEY = "PREVIOUS_RESULT"
82+
const val PREVIOUS_RESULT_KEY =
83+
"PREVIOUS_RESULT" // константа для отправки предыдущего результата
5284
}
53-
}
85+
}
86+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.rsschool.android2021
2+
3+
import android.widget.Toast
4+
import androidx.fragment.app.Fragment
5+
6+
fun Fragment.showToast(text: CharSequence) { // отображение тостов
7+
Toast.makeText(
8+
context,
9+
text, Toast.LENGTH_SHORT
10+
).show()
11+
}
Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,59 @@
11
package com.rsschool.android2021;
22

3+
import android.os.Build;
34
import android.os.Bundle;
45

56
import androidx.annotation.Nullable;
67
import androidx.appcompat.app.AppCompatActivity;
78
import androidx.fragment.app.Fragment;
89
import androidx.fragment.app.FragmentTransaction;
10+
// Context - хранит данные о системе, представляет доступ
911

10-
public class MainActivity extends AppCompatActivity {
12+
public class MainActivity extends AppCompatActivity implements OnClickFirstFragment, OnClickSecondFragment {
13+
private SecondFragment secondFragment = null;
1114

1215
@Override
1316
protected void onCreate(@Nullable Bundle savedInstanceState) {
1417
super.onCreate(savedInstanceState);
1518
setContentView(R.layout.activity_main);
19+
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
20+
getWindow().setNavigationBarColor(getResources().getColor(R.color.ui_background));
21+
}
1622
openFirstFragment(0);
1723
}
1824

19-
private void openFirstFragment(int previousNumber) {
20-
final Fragment firstFragment = FirstFragment.newInstance(previousNumber);
21-
final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
22-
transaction.replace(R.id.container, firstFragment);
23-
// TODO: invoke function which apply changes of the transaction
25+
private void openFirstFragment(int previousNumber) { // Первый Фрагмент. Предыдущий результат
26+
final Fragment firstFragment = FirstFragment.newInstance(previousNumber); // создаем фрагмент и передаем Данные - Предыдущий результат
27+
final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); // получаем управляющий фрагментами
28+
transaction.replace(R.id.container, firstFragment); // заменяем имеющийся на превый
29+
transaction.commit(); // подтверждаем изменения (замену)
2430
}
2531

26-
private void openSecondFragment(int min, int max) {
27-
// TODO: implement it
32+
private void openSecondFragment(int min, int max) { // Второй Фрагмент. Минимум и максимум
33+
secondFragment = SecondFragment.newInstance(min, max); // создаем фрагмент и предаем Данные - минимум и максимум
34+
final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); // получаем управляющий фрагментами
35+
transaction.replace(R.id.container, secondFragment); // заменяем на второй фрагмент
36+
transaction.commit(); // подтверждаем изменения (замену)
2837
}
38+
39+
@Override
40+
public void onGoSecondFragment(int min, int max) {
41+
openSecondFragment(min, max);
42+
}
43+
44+
@Override
45+
public void onGoFirstFragment(int previousNumber) {
46+
openFirstFragment(previousNumber);
47+
}
48+
49+
@Override
50+
public void onBackPressed() {
51+
if (secondFragment.isResumed()) { // проверка что открыт Первый фрагмент
52+
secondFragment.onToFirstFragment(); // вызов из второго фрагмента первый
53+
54+
} else
55+
super.onBackPressed();
56+
57+
}
58+
2959
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.rsschool.android2021
2+
3+
interface OnClickFirstFragment {
4+
fun onGoSecondFragment(min: Int, max: Int)
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.rsschool.android2021
2+
3+
interface OnClickSecondFragment {
4+
fun onGoFirstFragment(previousNumber: Int)
5+
}
Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,77 @@
11
package com.rsschool.android2021
22

3+
import android.content.Context
34
import android.os.Bundle
45
import android.view.LayoutInflater
56
import android.view.View
67
import android.view.ViewGroup
78
import android.widget.Button
89
import android.widget.TextView
910
import androidx.fragment.app.Fragment
11+
import kotlin.random.Random
1012

1113
class SecondFragment : Fragment() {
1214

13-
private var backButton: Button? = null
14-
private var result: TextView? = null
15+
private lateinit var onSecondFragment: OnClickSecondFragment // Вызов Первого врагмента для Второго
16+
private var backButton: Button? = null // кнопка Назад
17+
private var result: TextView? = null // текст результат
18+
19+
override fun onAttach(context: Context) {
20+
super.onAttach(context)
21+
onSecondFragment = context as OnClickSecondFragment // преведение типа интерфейса
22+
}
1523

1624
override fun onCreateView(
1725
inflater: LayoutInflater,
1826
container: ViewGroup?,
1927
savedInstanceState: Bundle?
2028
): View? {
21-
return inflater.inflate(R.layout.fragment_second, container, false)
29+
return inflater.inflate(R.layout.fragment_second, container, false) // расширяем фрагмент
2230
}
2331

2432
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
2533
super.onViewCreated(view, savedInstanceState)
26-
result = view.findViewById(R.id.result)
27-
backButton = view.findViewById(R.id.back)
34+
result = view.findViewById(R.id.result) // инициализация результата
35+
backButton = view.findViewById(R.id.back) // инициализация кнопки назад
2836

29-
val min = arguments?.getInt(MIN_VALUE_KEY) ?: 0
30-
val max = arguments?.getInt(MAX_VALUE_KEY) ?: 0
37+
val min = arguments?.getInt(MIN_VALUE_KEY) ?: 0 // получаем из аргумента минимум
38+
val max = arguments?.getInt(MAX_VALUE_KEY) ?: 0// получаем из аргумента максимум
3139

32-
result?.text = generate(min, max).toString()
40+
result?.text = generate(
41+
min,
42+
max
43+
).toString() // заносим в результат данные из функции переданной функции и приводим в строку
3344

34-
backButton?.setOnClickListener {
35-
// TODO: implement back
45+
backButton?.setOnClickListener { // кнопка назад
46+
onSecondFragment.onGoFirstFragment(result?.text.toString().toInt() ?: 0)
3647
}
48+
3749
}
3850

39-
private fun generate(min: Int, max: Int): Int {
40-
// TODO: generate random number
41-
return 0
51+
private fun generate(min: Int, max: Int): Int { // генерация и возврат
52+
return Random.nextInt(min, max)
53+
}
54+
55+
56+
fun onToFirstFragment() {
57+
onSecondFragment.onGoFirstFragment(result?.text.toString().toInt() ?: 0)
4258
}
4359

44-
companion object {
60+
companion object { // статичные данные
4561

46-
@JvmStatic
62+
@JvmStatic // для вызова из Java доступным - генерация доп метода
4763
fun newInstance(min: Int, max: Int): SecondFragment {
4864
val fragment = SecondFragment()
4965
val args = Bundle()
5066

51-
// TODO: implement adding arguments
67+
args.putInt(MIN_VALUE_KEY, min)
68+
args.putInt(MAX_VALUE_KEY, max)
5269

70+
fragment.arguments = args
5371
return fragment
5472
}
5573

56-
private const val MIN_VALUE_KEY = "MIN_VALUE"
57-
private const val MAX_VALUE_KEY = "MAX_VALUE"
74+
const val MIN_VALUE_KEY = "MIN_VALUE"
75+
const val MAX_VALUE_KEY = "MAX_VALUE"
5876
}
5977
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<shape xmlns:android="http://schemas.android.com/apk/res/android">
3+
<gradient
4+
android:angle="180"
5+
android:centerColor="#19E653"
6+
android:endColor="#749125"
7+
android:startColor="#155C49" />
8+
<corners android:radius="12dp"/>
9+
</shape>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<shape xmlns:android="http://schemas.android.com/apk/res/android">
3+
<gradient
4+
android:angle="180"
5+
android:centerColor="#617CFF"
6+
android:endColor="#ED0F0F"
7+
android:startColor="#631762" />
8+
<corners android:radius="12dp"/>
9+
</shape>

0 commit comments

Comments
 (0)