From 440e9bf7304b48755c9ca812a8b178e9ad2ee54b Mon Sep 17 00:00:00 2001 From: attect <412966721@qq.com> Date: Sat, 27 Apr 2019 16:39:54 +0800 Subject: [PATCH 01/22] update gradle wrapper/sdk/android x --- app/build.gradle | 22 +++++++++------- .../fitfilter/DividerItemDecoration.java | 3 ++- .../yalantis/fitfilter/ExampleActivity.java | 4 +-- .../yalantis/fitfilter/QuestionsAdapter.java | 3 ++- build.gradle | 14 ++++++++--- filter/build.gradle | 25 ++++++------------- .../animator/FiltersListItemAnimator.kt | 6 ++--- .../com/yalantis/filter/widget/FilterItem.kt | 4 +-- gradle.properties | 4 ++- gradle/wrapper/gradle-wrapper.properties | 4 +-- 10 files changed, 47 insertions(+), 42 deletions(-) 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..68cbe82 100755 --- a/app/src/main/java/com/yalantis/fitfilter/DividerItemDecoration.java +++ b/app/src/main/java/com/yalantis/fitfilter/DividerItemDecoration.java @@ -3,7 +3,8 @@ import android.content.Context; import android.graphics.Canvas; import android.graphics.drawable.Drawable; -import android.support.v4.content.ContextCompat; + +import androidx.core.content.ContextCompat; import android.support.v7.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..fdda682 100755 --- a/app/src/main/java/com/yalantis/fitfilter/ExampleActivity.java +++ b/app/src/main/java/com/yalantis/fitfilter/ExampleActivity.java @@ -1,8 +1,8 @@ package com.yalantis.fitfilter; -import android.graphics.Color; import android.os.Bundle; -import android.support.v4.content.ContextCompat; + +import androidx.core.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.support.v7.util.DiffUtil; import android.support.v7.widget.LinearLayoutManager; diff --git a/app/src/main/java/com/yalantis/fitfilter/QuestionsAdapter.java b/app/src/main/java/com/yalantis/fitfilter/QuestionsAdapter.java index 0f842c9..615aa3a 100755 --- a/app/src/main/java/com/yalantis/fitfilter/QuestionsAdapter.java +++ b/app/src/main/java/com/yalantis/fitfilter/QuestionsAdapter.java @@ -2,7 +2,8 @@ import android.content.Context; import android.graphics.drawable.GradientDrawable; -import android.support.v4.content.ContextCompat; + +import androidx.core.content.ContextCompat; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; diff --git a/build.gradle b/build.gradle index 24e63b8..885f06b 100755 --- a/build.gradle +++ b/build.gradle @@ -1,17 +1,25 @@ buildscript { repositories { jcenter() + maven { + url 'https://maven.google.com/' + name 'Google' + } } dependencies { - classpath 'com.android.tools.build:gradle:2.1.3' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.0.0" - classpath "org.jetbrains.kotlin:kotlin-android-extensions:1.0.0" + classpath 'com.android.tools.build:gradle:3.4.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.31" + classpath "org.jetbrains.kotlin:kotlin-android-extensions:1.3.31" } } allprojects { repositories { jcenter() + maven { + url 'https://maven.google.com/' + name 'Google' + } } } diff --git a/filter/build.gradle b/filter/build.gradle index ac11e4f..9afa411 100755 --- a/filter/build.gradle +++ b/filter/build.gradle @@ -1,26 +1,15 @@ apply plugin: 'com.android.library' -buildscript { - repositories { - jcenter() - } - dependencies { - classpath 'com.android.tools.build:gradle:2.1.3' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.0.0" - classpath "org.jetbrains.kotlin:kotlin-android-extensions:1.0.0" - } -} apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' android { - compileSdkVersion 24 - buildToolsVersion "24.0.1" + compileSdkVersion 28 defaultConfig { - minSdkVersion 18 - targetSdkVersion 24 + minSdkVersion 19 + targetSdkVersion 28 versionCode 1 versionName "1.0" } @@ -33,8 +22,8 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.android.support:appcompat-v7:24.2.0' - compile "org.jetbrains.kotlin:kotlin-stdlib:1.0.0" - compile 'com.android.support:design:24.2.0' + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'androidx.appcompat:appcompat:1.0.2' + implementation "org.jetbrains.kotlin:kotlin-stdlib:1.3.31" + implementation 'com.google.android.material:material:1.0.0' } diff --git a/filter/src/main/java/com/yalantis/filter/animator/FiltersListItemAnimator.kt b/filter/src/main/java/com/yalantis/filter/animator/FiltersListItemAnimator.kt index a294c85..da4ac8c 100755 --- a/filter/src/main/java/com/yalantis/filter/animator/FiltersListItemAnimator.kt +++ b/filter/src/main/java/com/yalantis/filter/animator/FiltersListItemAnimator.kt @@ -1,9 +1,9 @@ package com.yalantis.filter.animator import android.animation.ValueAnimator -import android.support.v4.animation.AnimatorCompatHelper -import android.support.v4.view.ViewCompat -import android.support.v4.view.ViewPropertyAnimatorListener +import androidx.core.animation.AnimatorCompatHelper +import androidx.core.view.ViewCompat +import androidx.core.view.ViewPropertyAnimatorListener import android.support.v7.widget.RecyclerView import android.support.v7.widget.SimpleItemAnimator import android.view.View 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..62dc580 100755 --- a/filter/src/main/java/com/yalantis/filter/widget/FilterItem.kt +++ b/filter/src/main/java/com/yalantis/filter/widget/FilterItem.kt @@ -8,8 +8,8 @@ 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 androidx.core.content.ContextCompat +import androidx.core.content.res.ResourcesCompat import android.util.AttributeSet import android.view.LayoutInflater import android.view.MotionEvent diff --git a/gradle.properties b/gradle.properties index 7791533..23b3308 100755 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,6 @@ # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true \ No newline at end of file +# org.gradle.parallel=true +android.enableJetifier=true +android.useAndroidX=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 7e74c91..2698a03 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Tue Aug 30 17:05:23 EEST 2016 +#Sat Apr 27 16:35:07 CST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip From e1ccda7fc91f7588151baab81252bde0b0def6c9 Mon Sep 17 00:00:00 2001 From: attect <412966721@qq.com> Date: Sat, 27 Apr 2019 16:42:07 +0800 Subject: [PATCH 02/22] Android X RecyclerView --- .../com/yalantis/filter/animator/FiltersListItemAnimator.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/filter/src/main/java/com/yalantis/filter/animator/FiltersListItemAnimator.kt b/filter/src/main/java/com/yalantis/filter/animator/FiltersListItemAnimator.kt index da4ac8c..467c7f5 100755 --- a/filter/src/main/java/com/yalantis/filter/animator/FiltersListItemAnimator.kt +++ b/filter/src/main/java/com/yalantis/filter/animator/FiltersListItemAnimator.kt @@ -1,12 +1,11 @@ package com.yalantis.filter.animator import android.animation.ValueAnimator -import androidx.core.animation.AnimatorCompatHelper import androidx.core.view.ViewCompat import androidx.core.view.ViewPropertyAnimatorListener -import android.support.v7.widget.RecyclerView -import android.support.v7.widget.SimpleItemAnimator import android.view.View +import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.SimpleItemAnimator import java.util.* /** From 5e82cfc6e7e57bbe1b1f3737b4226c4cc5ac5810 Mon Sep 17 00:00:00 2001 From: attect <412966721@qq.com> Date: Sat, 27 Apr 2019 16:43:48 +0800 Subject: [PATCH 03/22] Android X RecyclerView --- .../java/com/yalantis/fitfilter/DividerItemDecoration.java | 3 ++- .../main/java/com/yalantis/fitfilter/ExampleActivity.java | 7 +++---- .../main/java/com/yalantis/fitfilter/QuestionsAdapter.java | 4 +++- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/yalantis/fitfilter/DividerItemDecoration.java b/app/src/main/java/com/yalantis/fitfilter/DividerItemDecoration.java index 68cbe82..5fd0698 100755 --- a/app/src/main/java/com/yalantis/fitfilter/DividerItemDecoration.java +++ b/app/src/main/java/com/yalantis/fitfilter/DividerItemDecoration.java @@ -5,7 +5,8 @@ import android.graphics.drawable.Drawable; import androidx.core.content.ContextCompat; -import android.support.v7.widget.RecyclerView; +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 fdda682..88db5fe 100755 --- a/app/src/main/java/com/yalantis/fitfilter/ExampleActivity.java +++ b/app/src/main/java/com/yalantis/fitfilter/ExampleActivity.java @@ -2,11 +2,10 @@ import android.os.Bundle; +import androidx.appcompat.app.AppCompatActivity; import androidx.core.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.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.imagepipeline.core.ImagePipelineConfig; diff --git a/app/src/main/java/com/yalantis/fitfilter/QuestionsAdapter.java b/app/src/main/java/com/yalantis/fitfilter/QuestionsAdapter.java index 615aa3a..84ef1f0 100755 --- a/app/src/main/java/com/yalantis/fitfilter/QuestionsAdapter.java +++ b/app/src/main/java/com/yalantis/fitfilter/QuestionsAdapter.java @@ -4,7 +4,9 @@ import android.graphics.drawable.GradientDrawable; import androidx.core.content.ContextCompat; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView; + + import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; From 39d0ebf13ed4697123e4721ee215de65779f84a6 Mon Sep 17 00:00:00 2001 From: attect <412966721@qq.com> Date: Sat, 27 Apr 2019 16:44:55 +0800 Subject: [PATCH 04/22] Fix issues #16 --- app/src/main/java/com/yalantis/fitfilter/ExampleActivity.java | 1 + app/src/main/java/com/yalantis/fitfilter/Tag.java | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/yalantis/fitfilter/ExampleActivity.java b/app/src/main/java/com/yalantis/fitfilter/ExampleActivity.java index 88db5fe..40bf772 100755 --- a/app/src/main/java/com/yalantis/fitfilter/ExampleActivity.java +++ b/app/src/main/java/com/yalantis/fitfilter/ExampleActivity.java @@ -4,6 +4,7 @@ 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; 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; From 0e7f5ec908d2e45affa4a9a27a986ba8c4fc60d2 Mon Sep 17 00:00:00 2001 From: attect <412966721@qq.com> Date: Sat, 27 Apr 2019 16:46:04 +0800 Subject: [PATCH 05/22] Fix layout manager wrong orientation argument --- app/src/main/java/com/yalantis/fitfilter/ExampleActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/yalantis/fitfilter/ExampleActivity.java b/app/src/main/java/com/yalantis/fitfilter/ExampleActivity.java index 40bf772..6692979 100755 --- a/app/src/main/java/com/yalantis/fitfilter/ExampleActivity.java +++ b/app/src/main/java/com/yalantis/fitfilter/ExampleActivity.java @@ -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()); } From d64402ca48f956631901cea8e13970266d20be83 Mon Sep 17 00:00:00 2001 From: attect <412966721@qq.com> Date: Sat, 27 Apr 2019 16:48:11 +0800 Subject: [PATCH 06/22] Fix supportBackgroundTintList and res annotation --- .../com/yalantis/filter/widget/FilterItem.kt | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) 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 62dc580..6927af3 100755 --- a/filter/src/main/java/com/yalantis/filter/widget/FilterItem.kt +++ b/filter/src/main/java/com/yalantis/filter/widget/FilterItem.kt @@ -3,11 +3,9 @@ package com.yalantis.filter.widget import android.content.Context import android.content.res.ColorStateList import android.graphics.Canvas +import android.graphics.Color import android.graphics.Typeface import android.graphics.drawable.GradientDrawable -import android.support.annotation.ColorInt -import android.support.annotation.ColorRes -import android.support.annotation.DrawableRes import androidx.core.content.ContextCompat import androidx.core.content.res.ResourcesCompat import android.util.AttributeSet @@ -16,6 +14,10 @@ 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.view.ViewCompat import com.yalantis.filter.R import com.yalantis.filter.listener.FilterItemListener import kotlinx.android.synthetic.main.item_filter.view.* @@ -30,8 +32,10 @@ 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 @@ -101,7 +105,7 @@ class FilterItem : FrameLayout, Serializable { viewLeft.performClick() } } - buttonCancel.supportBackgroundTintList = ColorStateList.valueOf(getColor(cancelIconTint)) + ViewCompat.setBackgroundTintList(buttonCancel, ColorStateList.valueOf(cancelIconTint)) isIncreased = true } From f95b58862a8e8046216ab747333365edfb3ef955 Mon Sep 17 00:00:00 2001 From: attect <412966721@qq.com> Date: Sat, 27 Apr 2019 16:49:36 +0800 Subject: [PATCH 07/22] Fix FiltersListItemAnimator resetAnimation() --- .../com/yalantis/filter/animator/FiltersListItemAnimator.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/filter/src/main/java/com/yalantis/filter/animator/FiltersListItemAnimator.kt b/filter/src/main/java/com/yalantis/filter/animator/FiltersListItemAnimator.kt index 467c7f5..0a38179 100755 --- a/filter/src/main/java/com/yalantis/filter/animator/FiltersListItemAnimator.kt +++ b/filter/src/main/java/com/yalantis/filter/animator/FiltersListItemAnimator.kt @@ -423,7 +423,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) } From 55f3884c1bc843c61b07f08ff85f16a45806b917 Mon Sep 17 00:00:00 2001 From: attect <412966721@qq.com> Date: Sat, 27 Apr 2019 16:53:09 +0800 Subject: [PATCH 08/22] Fix androidx layout xml file/wrong res import Now it can run on Android Studio 3.4 And Android Pie(9) --- README.md | 4 ++-- app/src/main/res/layout/activity_example.xml | 4 ++-- app/src/main/res/layout/item_list.xml | 6 +++--- filter/src/main/java/com/yalantis/filter/widget/Filter.kt | 1 - filter/src/main/res/layout/item_filter.xml | 6 +++--- filter/src/main/res/layout/view_collapse.xml | 4 ++-- 6 files changed, 12 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 6159f5e..a1468ee 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ Firstly you need to place `Filter` above your `RecyclerView` in the layout file android:layout_width="match_parent" android:layout_height="match_parent"> - - - - - - - - - - - - Date: Sat, 27 Apr 2019 16:58:52 +0800 Subject: [PATCH 09/22] Fix androidx layout xml file --- app/src/main/res/layout/activity_example.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/src/main/res/layout/activity_example.xml b/app/src/main/res/layout/activity_example.xml index bef418c..3b438c0 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 From 302b9a7762f34260934d5442a5cacbdcd9d2b9df Mon Sep 17 00:00:00 2001 From: attect <412966721@qq.com> Date: Sat, 27 Apr 2019 17:02:34 +0800 Subject: [PATCH 10/22] fix layout wrong type --- app/src/main/res/layout/activity_example.xml | 4 ++-- app/src/main/res/layout/item_list.xml | 6 +++--- filter/src/main/res/layout/item_filter.xml | 6 +++--- filter/src/main/res/layout/view_collapse.xml | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/src/main/res/layout/activity_example.xml b/app/src/main/res/layout/activity_example.xml index 3b438c0..e7c9077 100755 --- a/app/src/main/res/layout/activity_example.xml +++ b/app/src/main/res/layout/activity_example.xml @@ -20,7 +20,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - - - - - - - Date: Sat, 27 Apr 2019 17:05:22 +0800 Subject: [PATCH 11/22] fix item stroke height --- filter/src/main/res/layout/item_filter.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/filter/src/main/res/layout/item_filter.xml b/filter/src/main/res/layout/item_filter.xml index 5bd05cd..adec25c 100755 --- a/filter/src/main/res/layout/item_filter.xml +++ b/filter/src/main/res/layout/item_filter.xml @@ -40,14 +40,14 @@ From ec6986700509eec428505f6eb43a5040671be388 Mon Sep 17 00:00:00 2001 From: attect <412966721@qq.com> Date: Sat, 27 Apr 2019 17:24:35 +0800 Subject: [PATCH 12/22] Make FiltersListItemAnimator.kt GREEN --- .../animator/FiltersListItemAnimator.kt | 116 ++++++++---------- 1 file changed, 52 insertions(+), 64 deletions(-) diff --git a/filter/src/main/java/com/yalantis/filter/animator/FiltersListItemAnimator.kt b/filter/src/main/java/com/yalantis/filter/animator/FiltersListItemAnimator.kt index 0a38179..3fadd75 100755 --- a/filter/src/main/java/com/yalantis/filter/animator/FiltersListItemAnimator.kt +++ b/filter/src/main/java/com/yalantis/filter/animator/FiltersListItemAnimator.kt @@ -2,8 +2,6 @@ package com.yalantis.filter.animator import android.animation.ValueAnimator import androidx.core.view.ViewCompat -import androidx.core.view.ViewPropertyAnimatorListener -import android.view.View import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.SimpleItemAnimator import java.util.* @@ -14,17 +12,17 @@ import java.util.* class FiltersListItemAnimator : SimpleItemAnimator() { override fun isRunning(): Boolean { - return !mPendingAdditions.isEmpty() || - !mPendingChanges.isEmpty() || - !mPendingMoves.isEmpty() || - !mPendingRemovals.isEmpty() || - !mMoveAnimations.isEmpty() || - !mRemoveAnimations.isEmpty() || - !mAddAnimations.isEmpty() || - !mChangeAnimations.isEmpty() || - !mMovesList.isEmpty() || - !mAdditionsList.isEmpty() || - !mChangesList.isEmpty() + return mPendingAdditions.isNotEmpty() || + mPendingChanges.isNotEmpty() || + mPendingMoves.isNotEmpty() || + mPendingRemovals.isNotEmpty() || + mMoveAnimations.isNotEmpty() || + mRemoveAnimations.isNotEmpty() || + mAddAnimations.isNotEmpty() || + mChangeAnimations.isNotEmpty() || + mMovesList.isNotEmpty() || + mAdditionsList.isNotEmpty() || + mChangesList.isNotEmpty() } private val mPendingRemovals = mutableListOf() @@ -51,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 @@ -80,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() } @@ -100,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() } @@ -162,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 } @@ -190,25 +188,25 @@ class FiltersListItemAnimator : SimpleItemAnimator() { override fun animateMove(holder: RecyclerView.ViewHolder, fromX: Int, fromY: Int, toX: Int, toY: Int): Boolean { - var fromX = fromX - var fromY = fromY + var fx = fromX + var fy = fromY val view = holder.itemView - fromX += ViewCompat.getTranslationX(holder.itemView).toInt() - fromY += ViewCompat.getTranslationY(holder.itemView).toInt() + fx += holder.itemView.translationX.toInt() + fy += holder.itemView.translationY.toInt() resetAnimation(holder) - val deltaX = toX - fromX - val deltaY = toY - fromY + val deltaX = toX - fx + val deltaY = toY - fy if (deltaX == 0 && deltaY == 0) { dispatchMoveFinished(holder) 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) + mPendingMoves += MoveInfo(holder, fx, fy, toX, toY) return true } @@ -248,22 +246,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 @@ -355,9 +353,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 } @@ -370,19 +368,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) } @@ -398,8 +396,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()) { @@ -412,7 +410,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) @@ -445,8 +443,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 +458,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 +479,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 +495,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 +551,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 From d3e995582a49d3e344e8c7b514b6f94f943b9df4 Mon Sep 17 00:00:00 2001 From: attect <412966721@qq.com> Date: Sat, 27 Apr 2019 17:26:06 +0800 Subject: [PATCH 13/22] Make CollapsedFilterContainer.kt GREEN --- .../java/com/yalantis/filter/widget/CollapsedFilterContainer.kt | 2 ++ 1 file changed, 2 insertions(+) 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 -> { From e290c6d0c126d88b006ee0de02def35769ec8da4 Mon Sep 17 00:00:00 2001 From: attect <412966721@qq.com> Date: Sat, 27 Apr 2019 17:28:24 +0800 Subject: [PATCH 14/22] Make CollapsedFilterView.kt GREEN --- .../com/yalantis/filter/widget/CollapsedFilterView.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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)) { From 11ae37f0bb91e85459422b08ad14a1ba774d00b7 Mon Sep 17 00:00:00 2001 From: attect <412966721@qq.com> Date: Sat, 27 Apr 2019 17:33:04 +0800 Subject: [PATCH 15/22] Make CollapseView.kt GREEN --- .../main/java/com/yalantis/filter/widget/CollapseView.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 } From be361b4a571f3ece1bb85ddf1597a7afdce89704 Mon Sep 17 00:00:00 2001 From: attect <412966721@qq.com> Date: Sat, 27 Apr 2019 17:34:40 +0800 Subject: [PATCH 16/22] Make ExpandedFilterView.kt GREEN --- .../filter/widget/ExpandedFilterView.kt | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) 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 -> { From c2bbab955206bcef832bff8d392fece791fe1fe4 Mon Sep 17 00:00:00 2001 From: attect <412966721@qq.com> Date: Sat, 27 Apr 2019 17:44:27 +0800 Subject: [PATCH 17/22] Make Filter.kt GREEN --- .../java/com/yalantis/filter/widget/Filter.kt | 35 ++++--------------- 1 file changed, 6 insertions(+), 29 deletions(-) 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 b334954..1a144b9 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,10 +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 /** @@ -35,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 @@ -280,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) } @@ -298,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) @@ -348,15 +324,16 @@ class Filter : FrameLayout, FilterItemListener, CollapseListene putBoolean(STATE_COLLAPSED, isCollapsed!!) val selected = mSelectedItems val removed = mRemovedItems - if (selected is Serializable) { + if (true) { putSerializable(STATE_SELECTED, selected) } - if (removed is Serializable) { + if (true) { putSerializable(STATE_REMOVED, removed) } } } + @Suppress("UNCHECKED_CAST") override fun onRestoreInstanceState(state: Parcelable?) { if (state is Bundle) { super.onRestoreInstanceState(state.getParcelable(STATE_SUPER)) From eacf9c0847e19f091ac1804ce808d18ee7892465 Mon Sep 17 00:00:00 2001 From: attect <412966721@qq.com> Date: Sat, 27 Apr 2019 17:46:56 +0800 Subject: [PATCH 18/22] Make FilterItem.kt GREEN --- .../com/yalantis/filter/widget/FilterItem.kt | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) 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 6927af3..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,12 +2,8 @@ package com.yalantis.filter.widget import android.content.Context import android.content.res.ColorStateList -import android.graphics.Canvas import android.graphics.Color -import android.graphics.Typeface import android.graphics.drawable.GradientDrawable -import androidx.core.content.ContextCompat -import androidx.core.content.res.ResourcesCompat import android.util.AttributeSet import android.view.LayoutInflater import android.view.MotionEvent @@ -17,6 +13,7 @@ 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 @@ -41,10 +38,6 @@ class FilterItem : FrameLayout, Serializable { @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) { @@ -52,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 @@ -198,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) { @@ -215,8 +208,8 @@ class FilterItem : FrameLayout, Serializable { bottomStroke.setBackgroundColor(strokeColor) } - viewLeft.setBackgroundDrawable(drawable) - viewRight.setBackgroundDrawable(drawable) + ViewCompat.setBackground(viewLeft, drawable) + ViewCompat.setBackground(viewRight, drawable) } From a48224e9b6cbb2caf70451305579baa76775d4c8 Mon Sep 17 00:00:00 2001 From: attect <412966721@qq.com> Date: Sat, 27 Apr 2019 17:47:37 +0800 Subject: [PATCH 19/22] Make Constant.kt GREEN --- filter/src/main/java/com/yalantis/filter/Constant.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/filter/src/main/java/com/yalantis/filter/Constant.kt b/filter/src/main/java/com/yalantis/filter/Constant.kt index bc8f0c1..81fe832 100755 --- a/filter/src/main/java/com/yalantis/filter/Constant.kt +++ b/filter/src/main/java/com/yalantis/filter/Constant.kt @@ -5,6 +5,6 @@ package com.yalantis.filter */ object Constant { - val ANIMATION_DURATION: Long = 400 + const val ANIMATION_DURATION: Long = 400 } \ No newline at end of file From df60b50710fd8ec199d35d9a3ddc216b8bdafcfe Mon Sep 17 00:00:00 2001 From: attect <412966721@qq.com> Date: Sat, 27 Apr 2019 17:53:39 +0800 Subject: [PATCH 20/22] update README Android SDK version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a1468ee..7f9ddbc 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 From aeba4007854bc4a494645752625ad8d4e5768779 Mon Sep 17 00:00:00 2001 From: attect <412966721@qq.com> Date: Sat, 27 Apr 2019 17:54:40 +0800 Subject: [PATCH 21/22] update README Example layout code --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 7f9ddbc..cb63bfc 100644 --- a/README.md +++ b/README.md @@ -42,17 +42,17 @@ Firstly you need to place `Filter` above your `RecyclerView` in the layout file ```xml - - - - - - - + + - - + ``` From 7ba1e1605f645921cf0016ba9f64535e1a640bf6 Mon Sep 17 00:00:00 2001 From: attect <412966721@qq.com> Date: Mon, 29 Apr 2019 09:05:07 +0800 Subject: [PATCH 22/22] change some code with ciscorucinski's suggestions/move resources --- .../filter/animator/FiltersListItemAnimator.kt | 15 ++++++++------- .../java/com/yalantis/filter/widget/Filter.kt | 8 ++------ .../{drawable-xxhdpi => drawable}/ic_arrow.png | Bin .../{drawable-xxhdpi => drawable}/ic_cancel.png | Bin 4 files changed, 10 insertions(+), 13 deletions(-) rename filter/src/main/res/{drawable-xxhdpi => drawable}/ic_arrow.png (100%) rename filter/src/main/res/{drawable-xxhdpi => drawable}/ic_cancel.png (100%) diff --git a/filter/src/main/java/com/yalantis/filter/animator/FiltersListItemAnimator.kt b/filter/src/main/java/com/yalantis/filter/animator/FiltersListItemAnimator.kt index 3fadd75..ea37426 100755 --- a/filter/src/main/java/com/yalantis/filter/animator/FiltersListItemAnimator.kt +++ b/filter/src/main/java/com/yalantis/filter/animator/FiltersListItemAnimator.kt @@ -186,16 +186,17 @@ class FiltersListItemAnimator : SimpleItemAnimator() { }.start() } + @Suppress("NAME_SHADOWING") override fun animateMove(holder: RecyclerView.ViewHolder, fromX: Int, fromY: Int, toX: Int, toY: Int): Boolean { - var fx = fromX - var fy = fromY + var fromX = fromX + var fromY = fromY val view = holder.itemView - fx += holder.itemView.translationX.toInt() - fy += holder.itemView.translationY.toInt() + fromX += holder.itemView.translationX.toInt() + fromY += holder.itemView.translationY.toInt() resetAnimation(holder) - val deltaX = toX - fx - val deltaY = toY - fy + val deltaX = toX - fromX + val deltaY = toY - fromY if (deltaX == 0 && deltaY == 0) { dispatchMoveFinished(holder) return false @@ -206,7 +207,7 @@ class FiltersListItemAnimator : SimpleItemAnimator() { if (deltaY != 0) { view.translationY = (-deltaY).toFloat() } - mPendingMoves += MoveInfo(holder, fx, fy, toX, toY) + mPendingMoves += MoveInfo(holder, fromX, fromY, toX, toY) return true } 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 1a144b9..74b9c53 100755 --- a/filter/src/main/java/com/yalantis/filter/widget/Filter.kt +++ b/filter/src/main/java/com/yalantis/filter/widget/Filter.kt @@ -324,12 +324,8 @@ class Filter : FrameLayout, FilterItemListener, CollapseListene putBoolean(STATE_COLLAPSED, isCollapsed!!) val selected = mSelectedItems val removed = mRemovedItems - if (true) { - putSerializable(STATE_SELECTED, selected) - } - if (true) { - putSerializable(STATE_REMOVED, removed) - } + putSerializable(STATE_SELECTED, selected) + putSerializable(STATE_REMOVED, removed) } } 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