Skip to content

Commit 0b47cfa

Browse files
authored
Merge pull request #426 from lapism/dev
Dev
2 parents 6726f77 + ed2e262 commit 0b47cfa

13 files changed

Lines changed: 129 additions & 73 deletions

README.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
![API](https://img.shields.io/badge/API-26%2B-brightgreen.svg?style=flat)
2-
[![Kotlin Version](https://img.shields.io/badge/Kotlin-1.6.0-blue.svg)](https://kotlinlang.org)
2+
[![Kotlin Version](https://img.shields.io/badge/Kotlin-blue.svg)](https://kotlinlang.org)
33
[![Download](https://img.shields.io/maven-metadata/v?metadataUrl=https%3A%2F%2Frepo1.maven.org%2Fmaven2%2Fio%2Fgithub%2Flapism%2Fsearch%2Fmaven-metadata.xml) ](https://repo1.maven.org/maven2/io/github/lapism/search/)
44
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
55

@@ -29,7 +29,7 @@ Add the dependency to your gradle file:
2929
}
3030
3131
dependencies {
32-
implementation 'io.github.lapism:search:1.1.0'
32+
implementation 'io.github.lapism:search:1.2.0'
3333
}
3434
```
3535

@@ -154,9 +154,9 @@ You have to use app theme Theme.Material3.* or Theme.MaterialComponents.*.
154154
</attr>
155155
<attr name="search_navigationIcon" format="reference" />
156156
<attr name="search_navigationContentDescription" format="reference" />
157-
<attr name="search_backgroundColor" format="reference" />
158-
<attr name="search_radius" format="integer" />
159-
<attr name="android:elevation" />
157+
<attr name="search_navigationBackgroundColor" format="reference" />
158+
<attr name="search_navigationElevation" format="dimension" />
159+
<attr name="search_radius" format="dimension" />
160160
<attr name="android:hint" />
161161
<attr name="android:layout_marginStart" />
162162
<attr name="android:layout_marginEnd" />
@@ -168,7 +168,8 @@ You have to use app theme Theme.Material3.* or Theme.MaterialComponents.*.
168168
<attr name="search_navigationIconCompat" />
169169
<attr name="search_navigationIcon" />
170170
<attr name="search_navigationContentDescription" />
171-
<attr name="search_backgroundColor" />
171+
<attr name="search_navigationBackgroundColor" />
172+
<attr name="search_navigationElevation" />
172173
<attr name="search_clearIcon" format="reference" />
173174
<attr name="search_dividerColor" format="reference" />
174175
<attr name="search_scrimColor" format="reference" />

build.gradle

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,8 @@ android {
4343

4444
dependencies {
4545

46-
// Core
47-
implementation 'androidx.core:core-ktx:1.7.0'
4846
implementation 'androidx.appcompat:appcompat:1.4.0'
49-
implementation 'com.google.android.material:material:1.5.0-beta01'
47+
implementation 'com.google.android.material:material:1.6.0-alpha01'
5048
}
5149

5250
ext {

src/main/kotlin/com/lapism/search/widget/MaterialSearchBar.kt

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -55,18 +55,23 @@ class MaterialSearchBar @JvmOverloads constructor(
5555
setNavigationContentDescription(description)
5656
}
5757

58-
if (a?.hasValue(R.styleable.MaterialSearchBar_search_backgroundColor)!!) {
59-
val color = a?.getInt(R.styleable.MaterialSearchBar_search_backgroundColor, 0)
60-
setBackgroundColor(color!!)
58+
if (a?.hasValue(R.styleable.MaterialSearchBar_search_navigationBackgroundColor)!!) {
59+
val color = a?.getInt(R.styleable.MaterialSearchBar_search_navigationBackgroundColor, 0)
60+
setNavigationBackgroundColor(color!!)
6161
}
6262

63-
val defaultRadius = context.resources.getDimensionPixelSize(R.dimen.search_dp_24)
64-
val customRadius = a?.getInt(R.styleable.MaterialSearchBar_search_radius, defaultRadius)
65-
setRadius(customRadius?.toFloat()!!)
63+
if (a?.hasValue(R.styleable.MaterialSearchBar_search_navigationElevation)!!) {
64+
val navigationElevation =
65+
a?.getDimensionPixelSize(
66+
R.styleable.MaterialSearchBar_search_navigationElevation,
67+
0
68+
)
69+
setNavigationElevation(navigationElevation?.toFloat()!!)
70+
}
6671

67-
if (a?.hasValue(R.styleable.MaterialSearchBar_android_elevation)!!) {
68-
val customElevation = a?.getInt(R.styleable.MaterialSearchBar_android_elevation, 0)
69-
elevation = customElevation?.toFloat()!!
72+
if (a?.hasValue(R.styleable.MaterialSearchBar_search_radius)!!) {
73+
val customRadius = a?.getInt(R.styleable.MaterialSearchBar_search_radius, 0)
74+
setRadius(customRadius?.toFloat()!!)
7075
}
7176

7277
if (a?.hasValue(R.styleable.MaterialSearchBar_android_hint)!!) {
@@ -96,23 +101,19 @@ class MaterialSearchBar @JvmOverloads constructor(
96101
binding.searchBarToolbar.setNavigationOnClickListener(listener)
97102
}
98103

99-
// *********************************************************************************************
100-
override fun setBackgroundColor(@ColorInt color: Int) {
104+
override fun setNavigationElevation(elevation: Float) {
105+
binding.searchBarCard.cardElevation = elevation
106+
}
107+
108+
override fun setNavigationBackgroundColor(@ColorInt color: Int) {
101109
binding.searchBarCard.setCardBackgroundColor(color)
102110
}
103111

112+
// *********************************************************************************************
104113
override fun setOnClickListener(@Nullable l: OnClickListener?) {
105114
binding.searchBarToolbar.setOnClickListener(l)
106115
}
107116

108-
override fun setElevation(elevation: Float) {
109-
binding.searchBarCard.cardElevation = elevation
110-
}
111-
112-
override fun getElevation(): Float {
113-
return binding.searchBarCard.elevation
114-
}
115-
116117
override fun onAttachedToWindow() {
117118
super.onAttachedToWindow()
118119

@@ -173,7 +174,7 @@ class MaterialSearchBar @JvmOverloads constructor(
173174
}
174175

175176
// *********************************************************************************************
176-
// TODO PUBLIC ? and requestLayout()
177+
// TODO set public and requestLayout(), invalidate()
177178
private fun setMargins(left: Int, top: Int, right: Int, bottom: Int) {
178179
if (binding.searchBarCard.layoutParams is MarginLayoutParams) {
179180
val params = binding.searchBarCard.layoutParams as? MarginLayoutParams
@@ -195,13 +196,12 @@ class MaterialSearchBar @JvmOverloads constructor(
195196
child: View,
196197
dependency: View
197198
): Boolean {
198-
super.onDependentViewChanged(parent, child, dependency)
199199
if (dependency is AppBarLayout) {
200200
dependency.setBackgroundColor(Color.TRANSPARENT)
201201
dependency.stateListAnimator = null
202202
ViewCompat.setElevation(dependency, 0.0f)
203203
}
204-
return false
204+
return super.onDependentViewChanged(parent, child, dependency)
205205
}
206206

207207
}

src/main/kotlin/com/lapism/search/widget/MaterialSearchLayout.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.content.Context
44
import android.graphics.drawable.Drawable
55
import android.util.AttributeSet
66
import android.widget.FrameLayout
7+
import androidx.annotation.ColorInt
78
import androidx.annotation.DrawableRes
89
import androidx.annotation.Nullable
910
import androidx.annotation.StringRes
@@ -59,4 +60,8 @@ abstract class MaterialSearchLayout @JvmOverloads constructor(
5960

6061
abstract fun setNavigationOnClickListener(listener: OnClickListener)
6162

63+
abstract fun setNavigationElevation(elevation: Float)
64+
65+
abstract fun setNavigationBackgroundColor(@ColorInt color: Int)
66+
6267
}

src/main/kotlin/com/lapism/search/widget/MaterialSearchToolbar.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,10 @@ import android.view.LayoutInflater
88
import android.view.accessibility.AccessibilityNodeInfo
99
import android.widget.TextView
1010
import androidx.annotation.Nullable
11-
import com.google.android.material.appbar.MaterialToolbar
1211
import com.lapism.search.databinding.MaterialSearchToolbarBinding
1312

1413

15-
class MaterialSearchToolbar : MaterialToolbar {
14+
class MaterialSearchToolbar : MaterialTransparentToolbar {
1615

1716
// *********************************************************************************************
1817
private var binding: MaterialSearchToolbarBinding

src/main/kotlin/com/lapism/search/widget/MaterialSearchView.kt

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class MaterialSearchView @JvmOverloads constructor(
5555
})
5656
binding.searchViewEditText.setOnEditorActionListener { _, _, _ ->
5757
onSubmitQuery()
58-
return@setOnEditorActionListener true // same as ,,true" :)
58+
true
5959
}
6060
binding.searchViewEditText.setOnFocusChangeListener { _, hasFocus ->
6161
visibility = if (hasFocus) {
@@ -104,9 +104,18 @@ class MaterialSearchView @JvmOverloads constructor(
104104
setNavigationContentDescription(description)
105105
}
106106

107-
if (a.hasValue(R.styleable.MaterialSearchView_search_backgroundColor)) {
108-
val color = a.getInt(R.styleable.MaterialSearchView_search_backgroundColor, 0)
109-
setBackgroundColor(color)
107+
if (a.hasValue(R.styleable.MaterialSearchBar_search_navigationBackgroundColor)) {
108+
val color = a.getInt(R.styleable.MaterialSearchBar_search_navigationBackgroundColor, 0)
109+
setNavigationBackgroundColor(color)
110+
}
111+
112+
if (a.hasValue(R.styleable.MaterialSearchView_search_navigationElevation)) {
113+
val navigationElevation =
114+
a.getDimensionPixelSize(
115+
R.styleable.MaterialSearchView_search_navigationElevation,
116+
0
117+
)
118+
setNavigationElevation(navigationElevation.toFloat())
110119
}
111120

112121
if (a.hasValue(R.styleable.MaterialSearchView_search_clearIcon)) {
@@ -153,15 +162,6 @@ class MaterialSearchView @JvmOverloads constructor(
153162
visibility = View.GONE
154163
}
155164

156-
/* TODO styles + codes, ANIMATE binding.searchViewClip.path, SCALE, path
157-
private fun setTransition() {
158-
val mTransition = LayoutTransition()
159-
mTransition.enableTransitionType(LayoutTransition.CHANGING)
160-
mTransition.setDuration(3000L)
161-
162-
binding.searchViewBackground.layoutTransition = mTransition
163-
}*/
164-
165165
// *********************************************************************************************
166166
override fun setNavigationIcon(@DrawableRes resId: Int) {
167167
binding.searchViewToolbar.setNavigationIcon(resId)
@@ -183,9 +183,17 @@ class MaterialSearchView @JvmOverloads constructor(
183183
binding.searchViewToolbar.setNavigationOnClickListener(listener)
184184
}
185185

186+
override fun setNavigationElevation(elevation: Float) {
187+
binding.searchViewToolbar.elevation = elevation
188+
}
189+
190+
override fun setNavigationBackgroundColor(@ColorInt color: Int) {
191+
binding.searchViewToolbar.setBackgroundColor(color)
192+
}
193+
186194
// *********************************************************************************************
187195
override fun setBackgroundColor(@ColorInt color: Int) {
188-
binding.searchViewBackground.setBackgroundColor(color)
196+
binding.searchViewContentContainer.setBackgroundColor(color)
189197
}
190198

191199
override fun addView(child: View) {
@@ -261,9 +269,7 @@ class MaterialSearchView @JvmOverloads constructor(
261269
private fun onSubmitQuery() {
262270
val query = binding.searchViewEditText.text
263271
if (query != null && TextUtils.getTrimmedLength(query) > 0) {
264-
if (queryListener == null || !queryListener!!.onQueryTextSubmit(query.toString())) {
265-
hideKeyboard()
266-
}
272+
queryListener?.onQueryTextSubmit(query.toString())
267273
}
268274
}
269275

@@ -279,6 +285,10 @@ class MaterialSearchView @JvmOverloads constructor(
279285
binding.searchViewDivider.setBackgroundColor(color)
280286
}
281287

288+
fun setDividerResource(@DrawableRes resid: Int) {
289+
binding.searchViewDivider.setBackgroundResource(resid)
290+
}
291+
282292
fun setScrimColor(@ColorInt color: Int) {
283293
binding.searchViewScrim.setBackgroundColor(color)
284294
}
@@ -340,9 +350,9 @@ class MaterialSearchView @JvmOverloads constructor(
340350

341351
interface OnQueryTextListener {
342352

343-
fun onQueryTextChange(newText: CharSequence): Boolean
353+
fun onQueryTextChange(newText: CharSequence)
344354

345-
fun onQueryTextSubmit(query: CharSequence): Boolean
355+
fun onQueryTextSubmit(query: CharSequence)
346356
}
347357

348358
// *********************************************************************************************
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.lapism.search.widget
2+
3+
import android.content.Context
4+
import android.os.Build
5+
import android.util.AttributeSet
6+
import androidx.core.content.ContextCompat
7+
import com.google.android.material.appbar.MaterialToolbar
8+
9+
10+
open class MaterialTransparentToolbar : MaterialToolbar {
11+
12+
// *********************************************************************************************
13+
constructor(context: Context) : super(context)
14+
15+
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
16+
17+
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
18+
context,
19+
attrs,
20+
defStyleAttr
21+
)
22+
23+
// *********************************************************************************************
24+
init {
25+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
26+
outlineAmbientShadowColor = ContextCompat.getColor(context, android.R.color.transparent)
27+
outlineSpotShadowColor = ContextCompat.getColor(context, android.R.color.transparent)
28+
}
29+
}
30+
31+
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
33
android:id="@+id/search_toolbar_text_view"
4+
style="@style/MaterialSearchTextAppearance"
45
android:layout_width="wrap_content"
56
android:layout_height="wrap_content"
67
android:ellipsize="end"
78
android:importantForAccessibility="no"
8-
android:maxLines="1"
9-
android:textSize="@dimen/search_sp_16" />
9+
android:maxLines="1" />

src/main/res/layout/material_search_view.xml

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<merge xmlns:android="http://schemas.android.com/apk/res/android"
3-
xmlns:tools="http://schemas.android.com/tools">
2+
<merge xmlns:android="http://schemas.android.com/apk/res/android">
43

54
<View
65
android:id="@+id/search_view_scrim"
@@ -16,13 +15,13 @@
1615
android:focusable="true"
1716
android:focusableInTouchMode="true">
1817

19-
<LinearLayout
18+
<com.google.android.material.appbar.AppBarLayout
2019
android:id="@+id/search_view_background"
2120
android:layout_width="match_parent"
2221
android:layout_height="match_parent"
23-
android:orientation="vertical">
22+
android:background="?attr/colorSurface">
2423

25-
<com.google.android.material.appbar.MaterialToolbar
24+
<com.lapism.search.widget.MaterialTransparentToolbar
2625
android:id="@+id/search_view_toolbar"
2726
android:layout_width="match_parent"
2827
android:layout_height="wrap_content"
@@ -36,6 +35,7 @@
3635

3736
<com.lapism.search.internal.FocusEditText
3837
android:id="@+id/search_view_edit_text"
38+
style="@style/MaterialSearchTextAppearance"
3939
android:layout_width="0dp"
4040
android:layout_height="match_parent"
4141
android:layout_weight="1"
@@ -44,12 +44,9 @@
4444
android:imeOptions="actionSearch|flagNoExtractUi"
4545
android:importantForAutofill="no"
4646
android:inputType="textNoSuggestions"
47+
android:maxLines="1"
4748
android:privateImeOptions="nm"
48-
android:textColor="?android:attr/textColorPrimary"
49-
android:textColorHint="?android:attr/textColorSecondary"
50-
android:textDirection="firstStrong"
51-
android:textSize="@dimen/search_sp_16"
52-
tools:ignore="LabelFor" />
49+
android:textDirection="firstStrong" />
5350

5451
<ImageButton
5552
android:id="@+id/search_view_clear_button"
@@ -61,7 +58,7 @@
6158

6259
</LinearLayout>
6360

64-
</com.google.android.material.appbar.MaterialToolbar>
61+
</com.lapism.search.widget.MaterialTransparentToolbar>
6562

6663
<View
6764
android:id="@+id/search_view_divider"
@@ -72,9 +69,10 @@
7269
<FrameLayout
7370
android:id="@+id/search_view_content_container"
7471
android:layout_width="match_parent"
75-
android:layout_height="match_parent" />
72+
android:layout_height="match_parent"
73+
android:background="?attr/colorSurface" />
7674

77-
</LinearLayout>
75+
</com.google.android.material.appbar.AppBarLayout>
7876

7977
</com.lapism.search.internal.ClippableRoundedCornerLayout>
8078

0 commit comments

Comments
 (0)