asfoury/projmag

View on GitHub
app/src/main/java/com/sdp13epfl2021/projmag/curriculumvitae/fragments/SkillsFragment.kt

Summary

Maintainability
C
1 day
Test Coverage
A
93%
package com.sdp13epfl2021.projmag.curriculumvitae.fragments

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.*
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.RecyclerView
import com.sdp13epfl2021.projmag.R
import com.sdp13epfl2021.projmag.curriculumvitae.CurriculumVitae.SkillDescription
import com.sdp13epfl2021.projmag.curriculumvitae.CurriculumVitae.SkillDescription.SkillLevel
import dagger.hilt.android.AndroidEntryPoint


/**
 * A Fragment, where the user should input various skills
 */
@AndroidEntryPoint
class SkillsFragment : Fragment() {

    private val skillList: MutableList<SkillDescription> = mutableListOf()

    private val skillListAdapter = CVListAdapter(skillList, ::removeFromSkillList)

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        val view = inflater.inflate(R.layout.fragment_cv_skills, container, false)
        val spinner = view?.findViewById<Spinner>(R.id.cv_skills_spinner)
        val values = SkillLevel.values()
        spinner?.adapter = activity?.let {
            ArrayAdapter(
                it.applicationContext,
                R.layout.spinner_layout_cv,
                values
            )
        }

        val recyclerView = view?.findViewById<RecyclerView>(R.id.cv_skills_recyclerview)
        recyclerView?.adapter = skillListAdapter

        val addButton = view?.findViewById<Button>(R.id.cv_skills_add)
        addButton?.setOnClickListener(::buttonIsClicked)

        return view
    }


    /**
     * Return the data given by the user
     *
     * @return the result of this fragment as a list of skills
     */
    fun get() = skillList


    private fun addToSkillList(skill: SkillDescription) {
        if (skill.isValid()) {
            skillList.addIfNotExisting(skill)
            skillList.sortBy { -(it.skillLevel.ordinal) }
            skillListAdapter.notifyDataSetChanged()
        } else {
            Toast.makeText(activity, "Invalid data", Toast.LENGTH_SHORT).show()
        }
    }


    private fun removeFromSkillList(skill: SkillDescription) {
        skillList.remove(skill)
        skillListAdapter.notifyDataSetChanged()
    }


    private fun buttonIsClicked(v: View) {
        val name = view?.findViewById<EditText>(R.id.cv_skills_name)?.text?.toString()
        val level = view?.findViewById<Spinner>(R.id.cv_skills_spinner)?.selectedItem as? SkillLevel

        if (name != null && level != null) {
            addToSkillList(SkillDescription(name, level))
        } else {
            Toast.makeText(activity, "Couldn't get data", Toast.LENGTH_SHORT).show()
        }
    }
}