-
Notifications
You must be signed in to change notification settings - Fork 4.7k
/
CustomSearchView.kt
73 lines (60 loc) · 2.57 KB
/
CustomSearchView.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package com.swmansion.rnscreens
import android.content.Context
import androidx.activity.OnBackPressedCallback
import androidx.appcompat.widget.SearchView
import androidx.fragment.app.Fragment
class CustomSearchView(context: Context, fragment: Fragment) : SearchView(context) {
/*
CustomSearchView uses some variables from SearchView. They are listed below with links to documentation
isIconified - https://developer.android.com/reference/android/widget/SearchView#setIconified(boolean)
maxWidth - https://developer.android.com/reference/android/widget/SearchView#setMaxWidth(int)
setOnSearchClickListener - https://developer.android.com/reference/android/widget/SearchView#setOnSearchClickListener(android.view.View.OnClickListener)
setOnCloseListener - https://developer.android.com/reference/android/widget/SearchView#setOnCloseListener(android.widget.SearchView.OnCloseListener)
*/
private var mCustomOnCloseListener: OnCloseListener? = null
private var mCustomOnSearchClickedListener: OnClickListener? = null
private var mOnBackPressedCallback: OnBackPressedCallback =
object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
isIconified = true
}
}
private val backPressOverrider = FragmentBackPressOverrider(fragment, mOnBackPressedCallback)
var overrideBackAction: Boolean
set(value) {
backPressOverrider.overrideBackAction = value
}
get() = backPressOverrider.overrideBackAction
fun focus() {
isIconified = false
requestFocusFromTouch()
}
override fun setOnCloseListener(listener: OnCloseListener?) {
mCustomOnCloseListener = listener
}
override fun setOnSearchClickListener(listener: OnClickListener?) {
mCustomOnSearchClickedListener = listener
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
if (!isIconified) {
backPressOverrider.maybeAddBackCallback()
}
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
backPressOverrider.removeBackCallbackIfAdded()
}
init {
super.setOnSearchClickListener { v ->
mCustomOnSearchClickedListener?.onClick(v)
backPressOverrider.maybeAddBackCallback()
}
super.setOnCloseListener {
val result = mCustomOnCloseListener?.onClose() ?: false
backPressOverrider.removeBackCallbackIfAdded()
result
}
maxWidth = Integer.MAX_VALUE
}
}