Advertisement
gitman3

Android Hackerrank

Apr 19th, 2024
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.32 KB | None | 0 0
  1. /*
  2. ******** Guidelines ********
  3.  
  4. Click: Run > Build & Run
  5. Refer to README.md for additional information
  6. */
  7. package com.hackerrank.starter
  8.  
  9. import android.app.AlertDialog
  10. import android.content.Context
  11. import android.os.Bundle
  12. import android.view.View
  13. import android.view.inputmethod.InputMethodManager
  14. import android.widget.Toast
  15. import androidx.appcompat.app.AppCompatActivity
  16. import com.hackerrank.starter.adapter.EmployeeListAdapter
  17. import com.hackerrank.starter.databinding.ActivityMainBinding
  18. import com.hackerrank.starter.options.FilterAlertDialog
  19. import com.hackerrank.starter.options.FiltersEnum
  20. import com.hackerrank.starter.room.Employee
  21. import java.util.*
  22. import java.util.function.Predicate
  23. import kotlin.collections.ArrayList
  24.  
  25. /*
  26. ******** Guidelines ********
  27.  
  28. Click: Run > Build & Run
  29. Refer to README.md for additional information
  30. */
  31.  
  32. class MainActivity : AppCompatActivity(), EventListener {
  33. private var binding: ActivityMainBinding? = null
  34. lateinit var adapter: EmployeeListAdapter
  35. lateinit var filterAlertDialog: FilterAlertDialog
  36. lateinit var context: Context
  37. lateinit var eventListener: EventListener
  38. var fullEmployeeArrayList: MutableList<Employee> = mutableListOf()
  39. var filterEmployeeArrayList: MutableList<Employee> = mutableListOf()
  40. override fun onCreate(savedInstanceState: Bundle?) {
  41. super.onCreate(savedInstanceState)
  42. binding = ActivityMainBinding.inflate(layoutInflater)
  43. setContentView(binding!!.root)
  44. setSupportActionBar(binding!!.toolbar)
  45. Objects.requireNonNull(supportActionBar)?.setHomeAsUpIndicator(R.drawable.ic_logo)
  46. supportActionBar!!.setDisplayHomeAsUpEnabled(true)
  47. context = this
  48. eventListener = this
  49. adapter = EmployeeListAdapter(mutableListOf(), eventListener)
  50. binding?.employeeRv?.adapter = adapter
  51. binding?.addEmployeeBtn?.setOnClickListener(View.OnClickListener {
  52. checkExistEmployee(
  53. binding?.employeeNameEt?.text.toString(),
  54. binding?.employeeSalaryEt?.text.toString()
  55. )
  56. binding?.employeeNameEt?.setText("")
  57. binding?.employeeSalaryEt?.setText("")
  58. hideKeyboard()
  59. })
  60. binding?.clearData?.setOnClickListener(View.OnClickListener { deleteAll() })
  61. binding?.options?.setOnClickListener(View.OnClickListener {
  62. filterAlertDialog = FilterAlertDialog(context, eventListener)
  63. filterAlertDialog.show()
  64. })
  65. initData()
  66. }
  67.  
  68. fun deleteAll() {
  69. fullEmployeeArrayList.clear()
  70. filterEmployeeArrayList.clear()
  71. updateScreen(filterEmployeeArrayList)
  72. }
  73.  
  74. fun initData() {
  75. binding?.addEmployeeBtn?.isEnabled = false
  76. binding?.clearData?.isEnabled = false
  77. val newEmployeeOne: Employee = createNewEmployee("Jhon Loyd", 112.4f)
  78. insertEmployee(newEmployeeOne)
  79. val newEmployeeTwo: Employee = createNewEmployee("Bibi Bob", 8852.43f)
  80. insertEmployee(newEmployeeTwo)
  81. binding?.addEmployeeBtn?.isEnabled = true
  82. binding?.clearData?.isEnabled = true
  83. binding?.filterTv?.text = resources.getString(R.string.filter_all)
  84. }
  85.  
  86. fun insertEmployee(employee: Employee) {
  87. binding?.addEmployeeBtn?.isEnabled = false
  88. fullEmployeeArrayList.add(employee)
  89. filterEmployeeArrayList = fullEmployeeArrayList.toMutableList()
  90. updateScreen(filterEmployeeArrayList)
  91. }
  92.  
  93. private fun checkExistEmployee(name: String, salary: String) {
  94. val employeeName = getName(name)
  95. val employeeSalary = getSalary(salary)
  96. if (fullEmployeeArrayList.none { employee -> employee.name == employeeName && employee.salary == employeeSalary }) {
  97. addEmployee(name, salary)
  98. } else {
  99. createExistEmployeeDialog()
  100. }
  101. }
  102.  
  103. private fun addEmployee(name: String, salary: String) {
  104. val employeeName = getName(name)
  105. val employeeSalary = getSalary(salary)
  106. val newEmployee: Employee = createNewEmployee(employeeName, employeeSalary)
  107. insertEmployee(newEmployee)
  108. }
  109.  
  110. fun updateScreen(employeeList: List<Employee>) {
  111. adapter.updateEmployeeListItems(employeeList)
  112. adapter.notifyDataSetChanged()
  113. binding?.addEmployeeBtn?.isEnabled = true
  114. }
  115.  
  116. fun getAll() {
  117. filterEmployeeArrayList = fullEmployeeArrayList.toMutableList()
  118. updateScreen(filterEmployeeArrayList)
  119. }
  120.  
  121. fun getEmployeeEqualName(name: String) {
  122. filterEmployeeArrayList = fullEmployeeArrayList.filter { it.name == name }.toMutableList()
  123. updateScreen(filterEmployeeArrayList)
  124. }
  125.  
  126. fun getEmployeeContainsPartName(partName: String?) {
  127. filterEmployeeArrayList = fullEmployeeArrayList.filter { it.name.contains(partName ?: "") }.toMutableList()
  128. updateScreen(filterEmployeeArrayList)
  129. }
  130.  
  131. fun getEmployeeLessThan(maxSalary: Float) {
  132. filterEmployeeArrayList = fullEmployeeArrayList.filter { it.salary < maxSalary }.toMutableList()
  133. updateScreen(filterEmployeeArrayList)
  134. }
  135.  
  136. fun getEmployeeMoreThan(minSalary: Float) {
  137. filterEmployeeArrayList = fullEmployeeArrayList.filter { it.salary > minSalary }.toMutableList()
  138. updateScreen(filterEmployeeArrayList)
  139. }
  140.  
  141. fun deleteEmployeeById(id: Int) {
  142. if (id in 0 until fullEmployeeArrayList.size) {
  143. fullEmployeeArrayList.removeAt(id)
  144. filterEmployeeArrayList = fullEmployeeArrayList.toMutableList()
  145. updateScreen(filterEmployeeArrayList)
  146. } else {
  147. Toast.makeText(context, "Can't delete", Toast.LENGTH_SHORT).show()
  148. }
  149. }
  150.  
  151. private fun getSalary(salary: String): Float {
  152. return if (salary.isEmpty()) {
  153. 0f
  154. } else {
  155. salary.toFloat()
  156. }
  157. }
  158.  
  159. private fun getName(name: String): String {
  160. return if (name.isEmpty()) {
  161. "Unnamed Employee"
  162. } else {
  163. name
  164. }
  165. }
  166.  
  167. private fun createNewEmployee(name: String, salary: Float): Employee {
  168. return Employee(name, salary)
  169. }
  170.  
  171. override fun deleteEmployee(id: Int) {
  172. deleteEmployeeById(id)
  173. }
  174.  
  175. override fun chooseOption(filtersEnum: FiltersEnum?) {
  176. when (filtersEnum) {
  177. FiltersEnum.ALL -> {
  178. binding?.filterTv?.text = resources.getString(R.string.filter_all)
  179. getAll()
  180. }
  181. FiltersEnum.NAME -> {
  182. val name: String = filtersEnum.employeeName
  183. binding?.filterTv?.text = resources.getString(R.string.filter_name, name)
  184. getEmployeeEqualName(name)
  185. }
  186. FiltersEnum.PART_NAME -> {
  187. val partName: String = filtersEnum.employeeName
  188. binding?.filterTv?.text = resources.getString(R.string.filter_part_name, partName)
  189. getEmployeeContainsPartName(partName)
  190. }
  191. FiltersEnum.SALARY_LESS -> {
  192. val maxSalary: Float = filtersEnum.maxSalary
  193. binding?.filterTv?.text = resources.getString(R.string.filter_less_than, maxSalary)
  194. getEmployeeLessThan(maxSalary)
  195. }
  196. FiltersEnum.SALARY_MORE -> {
  197. val minSalary: Float = filtersEnum.minSalary
  198. binding?.filterTv?.text = resources.getString(R.string.filter_more_than, minSalary)
  199. getEmployeeMoreThan(minSalary)
  200. }
  201.  
  202. else -> {}
  203. }
  204. }
  205.  
  206. fun hideKeyboard() {
  207. val imm = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
  208. imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0)
  209. }
  210.  
  211. private fun createExistEmployeeDialog() {
  212. AlertDialog.Builder(this)
  213. .setTitle(resources.getString(R.string.exist_dialog_title))
  214. .setMessage(resources.getString(R.string.dialog_message))
  215. .setCancelable(false)
  216. .setPositiveButton(
  217. android.R.string.yes
  218. ) { dialog, which -> dialog.dismiss() }
  219. .setIcon(android.R.drawable.ic_dialog_alert)
  220. .show()
  221. }
  222.  
  223. companion object {
  224. private val TAG = MainActivity::class.java.simpleName
  225. }
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement