Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
Next Next commit
add: Рабочая программа без смены стилей
Печатает вопросы, ответы
Рассчитывает результат
Отсылает по почте
Нет смены стилей
  • Loading branch information
aleh-god committed Jun 20, 2021
commit 548241cf0dafd8b446487c9a4dd14ebef5c2ae49
3 changes: 3 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,7 @@ dependencies {

implementation 'com.google.android.material:material:1.3.0'
implementation "androidx.viewpager2:viewpager2:1.0.0"

// val fragment_version = "1.3.4"
// implementation("androidx.fragment:fragment-ktx:$fragment_version")
}
1 change: 1 addition & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Quiz.First">
<activity android:name=".ResultActivity"></activity>
<activity
android:name=".MainActivity"
android:screenOrientation="portrait">
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/com/rsschool/quiz/ActionListener.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ interface ActionListener {
fun currentFragment(): Int
fun nextFragment()
fun backFragment()
fun runResultActivity()
fun runResultFragment()
fun addAnswer(numberQuest: Int, numberAnswer: Int)
}
8 changes: 5 additions & 3 deletions app/src/main/java/com/rsschool/quiz/BlankFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,9 @@ class BlankFragment : Fragment() {
//этот метод выполняется при смене страницы и в position передается номер страницы


// Если вы используете ViewBinding во фрагменте и держите ссылку на binding во фрагменте (а не только в методе onCreateView())
// return inflater.inflate(R.layout.fragment_blank, container, false)
_binding = FragmentQuizBinding.inflate(inflater, container, false)
return binding.root
// return inflater.inflate(R.layout.fragment_blank, container, false)
}

// В переопределенном методе onViewCreated получаем аргумент, находим текстовое поле и передаем туда значение аргумента для отображения.
Expand Down Expand Up @@ -77,7 +76,10 @@ class BlankFragment : Fragment() {
}

binding.nextButton.setOnClickListener {
if (tempInt > 4) listener?.runResultActivity()
if (tempInt > 4) {
listener?.runResultFragment()

}
else listener?.nextFragment()
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,33 +1,46 @@
package com.rsschool.quiz

class DaoArrayList {
// Этот класс реализует доступ к базе данных, в которой хранятся User и QuizObject объекты
class DataObjectAccess {

private val quizGames: List<QuizObject> = mutableListOf(
// Номер вопроса - Номер ответа
private val numAnswers: HashMap<Int, Int> = hashMapOf()

// hashMap позволяет нам удобно перезаписывать уже выбранные ответы
fun addAnswer(numberQuest: Int, numberAnswer: Int) {
numAnswers[numberQuest] = numberAnswer
}

fun getResultMessage(): User {
var result = 0
var history = "История вопросов и ответов.\n"

for (x in 0..4) {
var y = numAnswers[x+1]!!
if (quizGames[x].numberCorrectAnswer == numAnswers[x + 1]) ++result
history += "\nВопрос: ${quizGames[x].question}\nВаш ответ: ${quizGames[x].answers[y - 1]}\nПравильный ответ: ${quizGames[x].answers[quizGames[x].numberCorrectAnswer - 1]}"
}

return User("[email protected]", "Результат квиза: $result из 5.", history)
}

// Таблица БД
private val quizGames: List<QuizObject> = listOf(
QuizObject("Вы готовы, дети?", listOf("Да, капитан!", "Да!", "Нет.", "Нет, капитан", "буль-буль-буль"), 1, 1),
QuizObject("Ктоооооооо... Кто проживает на дне океана?", listOf("Рыбки", "Губка Боб Квадратные Штаны!", "Водолаз", "Никто не проживает", "Terror from the Deep"), 2,2),
QuizObject("Жёлтая губка, малыш без изъяна?", listOf("С изъяном", "Не малышь", "Губка Боб Квадратные Штаны!", "Синяя губка", "Жёлтая подводная лодка"), 3,3),
QuizObject("Кто побеждает всегда и везде?", listOf("Годзилла", "Рэмбо", "Капитан Америка", "Губка Боб Квадратные Штаны!", "Фиолетовый из Повер Рэнджерс"), 4,4),
QuizObject("Кто также ловок, как рыба в воде?", listOf("Другая рыба", "Аквамен", "Глубина", "Тазик залитый бетоном", "Губка Боб Квадратные Штаны!"), 5,5),
)

// Патерн Null-объект
private val nullQuizObject = QuizObject("nullQuizObject", listOf("nullQuizObject", "nullQuizObject", "nullQuizObject", "nullQuizObject", "nullQuizObject"), 1,1)


fun getQuizObject(num: Int) : QuizObject {
return if (num <= quizGames.lastIndex) quizGames[num] else nullQuizObject
}

fun getQuizQuestion(num: Int) : String {
return if (num <= quizGames.lastIndex) quizGames[num].question else nullQuizObject.question
}

fun getQuizCorrectAnswer(num: Int) : Int {
return if (num <= quizGames.lastIndex) quizGames[num].numberCorrectAnswer else nullQuizObject.numberCorrectAnswer
}

fun getQuizAnswers(num: Int) : List<String> {
return if (num <= quizGames.lastIndex) quizGames[num].answers else nullQuizObject.answers
}

fun getSize() : Int = quizGames.lastIndex + 1

}
28 changes: 12 additions & 16 deletions app/src/main/java/com/rsschool/quiz/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -1,23 +1,22 @@
package com.rsschool.quiz

import android.content.Intent
import android.os.Bundle
import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.widget.ViewPager2
import com.rsschool.quiz.databinding.ActivityMainBinding

const val EXTRA_MESSAGE = "com.rsschool.quiz.MESSAGE"

// MainActivity Унаследуем от FragmentActivity.
public class MainActivity : FragmentActivity(), ActionListener {
// Объявим переменные для адаптера и вьюпейджера.
private lateinit var adapter: NumberAdapter
private lateinit var viewPager: ViewPager2
// private lateinit var resultFragment: ResultFragment

// Ресурсы
private lateinit var binding: ActivityMainBinding
private val user: UserObject = UserObject( "Jesus", hashMapOf())
private val dataQuiz = DaoArrayList()
private var messageResult = "No result"
private val dataQuiz = DataObjectAccess()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Expand All @@ -29,7 +28,9 @@ public class MainActivity : FragmentActivity(), ActionListener {
// В методе onCreate инициализируем адаптер, передав ему текущее активити как владелец жизненного цикла
adapter = NumberAdapter(this)
// находим вьюпейджер по идентификатору и передаем ему адаптер.
viewPager = findViewById(R.id.pager)

viewPager = binding.pager
// viewPager = findViewById(R.id.pager)
viewPager.adapter = adapter
}

Expand All @@ -45,22 +46,17 @@ public class MainActivity : FragmentActivity(), ActionListener {
--viewPager.currentItem
}

override fun runResultActivity() {
override fun runResultFragment() {

var result = 0
for (x in 0..4) {
if (dataQuiz.getQuizCorrectAnswer(x) == user.numAnswers[x+1]) ++result
val intent = Intent(this, ResultActivity::class.java).apply {
putExtra(EXTRA_MESSAGE, dataQuiz.getResultMessage())
}
messageResult = "Результат квиза: $result из 5."

// resultFragment = ResultFragment.newInstance(messageResult, "test")
// val transaction = supportFragmentManager.beginTransaction()
// transaction.add(R.id.container, resultFragment)
// transaction.commit()
startActivity(intent)
finish()
}

override fun addAnswer(numberQuest: Int, numberAnswer: Int) {
user.numAnswers[numberQuest] = numberAnswer
dataQuiz.addAnswer(numberQuest, numberAnswer)
}

}
2 changes: 1 addition & 1 deletion app/src/main/java/com/rsschool/quiz/NumberAdapter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import androidx.viewpager2.adapter.FragmentStateAdapter
class NumberAdapter(fragment: FragmentActivity) : FragmentStateAdapter(fragment) {

// набор данных, которые свяжем со списком
private val dao = DaoArrayList()
private val dao = DataObjectAccess()

// Требуется переопределить метод getItemCount, возвращающий общее количество элементов списка.
override fun getItemCount(): Int = dao.getSize()
Expand Down
56 changes: 56 additions & 0 deletions app/src/main/java/com/rsschool/quiz/ResultActivity.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package com.rsschool.quiz

import android.content.Intent
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import com.rsschool.quiz.databinding.ActivityResultBinding

class ResultActivity : AppCompatActivity() {

private lateinit var binding: ActivityResultBinding
private lateinit var userObject: User

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_result)

// Чтобы создать объект класса ResultProfileBinding, надо вызвать статический метод inflate()
binding = ActivityResultBinding.inflate(layoutInflater)
setContentView(binding.root)

// Get the Intent that started this activity and extract the string
userObject = intent.getSerializableExtra(EXTRA_MESSAGE) as User

// Capture the layout's TextView and set the string as its text
binding.textResult.apply {
text = userObject.resultMessage
}
}

// android:onClick
fun sendEmail(view: View) {

val intent = Intent(Intent.ACTION_SENDTO).apply {
data = Uri.parse("mailto:" + userObject.email) // only email apps should handle this
putExtra(Intent.EXTRA_SUBJECT, userObject.resultMessage)
putExtra(Intent.EXTRA_TEXT, userObject.resultQuiz)
}
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
}
}

// android:onClick
fun restartQuiz(view: View) {
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
finish()
}

// android:onClick
fun exitApp(view: View) {
finish()
}
}
26 changes: 26 additions & 0 deletions app/src/main/java/com/rsschool/quiz/TestDAO.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.rsschool.quiz

fun main(args: Array<String>){
println("Hello Kotlin")
val dataQuiz = DataObjectAccess()
dataQuiz.addAnswer(1, 1)
dataQuiz.addAnswer(2, 2)
dataQuiz.addAnswer(3, 3)
dataQuiz.addAnswer(4, 2)
dataQuiz.addAnswer(5, 2)

val result = dataQuiz.getResultMessage()
println(result.email)
println(result.resultMessage)
println(result.resultQuiz)
}

/*
println("Вопрос: ${quizGames[x].question}")
println("numAnswers: ${numAnswers[x+1]}")
var y = numAnswers[x+1]!!
println("textAnswers: ${quizGames[x].answers[y - 1]}")
println("CorrectAnswers: ${quizGames[x].numberCorrectAnswer}")
println("textCorrecAnswers: ${quizGames[x].answers[quizGames[x].numberCorrectAnswer - 1]}")
println()
*/
8 changes: 8 additions & 0 deletions app/src/main/java/com/rsschool/quiz/User.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.rsschool.quiz

import java.io.Serializable

data class User(val email: String,
val resultMessage: String,
val resultQuiz: String
) : Serializable
6 changes: 0 additions & 6 deletions app/src/main/java/com/rsschool/quiz/UserObject.kt

This file was deleted.

53 changes: 53 additions & 0 deletions app/src/main/res/layout/activity_result.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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_height="match_parent"
tools:context=".ResultActivity">

<TextView
android:id="@+id/textResult"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:text="@string/ViewResult"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<Button
android:id="@+id/buttonShare"
android:onClick="sendEmail"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginTop="50dp"
android:text="@string/Share"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textResult" />

<Button
android:id="@+id/buttonRestart"
android:onClick="restartQuiz"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:text="@string/BackButtonText"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/buttonShare" />

<Button
android:id="@+id/buttonExit"
android:onClick="exitApp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:text="@string/Exit"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/buttonRestart" />

</androidx.constraintlayout.widget.ConstraintLayout>
2 changes: 1 addition & 1 deletion app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
<string name="BackButtonText">Back</string>
<string name="NextButtonText">Next</string>
<string name="Share">Share</string>
<string name="ViewResult">ViewResult</string>
<string name="ViewResult">Результат квиза: $result из 5.</string>
<string name="Exit">Exit</string>
</resources>
2 changes: 2 additions & 0 deletions app/src/main/res/values/style.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>