Skip to content

Commit 31c347e

Browse files
atm1504iamareebjamal
authored andcommitted
feat: Search skills in category fragments (#2215)
* Logic implemented * Search functionality fully implemented * UI Improved * Search icon issue solved * Circle ci fix
1 parent 5257970 commit 31c347e

File tree

2 files changed

+91
-0
lines changed

2 files changed

+91
-0
lines changed

app/src/main/java/org/fossasia/susi/ai/skills/groupwiseskills/GroupWiseSkillsFragment.kt

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,24 @@ import android.support.v4.app.Fragment
77
import android.support.v4.widget.SwipeRefreshLayout
88
import android.support.v7.widget.LinearLayoutManager
99
import android.support.v7.widget.SnapHelper
10+
import android.view.KeyEvent
1011
import android.view.LayoutInflater
1112
import android.view.View
1213
import android.view.ViewGroup
14+
import android.widget.Toast
1315
import kotlinx.android.synthetic.main.fragment_group_wise_skill_listing.*
1416
import org.fossasia.susi.ai.R
1517
import org.fossasia.susi.ai.dataclasses.GroupWiseSkills
1618
import org.fossasia.susi.ai.helper.SimpleDividerItemDecoration
1719
import org.fossasia.susi.ai.helper.StartSnapHelper
20+
import org.fossasia.susi.ai.rest.responses.susi.SkillData
1821
import org.fossasia.susi.ai.skills.SkillFragmentCallback
1922
import org.fossasia.susi.ai.skills.groupwiseskills.adapters.recycleradapters.SkillsListAdapter
2023
import org.fossasia.susi.ai.skills.groupwiseskills.contract.IGroupWiseSkillsPresenter
2124
import org.fossasia.susi.ai.skills.groupwiseskills.contract.IGroupWiseSkillsView
25+
import org.fossasia.susi.ai.skills.skillSearch.SearchSkillFragment
2226
import timber.log.Timber
27+
import kotlin.collections.ArrayList
2328

2429
/**
2530
*
@@ -31,6 +36,7 @@ class GroupWiseSkillsFragment : Fragment(), IGroupWiseSkillsView, SwipeRefreshLa
3136
private var skills = GroupWiseSkills("", ArrayList())
3237
private lateinit var skillsAdapter: SkillsListAdapter
3338
private lateinit var skillCallback: SkillFragmentCallback
39+
private var isSearching: Boolean = false
3440

3541
companion object {
3642
private const val SKILL_GROUP = "group"
@@ -59,6 +65,12 @@ class GroupWiseSkillsFragment : Fragment(), IGroupWiseSkillsView, SwipeRefreshLa
5965
swipeRefreshLayout.setOnRefreshListener(this)
6066
setUPAdapter()
6167
groupWiseSkillsPresenter.getSkills(swipeRefreshLayout.isRefreshing, skills.group)
68+
isSearching = true
69+
skillWiseSearchEdit.visibility = View.GONE
70+
searchSkillGroupWise.visibility = View.VISIBLE
71+
searchSkillGroupWise.setOnClickListener {
72+
handleSearchAction()
73+
}
6274
super.onViewCreated(view, savedInstanceState)
6375
}
6476

@@ -77,6 +89,60 @@ class GroupWiseSkillsFragment : Fragment(), IGroupWiseSkillsView, SwipeRefreshLa
7789
progressSkillWait.visibility = if (boolean) View.VISIBLE else View.GONE
7890
}
7991

92+
fun handleSearchAction() {
93+
if (isSearching == false || skillWiseSearchEdit.getVisibility() == View.VISIBLE) {
94+
skillWiseSearchEdit.setVisibility(View.GONE)
95+
} else {
96+
skillWiseSearchEdit.setVisibility(View.VISIBLE)
97+
handleSearch()
98+
}
99+
}
100+
101+
fun handleSearch() {
102+
skillWiseSearchEdit?.setOnKeyListener { v, keyCode, event ->
103+
if (keyCode == KeyEvent.KEYCODE_ENTER && event.action == KeyEvent.ACTION_UP && skillWiseSearchEdit?.text.toString().isNotEmpty()) {
104+
performSearch(skillWiseSearchEdit?.text.toString())
105+
}
106+
true
107+
}
108+
skillWiseSearchEdit?.requestFocus()
109+
isSearching = true
110+
}
111+
112+
fun performSearch(query: String): Boolean {
113+
114+
var searchedSkillsList: ArrayList<SkillData> = arrayListOf()
115+
116+
if (skills.skillsList.isEmpty()) {
117+
Toast.makeText(context, R.string.skill_empty, Toast.LENGTH_SHORT).show()
118+
return true
119+
}
120+
121+
for (skill in skills.skillsList) {
122+
if (skill.skillName != "" && skill.skillName != null) {
123+
if (skill.skillName.toLowerCase().contains(query.toLowerCase())) {
124+
searchedSkillsList.add(skill)
125+
}
126+
}
127+
}
128+
Timber.d(searchedSkillsList.toString())
129+
if (searchedSkillsList.isEmpty()) {
130+
Toast.makeText(context, R.string.skill_not_found, Toast.LENGTH_SHORT).show()
131+
return false
132+
}
133+
134+
loadSearchSkillsFragment(searchedSkillsList, query)
135+
return true
136+
}
137+
138+
private fun loadSearchSkillsFragment(searchedSkills: ArrayList<SkillData>, searchQuery: String) {
139+
val skillSearchFragment = SearchSkillFragment.newInstance(searchedSkills, searchQuery)
140+
fragmentManager?.beginTransaction()
141+
?.add(R.id.fragment_container, skillSearchFragment)
142+
?.addToBackStack(SearchSkillFragment().toString())
143+
?.commit()
144+
}
145+
80146
override fun showEmptySkillsListMessage() {
81147
if (activity != null) {
82148
swipeRefreshLayout.isRefreshing = false

app/src/main/res/layout/fragment_group_wise_skill_listing.xml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
33
xmlns:tools="http://schemas.android.com/tools"
4+
xmlns:app="http://schemas.android.com/apk/res-auto"
45
android:id="@+id/swipeRefreshLayout"
56
android:layout_width="match_parent"
67
android:layout_height="wrap_content"
@@ -17,6 +18,30 @@
1718
android:layout_height="match_parent"
1819
android:scrollbars="vertical" />
1920

21+
<android.support.design.widget.FloatingActionButton
22+
android:id="@+id/searchSkillGroupWise"
23+
android:layout_width="wrap_content"
24+
android:layout_height="wrap_content"
25+
android:background="@drawable/ic_open_search"
26+
android:layout_gravity="right"
27+
android:layout_margin="@dimen/margin_moderate"
28+
android:visibility="gone"
29+
app:backgroundTint="@color/md_white_1000"
30+
app:fabSize="mini"
31+
app:srcCompat="@drawable/ic_open_search" />
32+
33+
<EditText
34+
android:layout_width="match_parent"
35+
android:layout_height="wrap_content"
36+
android:layout_marginRight="@dimen/margin_extremely_large"
37+
android:layout_gravity="left"
38+
android:layout_marginTop="@dimen/margin_small"
39+
android:layout_marginLeft="@dimen/margin_small"
40+
android:padding="@dimen/padding_moderate"
41+
android:background="@color/browser_actions_bg_grey"
42+
android:visibility="gone"
43+
android:id="@+id/skillWiseSearchEdit" />
44+
2045
<ProgressBar
2146
android:id="@+id/progressSkillWait"
2247
android:layout_width="@dimen/progress_bar_size"

0 commit comments

Comments
 (0)