diff --git a/README.md b/README.md
index 6159f5e..cb63bfc 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,7 @@ Read how we did it [on our blog](https://yalantis.com/blog/develop-filter-animat
##Requirements
-- Android SDK 18+
+- Android SDK 19+
##Usage
@@ -42,17 +42,17 @@ Firstly you need to place `Filter` above your `RecyclerView` in the layout file
```xml
-
-
-
-
-
-
-
+
+
-
-
+
```
diff --git a/app/build.gradle b/app/build.gradle
index c212465..12518dd 100755
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,13 +1,12 @@
apply plugin: 'com.android.application'
android {
- compileSdkVersion 24
- buildToolsVersion "24.0.1"
+ compileSdkVersion 28
defaultConfig {
applicationId "com.yalantis.fitfilter"
- minSdkVersion 18
- targetSdkVersion 24
+ minSdkVersion 19
+ targetSdkVersion 28
versionCode 1
versionName "1.0"
}
@@ -20,9 +19,14 @@ android {
}
dependencies {
- compile fileTree(include: ['*.jar'], dir: 'libs')
- compile 'com.android.support:appcompat-v7:24.2.0'
- compile 'com.facebook.fresco:fresco:0.13.0'
- compile 'com.android.support:design:24.2.0'
- compile project(':filter')
+ implementation fileTree(include: ['*.jar'], dir: 'libs')
+ implementation 'androidx.appcompat:appcompat:1.0.2'
+ implementation ('com.facebook.fresco:fresco:1.13.0') {
+ exclude group: 'com.android.support', module: 'appcompat'
+ exclude group: 'com.android.support', module: 'support-v4'
+ exclude module: 'recyclerview-v7'
+ }
+ implementation 'com.google.android.material:material:1.0.0'
+ implementation "org.jetbrains:annotations:15.0"
+ implementation project(':filter')
}
diff --git a/app/src/main/java/com/yalantis/fitfilter/DividerItemDecoration.java b/app/src/main/java/com/yalantis/fitfilter/DividerItemDecoration.java
index ac9b0b6..5fd0698 100755
--- a/app/src/main/java/com/yalantis/fitfilter/DividerItemDecoration.java
+++ b/app/src/main/java/com/yalantis/fitfilter/DividerItemDecoration.java
@@ -3,8 +3,10 @@
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
-import android.support.v4.content.ContextCompat;
-import android.support.v7.widget.RecyclerView;
+
+import androidx.core.content.ContextCompat;
+import androidx.recyclerview.widget.RecyclerView;
+
import android.view.View;
/**
diff --git a/app/src/main/java/com/yalantis/fitfilter/ExampleActivity.java b/app/src/main/java/com/yalantis/fitfilter/ExampleActivity.java
index 9d87f51..6692979 100755
--- a/app/src/main/java/com/yalantis/fitfilter/ExampleActivity.java
+++ b/app/src/main/java/com/yalantis/fitfilter/ExampleActivity.java
@@ -1,12 +1,12 @@
package com.yalantis.fitfilter;
-import android.graphics.Color;
import android.os.Bundle;
-import android.support.v4.content.ContextCompat;
-import android.support.v7.app.AppCompatActivity;
-import android.support.v7.util.DiffUtil;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
+
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.content.ContextCompat;
+import androidx.recyclerview.widget.DiffUtil;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.imagepipeline.core.ImagePipelineConfig;
@@ -55,7 +55,7 @@ protected void onCreate(Bundle savedInstanceState) {
mRecyclerView = (RecyclerView) findViewById(R.id.list);
- mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
+ mRecyclerView.setLayoutManager(new LinearLayoutManager(this, RecyclerView.VERTICAL, false));
mRecyclerView.setAdapter(mAdapter = new QuestionsAdapter(this, mAllQuestions = getQuestions()));
mRecyclerView.setItemAnimator(new FiltersListItemAnimator());
}
diff --git a/app/src/main/java/com/yalantis/fitfilter/QuestionsAdapter.java b/app/src/main/java/com/yalantis/fitfilter/QuestionsAdapter.java
index 0f842c9..84ef1f0 100755
--- a/app/src/main/java/com/yalantis/fitfilter/QuestionsAdapter.java
+++ b/app/src/main/java/com/yalantis/fitfilter/QuestionsAdapter.java
@@ -2,8 +2,11 @@
import android.content.Context;
import android.graphics.drawable.GradientDrawable;
-import android.support.v4.content.ContextCompat;
-import android.support.v7.widget.RecyclerView;
+
+import androidx.core.content.ContextCompat;
+import androidx.recyclerview.widget.RecyclerView;
+
+
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
diff --git a/app/src/main/java/com/yalantis/fitfilter/Tag.java b/app/src/main/java/com/yalantis/fitfilter/Tag.java
index a23e746..260591e 100755
--- a/app/src/main/java/com/yalantis/fitfilter/Tag.java
+++ b/app/src/main/java/com/yalantis/fitfilter/Tag.java
@@ -1,6 +1,7 @@
package com.yalantis.fitfilter;
-import android.support.annotation.NonNull;
+
+import androidx.annotation.NonNull;
import com.yalantis.filter.model.FilterModel;
diff --git a/app/src/main/res/layout/activity_example.xml b/app/src/main/res/layout/activity_example.xml
index f43fdd7..e7c9077 100755
--- a/app/src/main/res/layout/activity_example.xml
+++ b/app/src/main/res/layout/activity_example.xml
@@ -1,15 +1,15 @@
-
-
-
-
-
-
-
+
+
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_list.xml b/app/src/main/res/layout/item_list.xml
index f7e0548..b2f3efd 100755
--- a/app/src/main/res/layout/item_list.xml
+++ b/app/src/main/res/layout/item_list.xml
@@ -83,7 +83,7 @@
android:layout_marginRight="16dp"
android:background="#ebebeb" />
-
-
- ()
@@ -52,10 +49,10 @@ class FiltersListItemAnimator : SimpleItemAnimator() {
override fun runPendingAnimations() {
- val removalsPending = !mPendingRemovals.isEmpty()
- val movesPending = !mPendingMoves.isEmpty()
- val changesPending = !mPendingChanges.isEmpty()
- val additionsPending = !mPendingAdditions.isEmpty()
+ val removalsPending = mPendingRemovals.isNotEmpty()
+ val movesPending = mPendingMoves.isNotEmpty()
+ val changesPending = mPendingChanges.isNotEmpty()
+ val additionsPending = mPendingAdditions.isNotEmpty()
if (!removalsPending && !movesPending && !additionsPending && !changesPending) {
// nothing to animate
return
@@ -81,7 +78,7 @@ class FiltersListItemAnimator : SimpleItemAnimator() {
}
if (removalsPending) {
val view = moves[0].holder.itemView
- ViewCompat.postOnAnimationDelayed(view, mover, getRemoveDuration())
+ ViewCompat.postOnAnimationDelayed(view, mover, removeDuration)
} else {
mover.run()
}
@@ -101,7 +98,7 @@ class FiltersListItemAnimator : SimpleItemAnimator() {
}
if (removalsPending) {
val holder = changes[0].oldHolder
- ViewCompat.postOnAnimationDelayed(holder!!.itemView, changer, getRemoveDuration())
+ ViewCompat.postOnAnimationDelayed(holder!!.itemView, changer, removeDuration)
} else {
changer.run()
}
@@ -163,7 +160,7 @@ class FiltersListItemAnimator : SimpleItemAnimator() {
override fun animateAdd(holder: RecyclerView.ViewHolder): Boolean {
resetAnimation(holder)
- ViewCompat.setAlpha(holder.itemView, 0f)
+ holder.itemView.alpha = 0f
mPendingAdditions.add(holder)
return true
}
@@ -189,13 +186,14 @@ class FiltersListItemAnimator : SimpleItemAnimator() {
}.start()
}
+ @Suppress("NAME_SHADOWING")
override fun animateMove(holder: RecyclerView.ViewHolder, fromX: Int, fromY: Int,
toX: Int, toY: Int): Boolean {
var fromX = fromX
var fromY = fromY
val view = holder.itemView
- fromX += ViewCompat.getTranslationX(holder.itemView).toInt()
- fromY += ViewCompat.getTranslationY(holder.itemView).toInt()
+ fromX += holder.itemView.translationX.toInt()
+ fromY += holder.itemView.translationY.toInt()
resetAnimation(holder)
val deltaX = toX - fromX
val deltaY = toY - fromY
@@ -204,10 +202,10 @@ class FiltersListItemAnimator : SimpleItemAnimator() {
return false
}
if (deltaX != 0) {
- ViewCompat.setTranslationX(view, (-deltaX).toFloat())
+ view.translationY = (-deltaX).toFloat()
}
if (deltaY != 0) {
- ViewCompat.setTranslationY(view, (-deltaY).toFloat())
+ view.translationY = (-deltaY).toFloat()
}
mPendingMoves += MoveInfo(holder, fromX, fromY, toX, toY)
return true
@@ -249,22 +247,22 @@ class FiltersListItemAnimator : SimpleItemAnimator() {
// run a move animation to handle position changes.
return animateMove(oldHolder, fromX, fromY, toX, toY)
}
- val prevTranslationX = ViewCompat.getTranslationX(oldHolder.itemView)
- val prevTranslationY = ViewCompat.getTranslationY(oldHolder.itemView)
- val prevAlpha = ViewCompat.getAlpha(oldHolder.itemView)
+ val prevTranslationX = oldHolder.itemView.translationX
+ val prevTranslationY = oldHolder.itemView.translationY
+ val prevAlpha = oldHolder.itemView.alpha
resetAnimation(oldHolder)
val deltaX = (toX.toFloat() - fromX.toFloat() - prevTranslationX).toInt()
val deltaY = (toY.toFloat() - fromY.toFloat() - prevTranslationY).toInt()
// recover prev translation state after ending animation
- ViewCompat.setTranslationX(oldHolder.itemView, prevTranslationX)
- ViewCompat.setTranslationY(oldHolder.itemView, prevTranslationY)
- ViewCompat.setAlpha(oldHolder.itemView, prevAlpha)
+ oldHolder.itemView.translationX = prevTranslationX
+ oldHolder.itemView.translationY = prevTranslationY
+ oldHolder.itemView.alpha = prevAlpha
if (newHolder != null) {
// carry over translation values
resetAnimation(newHolder)
- ViewCompat.setTranslationX(newHolder.itemView, (-deltaX).toFloat())
- ViewCompat.setTranslationY(newHolder.itemView, (-deltaY).toFloat())
- ViewCompat.setAlpha(newHolder.itemView, 0f)
+ newHolder.itemView.translationX = (-deltaX).toFloat()
+ newHolder.itemView.translationY = (-deltaY).toFloat()
+ newHolder.itemView.alpha = 0f
}
mPendingChanges += ChangeInfo(oldHolder, newHolder, fromX, fromY, toX, toY)
return true
@@ -356,9 +354,9 @@ class FiltersListItemAnimator : SimpleItemAnimator() {
} else {
return false
}
- ViewCompat.setAlpha(item.itemView, 1f)
- ViewCompat.setTranslationX(item.itemView, 0f)
- ViewCompat.setTranslationY(item.itemView, 0f)
+ item.itemView.alpha = 1f
+ item.itemView.translationX = 0f
+ item.itemView.translationY = 0f
dispatchChangeFinished(item, oldItem)
return true
}
@@ -371,19 +369,19 @@ class FiltersListItemAnimator : SimpleItemAnimator() {
for (i in mPendingMoves.indices.reversed()) {
val moveInfo = mPendingMoves[i]
if (moveInfo.holder === item) {
- ViewCompat.setTranslationY(view, 0f)
- ViewCompat.setTranslationX(view, 0f)
+ view.translationY = 0f
+ view.translationX = 0f
dispatchMoveFinished(item)
mPendingMoves.removeAt(i)
}
}
endChangeAnimation(mPendingChanges, item)
if (mPendingRemovals.remove(item)) {
- ViewCompat.setAlpha(view, 1f)
+ view.alpha = 1f
dispatchRemoveFinished(item)
}
if (mPendingAdditions.remove(item)) {
- ViewCompat.setAlpha(view, 1f)
+ view.alpha = 1f
dispatchAddFinished(item)
}
@@ -399,8 +397,8 @@ class FiltersListItemAnimator : SimpleItemAnimator() {
for (j in moves.indices.reversed()) {
val moveInfo = moves[j]
if (moveInfo.holder === item) {
- ViewCompat.setTranslationY(view, 0f)
- ViewCompat.setTranslationX(view, 0f)
+ view.translationY = 0f
+ view.translationX = 0f
dispatchMoveFinished(item)
moves.removeAt(j)
if (moves.isEmpty()) {
@@ -413,7 +411,7 @@ class FiltersListItemAnimator : SimpleItemAnimator() {
for (i in mAdditionsList.indices.reversed()) {
val additions = mAdditionsList[i]
if (additions.remove(item)) {
- ViewCompat.setAlpha(view, 1f)
+ view.alpha = 1f
dispatchAddFinished(item)
if (additions.isEmpty()) {
mAdditionsList.removeAt(i)
@@ -424,7 +422,8 @@ class FiltersListItemAnimator : SimpleItemAnimator() {
}
private fun resetAnimation(holder: RecyclerView.ViewHolder) {
- AnimatorCompatHelper.clearInterpolator(holder.itemView)
+ val defaultInterpolator = ValueAnimator().interpolator
+ holder.itemView.animate().interpolator = defaultInterpolator
endAnimation(holder)
}
@@ -445,8 +444,8 @@ class FiltersListItemAnimator : SimpleItemAnimator() {
for (i in count - 1 downTo 0) {
val item = mPendingMoves[i]
val view = item.holder.itemView
- ViewCompat.setTranslationY(view, 0f)
- ViewCompat.setTranslationX(view, 0f)
+ view.translationY = 0f
+ view.translationX = 0f
dispatchMoveFinished(item.holder)
mPendingMoves.removeAt(i)
}
@@ -460,7 +459,7 @@ class FiltersListItemAnimator : SimpleItemAnimator() {
for (i in count - 1 downTo 0) {
val item = mPendingAdditions[i]
val view = item.itemView
- ViewCompat.setAlpha(view, 1f)
+ view.alpha = 1f
dispatchAddFinished(item)
mPendingAdditions.removeAt(i)
}
@@ -481,8 +480,8 @@ class FiltersListItemAnimator : SimpleItemAnimator() {
val moveInfo = moves[j]
val item = moveInfo.holder
val view = item.itemView
- ViewCompat.setTranslationY(view, 0f)
- ViewCompat.setTranslationX(view, 0f)
+ view.translationY = 0f
+ view.translationX = 0f
dispatchMoveFinished(moveInfo.holder)
moves.removeAt(j)
if (moves.isEmpty()) {
@@ -497,7 +496,7 @@ class FiltersListItemAnimator : SimpleItemAnimator() {
for (j in count - 1 downTo 0) {
val item = additions[j]
val view = item.itemView
- ViewCompat.setAlpha(view, 1f)
+ view.alpha = 1f
dispatchAddFinished(item)
additions.removeAt(j)
if (additions.isEmpty()) {
@@ -553,14 +552,4 @@ class FiltersListItemAnimator : SimpleItemAnimator() {
return !payloads.isEmpty() || super.canReuseUpdatedViewHolder(viewHolder, payloads)
}
- private open class VpaListenerAdapter : ViewPropertyAnimatorListener {
- override fun onAnimationStart(view: View) {
- }
-
- override fun onAnimationEnd(view: View) {
- }
-
- override fun onAnimationCancel(view: View) {
- }
- }
}
\ No newline at end of file
diff --git a/filter/src/main/java/com/yalantis/filter/widget/CollapseView.kt b/filter/src/main/java/com/yalantis/filter/widget/CollapseView.kt
index 113f899..acfa3cd 100755
--- a/filter/src/main/java/com/yalantis/filter/widget/CollapseView.kt
+++ b/filter/src/main/java/com/yalantis/filter/widget/CollapseView.kt
@@ -13,9 +13,9 @@ import kotlinx.android.synthetic.main.view_collapse.view.*
*/
class CollapseView : FrameLayout {
- constructor(context: Context?) : this(context, null)
- constructor(context: Context?, attrs: AttributeSet?) : this(context, attrs, 0)
- constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
+ constructor(context: Context) : this(context, null)
+ constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
+ constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
LayoutInflater.from(context).inflate(R.layout.view_collapse, this, true)
}
@@ -27,7 +27,7 @@ class CollapseView : FrameLayout {
buttonOk.visibility = if (hasText) View.VISIBLE else GONE
}
- internal fun rotateArrow(rotation: Float): Unit {
+ internal fun rotateArrow(rotation: Float) {
imageArrow.rotation = rotation
}
diff --git a/filter/src/main/java/com/yalantis/filter/widget/CollapsedFilterContainer.kt b/filter/src/main/java/com/yalantis/filter/widget/CollapsedFilterContainer.kt
index 3461f9f..861d1a8 100755
--- a/filter/src/main/java/com/yalantis/filter/widget/CollapsedFilterContainer.kt
+++ b/filter/src/main/java/com/yalantis/filter/widget/CollapsedFilterContainer.kt
@@ -1,5 +1,6 @@
package com.yalantis.filter.widget
+import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Color
import android.util.AttributeSet
@@ -39,6 +40,7 @@ class CollapsedFilterContainer : RelativeLayout {
return isEmpty || !containsEvent
}
+ @SuppressLint("ClickableViewAccessibility")
override fun onTouchEvent(event: MotionEvent): Boolean {
when (event.action) {
MotionEvent.ACTION_DOWN -> {
diff --git a/filter/src/main/java/com/yalantis/filter/widget/CollapsedFilterView.kt b/filter/src/main/java/com/yalantis/filter/widget/CollapsedFilterView.kt
index 1029004..6e1b45b 100755
--- a/filter/src/main/java/com/yalantis/filter/widget/CollapsedFilterView.kt
+++ b/filter/src/main/java/com/yalantis/filter/widget/CollapsedFilterView.kt
@@ -1,6 +1,7 @@
package com.yalantis.filter.widget
import android.animation.ValueAnimator
+import android.annotation.SuppressLint
import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
@@ -27,7 +28,7 @@ class CollapsedFilterView : ViewGroup {
constructor(context: Context, attrs: AttributeSet?, defStyleRes: Int) : super(context, attrs, defStyleRes)
override fun onLayout(p0: Boolean, p1: Int, p2: Int, p3: Int, p4: Int) {
- for (i in 0..childCount - 1) {
+ for (i in 0 until childCount) {
val child: FilterItem = getChildAt(i) as FilterItem
child.layout(0, 0, child.collapsedSize / 2 + child.measuredWidth / 2 + 1, child.measuredHeight)
}
@@ -58,7 +59,7 @@ class CollapsedFilterView : ViewGroup {
ValueAnimator.ofFloat(0f, Constant.ANIMATION_DURATION / 2.toFloat()).setDuration(Constant.ANIMATION_DURATION / 2).apply {
addUpdateListener {
val ratio = it.animatedValue as Float / (Constant.ANIMATION_DURATION / 2)
- for (i in index + 1..childCount - 1) {
+ for (i in index + 1 until childCount) {
val item = getChildAt(i) as FilterItem
if (ratio == 0f) {
@@ -80,6 +81,7 @@ class CollapsedFilterView : ViewGroup {
override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean = childCount > 0
+ @SuppressLint("ClickableViewAccessibility")
override fun onTouchEvent(event: MotionEvent): Boolean {
when (event.action) {
MotionEvent.ACTION_DOWN -> {
@@ -107,7 +109,7 @@ class CollapsedFilterView : ViewGroup {
private fun findViewByCoord(x: Float): FilterItem? {
- for (i in 0..childCount - 1) {
+ for (i in 0 until childCount) {
val item: FilterItem = getChildAt(i) as FilterItem
if (containsCoord(item, x)) {
diff --git a/filter/src/main/java/com/yalantis/filter/widget/ExpandedFilterView.kt b/filter/src/main/java/com/yalantis/filter/widget/ExpandedFilterView.kt
index 8572cf1..c3c0bfa 100755
--- a/filter/src/main/java/com/yalantis/filter/widget/ExpandedFilterView.kt
+++ b/filter/src/main/java/com/yalantis/filter/widget/ExpandedFilterView.kt
@@ -1,5 +1,6 @@
package com.yalantis.filter.widget
+import android.annotation.SuppressLint
import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
@@ -31,8 +32,8 @@ class ExpandedFilterView : ViewGroup {
constructor(context: Context, attrs: AttributeSet?, defStyleRes: Int) : super(context, attrs, defStyleRes)
override fun onLayout(p0: Boolean, p1: Int, p2: Int, p3: Int, p4: Int) {
- if (!filters.isEmpty()) {
- for (i in 0..childCount - 1) {
+ if (filters.isNotEmpty()) {
+ for (i in 0 until childCount) {
val child: View = getChildAt(i)
val coord: Coord? = filters[child]
@@ -57,27 +58,29 @@ class ExpandedFilterView : ViewGroup {
var height: Int = mPrevHeight
if (filters.isEmpty()) {
- for (i in 0..childCount - 1) {
+ for (i in 0 until childCount) {
val child: FilterItem = getChildAt(i) as FilterItem
child.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)
- if (mPrevItem == null) {
- mPrevX = margin
- mPrevY = margin
- height = child.measuredHeight + margin
- } else if (canPlaceOnTheSameLine(child)) {
- mPrevX = mPrevX!! + mPrevItem!!.measuredWidth + margin / 2
- } else {
- mPrevX = margin
- mPrevY = mPrevY!! + mPrevItem!!.measuredHeight + margin / 2
- height += child.measuredHeight + margin / 2
+ when {
+ mPrevItem == null -> {
+ mPrevX = margin
+ mPrevY = margin
+ height = child.measuredHeight + margin
+ }
+ canPlaceOnTheSameLine(child) -> mPrevX = mPrevX!! + mPrevItem!!.measuredWidth + margin / 2
+ else -> {
+ mPrevX = margin
+ mPrevY = mPrevY!! + mPrevItem!!.measuredHeight + margin / 2
+ height += child.measuredHeight + margin / 2
+ }
}
mPrevItem = child
if (filters.size < childCount) {
- filters.put(child, Coord(mPrevX!!, mPrevY!!))
+ filters[child] = Coord(mPrevX!!, mPrevY!!)
}
}
height = if (height > 0) height + margin else 0
@@ -92,6 +95,7 @@ class ExpandedFilterView : ViewGroup {
calculateSize(heightMeasureSpec, calculateDesiredHeight()))
}
+ @SuppressLint("ClickableViewAccessibility")
override fun onTouchEvent(event: MotionEvent): Boolean {
when (event.action) {
MotionEvent.ACTION_DOWN -> {
diff --git a/filter/src/main/java/com/yalantis/filter/widget/Filter.kt b/filter/src/main/java/com/yalantis/filter/widget/Filter.kt
index 852c0ad..74b9c53 100755
--- a/filter/src/main/java/com/yalantis/filter/widget/Filter.kt
+++ b/filter/src/main/java/com/yalantis/filter/widget/Filter.kt
@@ -2,6 +2,7 @@ package com.yalantis.filter.widget
import android.animation.ValueAnimator
import android.content.Context
+import android.graphics.Color
import android.os.Bundle
import android.os.Parcelable
import android.util.AttributeSet
@@ -18,11 +19,7 @@ import com.yalantis.filter.model.Coord
import com.yalantis.filter.model.FilterModel
import kotlinx.android.synthetic.main.collapsed_container.view.*
import kotlinx.android.synthetic.main.filter.view.*
-import java.io.Serializable
import java.util.*
-import android.content.res.TypedArray
-import android.graphics.Color
-import android.support.annotation.ColorInt
/**
@@ -36,29 +33,7 @@ class Filter : FrameLayout, FilterItemListener, CollapseListene
var noSelectedItemText: String = ""
set(value) {
collapsedText.text = value
- }
- var textToReplaceArrow: String = ""
- set(value) {
- collapseView.setText(value)
- }
-
- var replaceArrowByText: Boolean = false
- set(value) {
- collapseView.setHasText(value)
- }
-
- var collapsedBackground: Int = Color.WHITE
- set(value) {
- field = value
- collapsedContainer.containerBackground = value
- collapsedContainer.invalidate()
- }
-
- var expandedBackground: Int = Color.WHITE
- set(value) {
field = value
- expandedFilter.setBackgroundColor(value)
- expandedFilter.invalidate()
}
private var mIsBusy = false
@@ -281,7 +256,7 @@ class Filter : FrameLayout, FilterItemListener, CollapseListene
if (mItems.contains(item)) {
mSelectedItems.add(filter)
}
- mSelectedFilters.put(item, Coord(item.x.toInt(), item.y.toInt()))
+ mSelectedFilters[item] = Coord(item.x.toInt(), item.y.toInt())
listener?.onFilterSelected(filter)
}
@@ -299,7 +274,7 @@ class Filter : FrameLayout, FilterItemListener, CollapseListene
if (coord != null && collapsedFilter.removeItem(item)) {
mSelectedFilters.remove(item)
mSelectedItems.remove(mItems[item])
- mRemovedFilters.put(item, coord)
+ mRemovedFilters[item] = coord
postDelayed({
remove(item)
@@ -349,15 +324,12 @@ class Filter : FrameLayout, FilterItemListener, CollapseListene
putBoolean(STATE_COLLAPSED, isCollapsed!!)
val selected = mSelectedItems
val removed = mRemovedItems
- if (selected is Serializable) {
- putSerializable(STATE_SELECTED, selected)
- }
- if (removed is Serializable) {
- putSerializable(STATE_REMOVED, removed)
- }
+ putSerializable(STATE_SELECTED, selected)
+ putSerializable(STATE_REMOVED, removed)
}
}
+ @Suppress("UNCHECKED_CAST")
override fun onRestoreInstanceState(state: Parcelable?) {
if (state is Bundle) {
super.onRestoreInstanceState(state.getParcelable(STATE_SUPER))
diff --git a/filter/src/main/java/com/yalantis/filter/widget/FilterItem.kt b/filter/src/main/java/com/yalantis/filter/widget/FilterItem.kt
index 03881e6..049b6e7 100755
--- a/filter/src/main/java/com/yalantis/filter/widget/FilterItem.kt
+++ b/filter/src/main/java/com/yalantis/filter/widget/FilterItem.kt
@@ -2,20 +2,19 @@ package com.yalantis.filter.widget
import android.content.Context
import android.content.res.ColorStateList
-import android.graphics.Canvas
-import android.graphics.Typeface
+import android.graphics.Color
import android.graphics.drawable.GradientDrawable
-import android.support.annotation.ColorInt
-import android.support.annotation.ColorRes
-import android.support.annotation.DrawableRes
-import android.support.v4.content.ContextCompat
-import android.support.v4.content.res.ResourcesCompat
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
+import androidx.annotation.ColorInt
+import androidx.annotation.ColorRes
+import androidx.annotation.DrawableRes
+import androidx.core.content.ContextCompat
+import androidx.core.view.ViewCompat
import com.yalantis.filter.R
import com.yalantis.filter.listener.FilterItemListener
import kotlinx.android.synthetic.main.item_filter.view.*
@@ -30,17 +29,15 @@ class FilterItem : FrameLayout, Serializable {
var isIncreased: Boolean = false
var startX: Float = 0f
var startY: Float = 0f
- @ColorInt var cancelIconTint: Int = android.R.color.white
- @DrawableRes var cancelIcon: Int = R.drawable.ic_cancel
+ @ColorInt
+ var cancelIconTint: Int = Color.WHITE
+ @DrawableRes
+ var cancelIcon: Int = R.drawable.ic_cancel
@ColorInt var color: Int? = null
@ColorInt var checkedColor: Int? = null
@ColorInt var strokeColor: Int? = null
@ColorInt var checkedTextColor: Int? = null
@ColorInt var textColor: Int? = null
- var typeface: Typeface? = null
- set(value) {
- textView.typeface = value
- }
var text: String
get() = textView.text.toString()
set(value) {
@@ -48,10 +45,10 @@ class FilterItem : FrameLayout, Serializable {
textView.text = value
}
- var circlePosition: Float = 0f
+ val circlePosition: Float
get() = (textBackground.width / 2 + 1).toFloat()
- var collapsedSize: Int = 0
+ val collapsedSize: Int
get() = viewLeft.width
var cornerRadius: Float = 100f
@@ -101,7 +98,7 @@ class FilterItem : FrameLayout, Serializable {
viewLeft.performClick()
}
}
- buttonCancel.supportBackgroundTintList = ColorStateList.valueOf(getColor(cancelIconTint))
+ ViewCompat.setBackgroundTintList(buttonCancel, ColorStateList.valueOf(cancelIconTint))
isIncreased = true
}
@@ -194,7 +191,7 @@ class FilterItem : FrameLayout, Serializable {
color = removeAlpha(color)
val strokeColor = if (isFilterSelected) color else removeAlpha(strokeColor)
- val drawable: GradientDrawable = GradientDrawable()
+ val drawable = GradientDrawable()
drawable.cornerRadius = cornerRadius
if (color != null) {
@@ -211,8 +208,8 @@ class FilterItem : FrameLayout, Serializable {
bottomStroke.setBackgroundColor(strokeColor)
}
- viewLeft.setBackgroundDrawable(drawable)
- viewRight.setBackgroundDrawable(drawable)
+ ViewCompat.setBackground(viewLeft, drawable)
+ ViewCompat.setBackground(viewRight, drawable)
}
diff --git a/filter/src/main/res/drawable-xxhdpi/ic_arrow.png b/filter/src/main/res/drawable/ic_arrow.png
similarity index 100%
rename from filter/src/main/res/drawable-xxhdpi/ic_arrow.png
rename to filter/src/main/res/drawable/ic_arrow.png
diff --git a/filter/src/main/res/drawable-xxhdpi/ic_cancel.png b/filter/src/main/res/drawable/ic_cancel.png
similarity index 100%
rename from filter/src/main/res/drawable-xxhdpi/ic_cancel.png
rename to filter/src/main/res/drawable/ic_cancel.png
diff --git a/filter/src/main/res/layout/item_filter.xml b/filter/src/main/res/layout/item_filter.xml
index cc0b578..adec25c 100755
--- a/filter/src/main/res/layout/item_filter.xml
+++ b/filter/src/main/res/layout/item_filter.xml
@@ -9,7 +9,7 @@
android:layout_height="wrap_content"
android:clipChildren="false">
-
-
@@ -66,7 +66,7 @@
-
-
-