From 6a78e23e848b4ee42e2a275eb25ad1b851c5e7a3 Mon Sep 17 00:00:00 2001 From: Ekaterina Date: Sun, 17 Nov 2024 01:50:47 +0300 Subject: [PATCH 1/2] lesson2 part2 --- .../java/com/example/testapp/MainActivity.kt | 90 +++++++++++++++---- testapp/src/main/res/layout/button.xml | 1 - testapp/src/main/res/values-en/strings.xml | 7 ++ testapp/src/main/res/values/strings.xml | 7 ++ 4 files changed, 88 insertions(+), 17 deletions(-) diff --git a/testapp/src/main/java/com/example/testapp/MainActivity.kt b/testapp/src/main/java/com/example/testapp/MainActivity.kt index 9ae90b9..ba153c7 100644 --- a/testapp/src/main/java/com/example/testapp/MainActivity.kt +++ b/testapp/src/main/java/com/example/testapp/MainActivity.kt @@ -10,12 +10,12 @@ import android.view.ViewGroup import android.widget.Button import android.widget.EditText import android.widget.LinearLayout +import android.widget.Toast import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.allViews class MainActivity : AppCompatActivity() { - private lateinit var itemsList: MutableList - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) @@ -27,26 +27,84 @@ class MainActivity : AppCompatActivity() { return true } + val textOnScreen = arrayListOf() + fun click() { + var countButton = 0 + var countEditText = 0 + val mainScreen = findViewById(R.id.scroll_main_layout) as LinearLayout + mainScreen + .allViews + .filter { view -> view is EditText } + .map { view -> view as EditText } + .forEach { editText: EditText -> + textOnScreen.add(editText.text.toString()) + } + val textEditText = resources.getString(R.string.text) + val textEditButton = resources.getString(R.string.button) + val textLog = resources.getString(R.string.log) + val mistake = resources.getString(R.string.mistake) + val zeroText = resources.getString(R.string.zerotext) + if (textOnScreen.isEmpty()) { + Toast.makeText(this, zeroText, Toast.LENGTH_SHORT).show() + } else { + for (element in textOnScreen) { + if (element==textEditText) { + createEditView() + countEditText += 1 + } else if (element==textEditButton) { + createButton() + countButton +=1 + } else { + Toast.makeText(this, mistake, Toast.LENGTH_SHORT).show() + } + } + Log.d("Log","$countEditText $textEditText $countButton $textEditButton $textLog") + } + mainScreen + .allViews + .filter { view -> view is EditText } + .map { view -> view as EditText } + .forEach { editText: EditText -> + editText.text.clear() + } + textOnScreen.clear() + } + + fun createButton() { + val mainScreen = findViewById(R.id.scroll_main_layout) as LinearLayout + val buttonCreated = resources.getString(R.string.button_created) + Log.d("Log",buttonCreated) + val v: View = LayoutInflater.from(this).inflate( + /* resource = */ R.layout.button, + /* root = */ mainScreen, + /* attachToRoot = */ false + ) + val str: String = v.resources.getString(R.string.button_text) + val btn = v as Button + btn.text = str + mainScreen.addView(btn) + btn.setOnClickListener { + click() + } + } + + fun createEditView() { + val mainScreen = findViewById(R.id.scroll_main_layout) as LinearLayout + val textCreated = resources.getString(R.string.text_created) + Log.d("Log",textCreated) + val addText = EditText(this) + addText.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT) + mainScreen.addView(addText) + } + override fun onOptionsItemSelected(item: MenuItem): Boolean { val id = item.getItemId() val mainScreen = findViewById(R.id.scroll_main_layout) as LinearLayout if (id == R.id.action_add_button) { - Log.d("myLogs","button created") - val v: View = LayoutInflater.from(this).inflate( - /* resource = */ R.layout.button, - /* root = */ mainScreen, - /* attachToRoot = */ false - ) - val str: String = v.resources.getString(R.string.button_text) - val btn = v as Button - btn.text = str - mainScreen.addView(btn) + createButton() } if (id == R.id.action_add_text) { - Log.d("myLogs","text created") - val addText = EditText(this) - addText.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT) - mainScreen.addView(addText) + createEditView() } if (id == R.id.action_clear) { mainScreen.removeAllViews() diff --git a/testapp/src/main/res/layout/button.xml b/testapp/src/main/res/layout/button.xml index 4987db3..b8bcda7 100644 --- a/testapp/src/main/res/layout/button.xml +++ b/testapp/src/main/res/layout/button.xml @@ -7,5 +7,4 @@ android:id="@+id/new_button" android:text="@string/button_text" android:textColor="@color/black"> - \ No newline at end of file diff --git a/testapp/src/main/res/values-en/strings.xml b/testapp/src/main/res/values-en/strings.xml index 144ccba..d745644 100644 --- a/testapp/src/main/res/values-en/strings.xml +++ b/testapp/src/main/res/values-en/strings.xml @@ -2,4 +2,11 @@ testApp Create elements + button created + text created + text + button + were created + mistake + need 1 text \ No newline at end of file diff --git a/testapp/src/main/res/values/strings.xml b/testapp/src/main/res/values/strings.xml index 78f580a..f9c9ce9 100644 --- a/testapp/src/main/res/values/strings.xml +++ b/testapp/src/main/res/values/strings.xml @@ -2,4 +2,11 @@ Тестовое приложение Создать кнопку + кнопка создана + текстовое поле создано + текст + кнопка + было создано + ошибка + нужно хотя бы 1 тексовое поле \ No newline at end of file From 37a301115ab9767bfd545752e4b6631191d36108 Mon Sep 17 00:00:00 2001 From: Ekaterina Date: Fri, 21 Feb 2025 17:13:36 +0300 Subject: [PATCH 2/2] lesson2 changes --- settings.gradle.kts | 1 - testapp/libs.versions.toml | 48 ++++++++++ .../java/com/example/testapp/MainActivity.kt | 89 +++++++++++-------- testapp/src/main/res/layout-land/button.xml | 4 +- testapp/src/main/res/layout/activity_main.xml | 12 +-- testapp/src/main/res/layout/button.xml | 2 +- testapp/src/main/res/menu/menu_main.xml | 6 +- testapp/src/main/res/values-en/strings.xml | 2 + testapp/src/main/res/values/strings.xml | 2 + 9 files changed, 116 insertions(+), 50 deletions(-) create mode 100644 testapp/libs.versions.toml diff --git a/settings.gradle.kts b/settings.gradle.kts index 58cfac6..d863d97 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -14,5 +14,4 @@ dependencyResolutionManagement { } rootProject.name = "Andoid" -include(":app") include(":testapp") diff --git a/testapp/libs.versions.toml b/testapp/libs.versions.toml new file mode 100644 index 0000000..121b5fc --- /dev/null +++ b/testapp/libs.versions.toml @@ -0,0 +1,48 @@ +[versions] +coreVersion = "1.9.0" +ktxVersion = "2.8.3" +composeVersion = "1.9.0" +appcompatVersion = "1.7.0" +junitVersion = "4.13.2" +testExtJunitVersion = "1.2.1" +espressoCoreVersion = "3.6.1" +composeBomVersion = "2023.03.00" + +[libraries] +androidx-core = {group = "androidx.core", name = "core-ktx",version.ref = "coreVersion"} +androidx-lifecycle = {group = "androidx.lifecycle", name = "lifecycle-runtime-ktx" , version.ref = "ktxVersion"} +androidx-activity = {group = "androidx.activity", name = "activity-compose" , version.ref = "composeVersion"} +androidx-appcompat = {group = "androidx.appcompat", name = "appcompat" , version.ref = "appcompatVersion"} +junit = {group = "junit", name = "junit" , version.ref = "junitVersion"} +androidx-test-ext = {group = "androidx.test.ext", name = "junit" , version.ref = "testExtJunitVersion"} +androidx-test-espresso = {group = "androidx.test.espresso", name = "espresso-core" , version.ref = "espressoCoreVersion"} +androidx-compose = {group = "androidx.compose", name = "compose-bom" , version.ref = "composeBomVersion"} + + +#implementation(libs.android.core) +#implementation(libs.androidx.lifecycle) +#implementation(libs.androidx.activity) +# +#implementation(platform(libs.androidx.compose)) +#implementation("androidx.compose.ui:ui") +#implementation("androidx.compose.ui:ui-graphics") +#implementation("androidx.compose.ui:ui-tooling-preview") +#implementation("androidx.compose.material3:material3") +# +#implementation(libs.androidx.appcompat) +#testImplementation(libs.junit) +#androidTestImplementation(libs.androidx.test.ext) +#androidTestImplementation(libs.androidx.test.espresso) +# +#androidTestImplementation(platform(libs.androidx.compose)) +#androidTestImplementation("androidx.compose.ui:ui-test-junit4") +#debugImplementation("androidx.compose.ui:ui-tooling") +#debugImplementation("androidx.compose.ui:ui-test-manifest") + + +[plugins] +kotlin-gradlePlugin = {id = "org.jetbrains.kotlin.android", version.ref ="kotlin"} +android-application = {id = "com.android.application", version.ref ="androidGradlePlugin"} + +#alias(libs.plugins.kotlin.gradlePlugin) +#alias(libs.plugins.android.application) \ No newline at end of file diff --git a/testapp/src/main/java/com/example/testapp/MainActivity.kt b/testapp/src/main/java/com/example/testapp/MainActivity.kt index ba153c7..e9514a8 100644 --- a/testapp/src/main/java/com/example/testapp/MainActivity.kt +++ b/testapp/src/main/java/com/example/testapp/MainActivity.kt @@ -16,6 +16,8 @@ import androidx.core.view.allViews class MainActivity : AppCompatActivity() { + private val textOnScreen = arrayListOf() + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) @@ -27,11 +29,22 @@ class MainActivity : AppCompatActivity() { return true } - val textOnScreen = arrayListOf() - fun click() { + private fun showToast(message: String) { + Toast.makeText(this, message, Toast.LENGTH_SHORT).show() + } + + private fun getTextById(stringId: Int): String { + return resources.getString(stringId) + } + + private fun sendLogEvent(message: String) { + Log.d("Log",message) + } + + private fun click() { var countButton = 0 var countEditText = 0 - val mainScreen = findViewById(R.id.scroll_main_layout) as LinearLayout + val mainScreen = findViewById(R.id.scroll_main_layout) mainScreen .allViews .filter { view -> view is EditText } @@ -39,26 +52,30 @@ class MainActivity : AppCompatActivity() { .forEach { editText: EditText -> textOnScreen.add(editText.text.toString()) } - val textEditText = resources.getString(R.string.text) - val textEditButton = resources.getString(R.string.button) - val textLog = resources.getString(R.string.log) - val mistake = resources.getString(R.string.mistake) - val zeroText = resources.getString(R.string.zerotext) + val textEditText = getTextById(R.string.text) + val textEditButton = getTextById(R.string.button) + val textLog = getTextById(R.string.log) + val mistake = getTextById(R.string.mistake) + val zeroText = getTextById(R.string.zerotext) if (textOnScreen.isEmpty()) { - Toast.makeText(this, zeroText, Toast.LENGTH_SHORT).show() + showToast(zeroText) } else { for (element in textOnScreen) { - if (element==textEditText) { - createEditView() - countEditText += 1 - } else if (element==textEditButton) { - createButton() - countButton +=1 - } else { - Toast.makeText(this, mistake, Toast.LENGTH_SHORT).show() + when (element) { + textEditText -> { + createEditView() + countEditText += 1 + break + } + textEditButton -> { + createButton() + countButton +=1 + break + } + else -> showToast(mistake) } } - Log.d("Log","$countEditText $textEditText $countButton $textEditButton $textLog") + sendLogEvent("$countEditText $textEditText $countButton $textEditButton $textLog") } mainScreen .allViews @@ -70,10 +87,10 @@ class MainActivity : AppCompatActivity() { textOnScreen.clear() } - fun createButton() { - val mainScreen = findViewById(R.id.scroll_main_layout) as LinearLayout - val buttonCreated = resources.getString(R.string.button_created) - Log.d("Log",buttonCreated) + private fun createButton() { + val mainScreen = findViewById(R.id.scroll_main_layout) + val buttonCreated = getTextById(R.string.button_created) + sendLogEvent(buttonCreated) val v: View = LayoutInflater.from(this).inflate( /* resource = */ R.layout.button, /* root = */ mainScreen, @@ -88,26 +105,24 @@ class MainActivity : AppCompatActivity() { } } - fun createEditView() { - val mainScreen = findViewById(R.id.scroll_main_layout) as LinearLayout - val textCreated = resources.getString(R.string.text_created) - Log.d("Log",textCreated) + private fun createEditView() { + val mainScreen = findViewById(R.id.scroll_main_layout) + val textCreated = getTextById(R.string.text_created) + sendLogEvent(textCreated) val addText = EditText(this) - addText.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT) + addText.layoutParams = LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT) mainScreen.addView(addText) } override fun onOptionsItemSelected(item: MenuItem): Boolean { - val id = item.getItemId() - val mainScreen = findViewById(R.id.scroll_main_layout) as LinearLayout - if (id == R.id.action_add_button) { - createButton() - } - if (id == R.id.action_add_text) { - createEditView() - } - if (id == R.id.action_clear) { - mainScreen.removeAllViews() + val id = item.itemId + val mainScreen = findViewById(R.id.scroll_main_layout) + when (id) { + R.id.action_add_button -> createButton() + R.id.action_add_text -> createEditView() + R.id.action_clear -> mainScreen.removeAllViews() } return super.onOptionsItemSelected(item) } diff --git a/testapp/src/main/res/layout-land/button.xml b/testapp/src/main/res/layout-land/button.xml index d76158b..852e22a 100644 --- a/testapp/src/main/res/layout-land/button.xml +++ b/testapp/src/main/res/layout-land/button.xml @@ -1,10 +1,10 @@ \ No newline at end of file diff --git a/testapp/src/main/res/layout/activity_main.xml b/testapp/src/main/res/layout/activity_main.xml index 98a1cc3..6f0389c 100644 --- a/testapp/src/main/res/layout/activity_main.xml +++ b/testapp/src/main/res/layout/activity_main.xml @@ -1,9 +1,9 @@ + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="match_parent"> + android:layout_width="match_parent" + android:layout_height="wrap_content" /> diff --git a/testapp/src/main/res/layout/button.xml b/testapp/src/main/res/layout/button.xml index b8bcda7..7fd735b 100644 --- a/testapp/src/main/res/layout/button.xml +++ b/testapp/src/main/res/layout/button.xml @@ -1,10 +1,10 @@ \ No newline at end of file diff --git a/testapp/src/main/res/menu/menu_main.xml b/testapp/src/main/res/menu/menu_main.xml index d7ca599..a9a9db0 100644 --- a/testapp/src/main/res/menu/menu_main.xml +++ b/testapp/src/main/res/menu/menu_main.xml @@ -4,14 +4,14 @@ + android:title="@string/button_text" /> + android:title="@string/create_text" /> + android:title="@string/clear" /> \ No newline at end of file diff --git a/testapp/src/main/res/values-en/strings.xml b/testapp/src/main/res/values-en/strings.xml index d745644..5df86d7 100644 --- a/testapp/src/main/res/values-en/strings.xml +++ b/testapp/src/main/res/values-en/strings.xml @@ -2,6 +2,8 @@ testApp Create elements + Create text + Clear button created text created text diff --git a/testapp/src/main/res/values/strings.xml b/testapp/src/main/res/values/strings.xml index f9c9ce9..070ba0b 100644 --- a/testapp/src/main/res/values/strings.xml +++ b/testapp/src/main/res/values/strings.xml @@ -2,6 +2,8 @@ Тестовое приложение Создать кнопку + Создать поле + Очистить кнопка создана текстовое поле создано текст