From da43ca03ae649fe0bd0ddd18a35b2391d7e441c1 Mon Sep 17 00:00:00 2001 From: dmorozov Date: Mon, 19 Sep 2022 11:54:58 +0300 Subject: [PATCH 1/3] Update library and demo app - Migrate to AndroidX - Update dependencies to the latest versions - Remove obsolete code in build.gradle - Fix code style across the whole codebase --- .gitignore | 2 + app/build.gradle | 33 ++--- app/src/main/AndroidManifest.xml | 32 ++--- .../multiselectdemo/demo/DemoActivity.java | 15 ++- .../multiselectdemo/demo/LeftAdapter.java | 7 +- .../multiselectdemo/demo/RightAdapter.java | 4 +- .../demo/TracksItemDecorator.java | 6 +- .../multiselectdemo/demo/ViewHolder.java | 9 +- .../multiselectdemo/demo/model/Track.java | 7 +- .../multiselectdemo/demo/model/TrackList.java | 2 +- app/src/main/res/drawable/ripple.xml | 9 +- app/src/main/res/drawable/toolbar_bg.xml | 3 +- app/src/main/res/layout/activity_main.xml | 44 ++++--- app/src/main/res/layout/item_view.xml | 66 +++++----- app/src/main/res/menu/menu.xml | 7 +- app/src/main/res/values/colors.xml | 8 +- app/src/main/res/values/ids.xml | 4 +- app/src/main/res/values/strings.xml | 14 +-- app/src/main/res/values/styles.xml | 16 +-- build.gradle | 35 +++--- gradle.properties | 24 ++++ gradle/wrapper/gradle-wrapper.properties | 3 +- multiselection/build.gradle | 16 +-- .../multiselection/lib/MultiSelect.kt | 2 +- .../multiselection/lib/MultiSelectBuilder.kt | 3 +- .../multiselection/lib/MultiSelectImpl.kt | 77 ++++++------ .../lib/MultiSelectItemAnimator.kt | 117 ++++++++++-------- .../lib/MultiSelectViewPager.kt | 6 +- .../multiselection/lib/ZoomPageTransformer.kt | 2 +- .../multiselection/lib/adapter/BaseAdapter.kt | 4 +- .../lib/adapter/BaseLeftAdapter.kt | 10 +- .../lib/adapter/BaseRightAdapter.kt | 3 +- .../lib/adapter/ViewPagerAdapter.kt | 8 +- .../lib/callbacks/SortedListCallback.kt | 4 +- .../multiselection/lib/util/Extesions.kt | 4 +- .../main/res/drawable/yal_ms_left_side.xml | 19 +-- .../main/res/drawable/yal_ms_right_side.xml | 9 +- .../main/res/drawable/yal_ms_round_left.xml | 6 +- .../main/res/drawable/yal_ms_round_right.xml | 6 +- .../main/res/layout/yal_ms_multiselect.xml | 12 +- .../src/main/res/layout/yal_ms_page_left.xml | 9 +- .../src/main/res/layout/yal_ms_page_right.xml | 9 +- multiselection/src/main/res/values/ids.xml | 2 +- 43 files changed, 362 insertions(+), 316 deletions(-) create mode 100644 gradle.properties diff --git a/.gitignore b/.gitignore index c6cbe56..e248586 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ *.iml .gradle +.idea +/.idea /local.properties /.idea/workspace.xml /.idea/libraries diff --git a/app/build.gradle b/app/build.gradle index b072008..4d031d7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,19 +1,15 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 24 - buildToolsVersion "24.0.2" + compileSdkVersion 33 + buildToolsVersion "30.0.3" defaultConfig { applicationId "com.yalantis.multiselect.demo" - targetSdkVersion 24 + targetSdkVersion 33 minSdkVersion 17 versionCode 1 versionName "1.0" - jackOptions { - enabled true - additionalParameters('jack.incremental': 'true') - } } compileOptions { @@ -21,16 +17,12 @@ android { targetCompatibility JavaVersion.VERSION_1_8 } - dexOptions { - javaMaxHeapSize '4096m' - } - signingConfigs { release { - storeFile file(RELEASE_STORE_FILE) - storePassword RELEASE_KEYSTORE_PASSWORD - keyAlias RELEASE_KEY_ALIAS_NAME - keyPassword RELEASE_KEY_ALIAS_PASSWORD +// storeFile file(RELEASE_STORE_FILE) +// storePassword RELEASE_KEYSTORE_PASSWORD +// keyAlias RELEASE_KEY_ALIAS_NAME +// keyPassword RELEASE_KEY_ALIAS_PASSWORD } } @@ -45,16 +37,15 @@ android { } dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') + implementation fileTree(include: ['*.jar'], dir: 'libs') - compile project(path: ':multiselection') + implementation project(path: ':multiselection') // in real project use this: //compile 'com.github.yalantis:multi-selection:v0.1' - compile "com.android.support:support-v4:$support_version" - compile "com.android.support:appcompat-v7:$support_version" - compile "com.android.support:recyclerview-v7:$support_version" - compile 'com.android.support:design:24.2.0' + implementation "androidx.appcompat:appcompat:$androidx_version" + implementation "androidx.recyclerview:recyclerview:$androidx_recycler_view_version" + implementation "com.google.android.material:material:$androidx_material_version" } repositories { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b228fc1..6e31ac6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,20 +1,22 @@ - + - + - - - - - - + + + + + + - + diff --git a/app/src/main/java/com/yalantis/multiselectdemo/demo/DemoActivity.java b/app/src/main/java/com/yalantis/multiselectdemo/demo/DemoActivity.java index 1c60064..dbd9b5d 100644 --- a/app/src/main/java/com/yalantis/multiselectdemo/demo/DemoActivity.java +++ b/app/src/main/java/com/yalantis/multiselectdemo/demo/DemoActivity.java @@ -1,17 +1,16 @@ package com.yalantis.multiselectdemo.demo; import android.os.Bundle; -import android.support.design.widget.Snackbar; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; -import android.view.MenuItem; -import android.view.ViewGroup; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; + +import com.google.android.material.snackbar.Snackbar; import com.yalantis.multiselectdemo.R; import com.yalantis.multiselectdemo.demo.model.Track; import com.yalantis.multiselectdemo.demo.model.TrackList; -import com.yalantis.multiselection.lib.MultiSelectBuilder; import com.yalantis.multiselection.lib.MultiSelect; +import com.yalantis.multiselection.lib.MultiSelectBuilder; import java.util.List; @@ -26,11 +25,11 @@ public class DemoActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - setUpToolbar((Toolbar) findViewById(R.id.toolbar)); + setUpToolbar(findViewById(R.id.toolbar)); MultiSelectBuilder builder = new MultiSelectBuilder<>(Track.class) .withContext(this) - .mountOn((ViewGroup) findViewById(R.id.mount_point)) + .mountOn(findViewById(R.id.mount_point)) .withSidebarWidth(46 + 8 * 2); // ImageView width with paddings setUpAdapters(builder); diff --git a/app/src/main/java/com/yalantis/multiselectdemo/demo/LeftAdapter.java b/app/src/main/java/com/yalantis/multiselectdemo/demo/LeftAdapter.java index 1c72661..5564869 100644 --- a/app/src/main/java/com/yalantis/multiselectdemo/demo/LeftAdapter.java +++ b/app/src/main/java/com/yalantis/multiselectdemo/demo/LeftAdapter.java @@ -1,10 +1,11 @@ package com.yalantis.multiselectdemo.demo; -import android.support.annotation.NonNull; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.NonNull; + import com.yalantis.multiselectdemo.R; import com.yalantis.multiselectdemo.demo.model.Track; import com.yalantis.multiselection.lib.adapter.BaseLeftAdapter; @@ -12,7 +13,7 @@ /** * Created by Artem Kholodnyi on 9/3/16. */ -public class LeftAdapter extends BaseLeftAdapter{ +public class LeftAdapter extends BaseLeftAdapter { private final Callback callback; @@ -23,7 +24,7 @@ public LeftAdapter(Callback callback) { @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view, parent, false); + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view, parent, false); return new ViewHolder(view); } diff --git a/app/src/main/java/com/yalantis/multiselectdemo/demo/RightAdapter.java b/app/src/main/java/com/yalantis/multiselectdemo/demo/RightAdapter.java index e802321..4f99967 100644 --- a/app/src/main/java/com/yalantis/multiselectdemo/demo/RightAdapter.java +++ b/app/src/main/java/com/yalantis/multiselectdemo/demo/RightAdapter.java @@ -8,8 +8,6 @@ import com.yalantis.multiselectdemo.demo.model.Track; import com.yalantis.multiselection.lib.adapter.BaseRightAdapter; -import org.jetbrains.annotations.NotNull; - /** * Created by Artem Kholodnyi on 9/6/16. */ @@ -28,7 +26,7 @@ public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { } @Override - public void onBindViewHolder(@NotNull final ViewHolder holder, int position) { + public void onBindViewHolder(ViewHolder holder, int position) { super.onBindViewHolder(holder, position); ViewHolder.bind(holder, getItemAt(position)); diff --git a/app/src/main/java/com/yalantis/multiselectdemo/demo/TracksItemDecorator.java b/app/src/main/java/com/yalantis/multiselectdemo/demo/TracksItemDecorator.java index 12d0c48..416f9a1 100644 --- a/app/src/main/java/com/yalantis/multiselectdemo/demo/TracksItemDecorator.java +++ b/app/src/main/java/com/yalantis/multiselectdemo/demo/TracksItemDecorator.java @@ -1,9 +1,11 @@ package com.yalantis.multiselectdemo.demo; import android.graphics.Rect; -import android.support.v7.widget.RecyclerView; import android.view.View; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + /** * Created by Artem Kholodnyi on 9/6/16. */ @@ -16,7 +18,7 @@ public TracksItemDecorator(int size) { } @Override - public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { + public void getItemOffsets(Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { outRect.bottom = size; outRect.top = 0; outRect.left = 0; diff --git a/app/src/main/java/com/yalantis/multiselectdemo/demo/ViewHolder.java b/app/src/main/java/com/yalantis/multiselectdemo/demo/ViewHolder.java index 03e88b7..484c698 100644 --- a/app/src/main/java/com/yalantis/multiselectdemo/demo/ViewHolder.java +++ b/app/src/main/java/com/yalantis/multiselectdemo/demo/ViewHolder.java @@ -1,10 +1,11 @@ package com.yalantis.multiselectdemo.demo; -import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.ImageView; import android.widget.TextView; +import androidx.recyclerview.widget.RecyclerView; + import com.yalantis.multiselectdemo.R; import com.yalantis.multiselectdemo.demo.model.Track; @@ -18,9 +19,9 @@ class ViewHolder extends RecyclerView.ViewHolder { public ViewHolder(View view) { super(view); - track = (TextView) view.findViewById(R.id.track); - artist = (TextView) view.findViewById(R.id.artist); - avatar = (ImageView) view.findViewById(R.id.yal_ms_avatar); + track = view.findViewById(R.id.track); + artist = view.findViewById(R.id.artist); + avatar = view.findViewById(R.id.yal_ms_avatar); } public static void bind(ViewHolder viewHolder, Track track) { diff --git a/app/src/main/java/com/yalantis/multiselectdemo/demo/model/Track.java b/app/src/main/java/com/yalantis/multiselectdemo/demo/model/Track.java index 81946b5..5506701 100644 --- a/app/src/main/java/com/yalantis/multiselectdemo/demo/model/Track.java +++ b/app/src/main/java/com/yalantis/multiselectdemo/demo/model/Track.java @@ -1,7 +1,7 @@ package com.yalantis.multiselectdemo.demo.model; -import android.support.annotation.DrawableRes; -import android.support.v4.app.Fragment; + +import androidx.annotation.DrawableRes; import java.io.Serializable; @@ -10,7 +10,8 @@ */ public class Track implements Comparable, Serializable { private String trackName; - private @DrawableRes int album; + private @DrawableRes + int album; private String artist; public Track(String trackName, String artist, @DrawableRes int album) { diff --git a/app/src/main/java/com/yalantis/multiselectdemo/demo/model/TrackList.java b/app/src/main/java/com/yalantis/multiselectdemo/demo/model/TrackList.java index a0fccb0..282b8fa 100644 --- a/app/src/main/java/com/yalantis/multiselectdemo/demo/model/TrackList.java +++ b/app/src/main/java/com/yalantis/multiselectdemo/demo/model/TrackList.java @@ -9,7 +9,7 @@ * Created by Artem Kholodnyi on 9/6/16. */ public class TrackList { - public final static List TRACKS = new ArrayList(){{ + public final static List TRACKS = new ArrayList() {{ add(new Track("Dead Inside", "Muse", R.drawable.img_dead)); add(new Track("Sandman", "Hurts", R.drawable.img_sandman)); add(new Track("Doing It to Death", "The Kills", R.drawable.img_doing_it)); diff --git a/app/src/main/res/drawable/ripple.xml b/app/src/main/res/drawable/ripple.xml index 441cd8c..daefe40 100644 --- a/app/src/main/res/drawable/ripple.xml +++ b/app/src/main/res/drawable/ripple.xml @@ -1,6 +1,5 @@ - @@ -11,9 +10,9 @@ - - - + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/toolbar_bg.xml b/app/src/main/res/drawable/toolbar_bg.xml index 83cefc1..a497591 100644 --- a/app/src/main/res/drawable/toolbar_bg.xml +++ b/app/src/main/res/drawable/toolbar_bg.xml @@ -1,7 +1,6 @@ + android:startColor="#BB66CC" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 6385602..a360be6 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,32 +1,30 @@ - + android:background="@android:color/black"> - + - + - + - + \ No newline at end of file diff --git a/app/src/main/res/layout/item_view.xml b/app/src/main/res/layout/item_view.xml index 9d09665..40ffec6 100644 --- a/app/src/main/res/layout/item_view.xml +++ b/app/src/main/res/layout/item_view.xml @@ -1,48 +1,42 @@ - - - + android:orientation="horizontal" + android:padding="@dimen/padding"> - + - + android:layout_centerVertical="true" + android:layout_toEndOf="@id/yal_ms_avatar" + android:orientation="vertical"> - + + + - + \ No newline at end of file diff --git a/app/src/main/res/menu/menu.xml b/app/src/main/res/menu/menu.xml index 7d1088f..b0362af 100644 --- a/app/src/main/res/menu/menu.xml +++ b/app/src/main/res/menu/menu.xml @@ -1,8 +1,9 @@ - + android:title="" + app:showAsAction="always" /> \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 668b0db..a00f51d 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,7 +1,7 @@ - #3F51B5 - #303F9F - #FF4081 - #161618 + #3F51B5 + #303F9F + #FF4081 + #161618 diff --git a/app/src/main/res/values/ids.xml b/app/src/main/res/values/ids.xml index eaa908f..8c25edc 100644 --- a/app/src/main/res/values/ids.xml +++ b/app/src/main/res/values/ids.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1c090a6..2ae9ef4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,11 +1,11 @@ - Multi Select - Create Playlist - Don\'t you like anything? :\'( + Multi Select + Create Playlist + Don\'t you like anything? :\'( - - You selected %d song. Good taste! - You selected %d songs. Good taste! - + + You selected %d song. Good taste! + You selected %d songs. Good taste! + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 9db6c37..055bb14 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,12 +1,12 @@ - - + + diff --git a/build.gradle b/build.gradle index 62928ed..c908b77 100644 --- a/build.gradle +++ b/build.gradle @@ -1,27 +1,30 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.0.4' - ext.support_version = '24.2.0' - repositories { - jcenter() - } - dependencies { - classpath 'com.android.tools.build:gradle:2.2.1' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + ext.kotlin_version = '1.7.10' + ext.androidx_version = '1.5.1' + ext.androidx_recycler_view_version = '1.2.1' + ext.androidx_material_version = '1.6.1' + repositories { + mavenCentral() + google() + } + dependencies { + classpath 'com.android.tools.build:gradle:7.3.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files - } + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } } allprojects { - repositories { - jcenter() - maven { url "https://jitpack.io" } - } + repositories { + maven { url "https://jitpack.io" } + google() + } } task clean(type: Delete) { - delete rootProject.buildDir + delete rootProject.buildDir } diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..571f6dd --- /dev/null +++ b/gradle.properties @@ -0,0 +1,24 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +# 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 +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app"s APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +android.enableJetifier=true +# Kotlin code style for this project: "official" or "obsolete": +kotlin.code.style=official +# Enables namespacing of each library's R class so that its R class includes only the +# resources declared in the library itself and none from the library's dependencies, +# thereby reducing the size of the R class for that library +android.nonTransitiveRClass=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a8461a1..41dfb87 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Wed Aug 17 19:15:26 EEST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip diff --git a/multiselection/build.gradle b/multiselection/build.gradle index 92e2990..e69a171 100644 --- a/multiselection/build.gradle +++ b/multiselection/build.gradle @@ -2,12 +2,12 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' android { - compileSdkVersion 24 - buildToolsVersion "24.0.2" + compileSdkVersion 33 + buildToolsVersion "30.0.3" defaultConfig { minSdkVersion 17 - targetSdkVersion 24 + targetSdkVersion 33 versionCode 1 versionName "1.0" } @@ -25,11 +25,11 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - testCompile 'junit:junit:4.12' - compile "com.android.support:appcompat-v7:$support_version" - compile "com.android.support:recyclerview-v7:$support_version" - compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + implementation fileTree(dir: 'libs', include: ['*.jar']) + testImplementation 'junit:junit:4.13.2' + implementation "androidx.appcompat:appcompat:$androidx_version" + implementation "androidx.recyclerview:recyclerview:$androidx_recycler_view_version" + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" } repositories { mavenCentral() diff --git a/multiselection/src/main/java/com/yalantis/multiselection/lib/MultiSelect.kt b/multiselection/src/main/java/com/yalantis/multiselection/lib/MultiSelect.kt index 697eca1..8e98358 100644 --- a/multiselection/src/main/java/com/yalantis/multiselection/lib/MultiSelect.kt +++ b/multiselection/src/main/java/com/yalantis/multiselection/lib/MultiSelect.kt @@ -1,6 +1,6 @@ package com.yalantis.multiselection.lib -import android.support.v7.widget.RecyclerView +import androidx.recyclerview.widget.RecyclerView import com.yalantis.multiselection.lib.adapter.BaseLeftAdapter import com.yalantis.multiselection.lib.adapter.BaseRightAdapter diff --git a/multiselection/src/main/java/com/yalantis/multiselection/lib/MultiSelectBuilder.kt b/multiselection/src/main/java/com/yalantis/multiselection/lib/MultiSelectBuilder.kt index 3f9a939..ace5cd1 100644 --- a/multiselection/src/main/java/com/yalantis/multiselection/lib/MultiSelectBuilder.kt +++ b/multiselection/src/main/java/com/yalantis/multiselection/lib/MultiSelectBuilder.kt @@ -1,9 +1,8 @@ package com.yalantis.multiselection.lib import android.content.Context -import android.support.annotation.LayoutRes -import android.support.v7.widget.RecyclerView import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView import com.yalantis.multiselection.R import com.yalantis.multiselection.lib.adapter.BaseLeftAdapter import com.yalantis.multiselection.lib.adapter.BaseRightAdapter diff --git a/multiselection/src/main/java/com/yalantis/multiselection/lib/MultiSelectImpl.kt b/multiselection/src/main/java/com/yalantis/multiselection/lib/MultiSelectImpl.kt index c33cca8..ca5caf8 100644 --- a/multiselection/src/main/java/com/yalantis/multiselection/lib/MultiSelectImpl.kt +++ b/multiselection/src/main/java/com/yalantis/multiselection/lib/MultiSelectImpl.kt @@ -5,17 +5,15 @@ import android.animation.ValueAnimator import android.content.Context import android.os.Bundle import android.os.Parcelable -import android.support.annotation.NonNull -import android.support.v7.widget.LinearLayoutManager -import android.support.v7.widget.RecyclerView import android.util.DisplayMetrics -import android.util.Rational import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.WindowManager import android.view.animation.OvershootInterpolator import android.widget.FrameLayout +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView import com.yalantis.multiselection.R import com.yalantis.multiselection.lib.adapter.BaseAdapter import com.yalantis.multiselection.lib.adapter.BaseLeftAdapter @@ -29,9 +27,10 @@ import java.io.Serializable * Created by Artem Kholodnyi on 8/21/16. */ -internal class MultiSelectImpl>(myContext: Context, - val parent: ViewGroup) - : FrameLayout(myContext), MultiSelect { +internal class MultiSelectImpl>( + myContext: Context, + val parent: ViewGroup +) : FrameLayout(myContext), MultiSelect { init { isSaveEnabled = true @@ -49,7 +48,6 @@ internal class MultiSelectImpl>(myContext: Context, override val selectedItems: List? - @NonNull get() { @Suppress("UNCHECKED_CAST") return (recyclerRight.adapter as BaseRightAdapter).items @@ -132,19 +130,21 @@ internal class MultiSelectImpl>(myContext: Context, private fun setUpViews() { val inflater = LayoutInflater.from(context) - pagesAdapter.pageLeft = inflater.inflate(R.layout.yal_ms_page_left, viewPager, false).apply { - (findViewById(R.id.yal_ms_recycler) as RecyclerView).apply { - layoutManager = LinearLayoutManager(context) - itemAnimator = MultiSelectItemAnimator() + pagesAdapter.pageLeft = + inflater.inflate(R.layout.yal_ms_page_left, viewPager, false).apply { + (findViewById(R.id.yal_ms_recycler) as RecyclerView).apply { + layoutManager = LinearLayoutManager(context) + itemAnimator = MultiSelectItemAnimator() + } } - } - pagesAdapter.pageRight = inflater.inflate(R.layout.yal_ms_page_right, viewPager, false).apply { - (findViewById(R.id.yal_ms_recycler) as RecyclerView).apply { - layoutManager = LinearLayoutManager(context) - itemAnimator = MultiSelectItemAnimator() + pagesAdapter.pageRight = + inflater.inflate(R.layout.yal_ms_page_right, viewPager, false).apply { + (findViewById(R.id.yal_ms_recycler) as RecyclerView).apply { + layoutManager = LinearLayoutManager(context) + itemAnimator = MultiSelectItemAnimator() + } } - } } override fun select(position: Int) = animate(recyclerLeft, recyclerRight, position) @@ -152,13 +152,13 @@ internal class MultiSelectImpl>(myContext: Context, override fun deselect(position: Int) = animate(recyclerRight, recyclerLeft, position) private fun animate(sourceRecycler: RecyclerView, targetRecycler: RecyclerView, position: Int) { - val view = sourceRecycler.layoutManager.findViewByPosition(position) ?: return + val view = sourceRecycler.layoutManager?.findViewByPosition(position) ?: return view.isClickable = false val initial = view.getLocationOnScreen() - sourceRecycler.layoutManager.removeViewAt(position) + sourceRecycler.layoutManager?.removeViewAt(position) @Suppress("UNCHECKED_CAST") val removedItem: I = (sourceRecycler.adapter as BaseAdapter).removeItemAt(position) @@ -223,28 +223,35 @@ internal class MultiSelectImpl>(myContext: Context, viewPager.currentItem = 0 } - internal fun animateAlpha(removedItem: I, targetRecycler: RecyclerView, view: View, duration: Long) { + internal fun animateAlpha( + removedItem: I, + targetRecycler: RecyclerView, + view: View, + duration: Long + ) { ValueAnimator.ofFloat(1f, 0f).setDuration(duration).apply { addUpdateListener { val value = it.animatedValue as Float if (view is ViewGroup) { (0..view.childCount - 1) - .map { view.getChildAt(it) } - .filter { it.id != R.id.yal_ms_avatar } - .forEach { it?.alpha = value } + .map { view.getChildAt(it) } + .filter { it.id != R.id.yal_ms_avatar } + .forEach { it?.alpha = value } } } addListener(object : Animator.AnimatorListener { - override fun onAnimationStart(p0: Animator?) = Unit - override fun onAnimationRepeat(p0: Animator?) = Unit - override fun onAnimationEnd(p0: Animator?) = finallyDo() - override fun onAnimationCancel(p0: Animator?) = finallyDo() + override fun onAnimationStart(p0: Animator) = Unit + override fun onAnimationRepeat(p0: Animator) = Unit + override fun onAnimationEnd(p0: Animator) = finallyDo() + override fun onAnimationCancel(p0: Animator) = finallyDo() val finallyDo = { view.removeFromParent() @Suppress("UNCHECKED_CAST") - (targetRecycler.adapter as BaseAdapter).showItem(removedItem) + (targetRecycler.adapter as BaseAdapter).showItem( + removedItem + ) Unit } }) @@ -253,10 +260,10 @@ internal class MultiSelectImpl>(myContext: Context, internal fun animateTranslation(view: View, deltaX: Float, deltaY: Float, duration: Long) { view.animate().setDuration(duration) - .setInterpolator(OvershootInterpolator(1.1f)) - .translationXBy(deltaX) - .translationYBy(deltaY) - .start() + .setInterpolator(OvershootInterpolator(1.1f)) + .translationXBy(deltaX) + .translationYBy(deltaY) + .start() } override fun onSaveInstanceState(): Parcelable { @@ -291,12 +298,12 @@ internal class MultiSelectImpl>(myContext: Context, val leftScrollPos = state.getInt(STATE_LEFT_POS, -1) if (leftScrollPos != -1) { - recyclerLeft.layoutManager.scrollToPosition(leftScrollPos) + recyclerLeft.layoutManager?.scrollToPosition(leftScrollPos) } val rightScrollPos = state.getInt(STATE_RIGHT_POS, -1) if (rightScrollPos != -1) { - recyclerRight.layoutManager.scrollToPosition(rightScrollPos) + recyclerRight.layoutManager?.scrollToPosition(rightScrollPos) } } } diff --git a/multiselection/src/main/java/com/yalantis/multiselection/lib/MultiSelectItemAnimator.kt b/multiselection/src/main/java/com/yalantis/multiselection/lib/MultiSelectItemAnimator.kt index c2e0ecc..1f285e5 100644 --- a/multiselection/src/main/java/com/yalantis/multiselection/lib/MultiSelectItemAnimator.kt +++ b/multiselection/src/main/java/com/yalantis/multiselection/lib/MultiSelectItemAnimator.kt @@ -1,16 +1,16 @@ package com.yalantis.multiselection.lib - -import android.support.v4.animation.AnimatorCompatHelper -import android.support.v4.view.ViewCompat -import android.support.v4.view.ViewPropertyAnimatorListener -import android.support.v7.widget.RecyclerView -import android.support.v7.widget.RecyclerView.ViewHolder -import android.support.v7.widget.SimpleItemAnimator +import android.animation.ValueAnimator import android.util.Log import android.view.View +import androidx.core.view.ViewCompat +import androidx.core.view.ViewPropertyAnimatorListener +import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.RecyclerView.ViewHolder +import androidx.recyclerview.widget.SimpleItemAnimator import java.util.* + /** * This implementation of [RecyclerView.ItemAnimator] provides basic * animations on remove, add, and move events that happen to the items in @@ -48,13 +48,21 @@ class MultiSelectItemAnimator : SimpleItemAnimator() { private val mRemoveAnimations = mutableListOf() private val mChangeAnimations = mutableListOf() - data class MoveInfo(var holder: ViewHolder, var fromX: Int, var fromY: Int, var toX: Int, var toY: Int) + data class MoveInfo( + var holder: ViewHolder, + var fromX: Int, + var fromY: Int, + var toX: Int, + var toY: Int + ) - data class ChangeInfo(var oldHolder: ViewHolder?, var newHolder: ViewHolder?, - var fromX: Int = 0, - var fromY: Int = 0, - var toX: Int = 0, - var toY: Int = 0) + data class ChangeInfo( + var oldHolder: ViewHolder?, var newHolder: ViewHolder?, + var fromX: Int = 0, + var fromY: Int = 0, + var toX: Int = 0, + var toY: Int = 0 + ) override fun runPendingAnimations() { @@ -79,8 +87,10 @@ class MultiSelectItemAnimator : SimpleItemAnimator() { mPendingMoves.clear() val mover = Runnable { for (moveInfo in moves) { - animateMoveImpl(moveInfo.holder, moveInfo.fromX, moveInfo.fromY, - moveInfo.toX, moveInfo.toY) + animateMoveImpl( + moveInfo.holder, moveInfo.fromX, moveInfo.fromY, + moveInfo.toX, moveInfo.toY + ) } moves.clear() mMovesList.remove(moves) @@ -148,19 +158,20 @@ class MultiSelectItemAnimator : SimpleItemAnimator() { val view = holder.itemView val animation = ViewCompat.animate(view) mRemoveAnimations.add(holder) - animation.setDuration(getRemoveDuration()).alpha(0f).setListener(object : VpaListenerAdapter() { - override fun onAnimationStart(view: View) { - dispatchRemoveStarting(holder) - } + animation.setDuration(getRemoveDuration()).alpha(0f) + .setListener(object : VpaListenerAdapter() { + override fun onAnimationStart(view: View) { + dispatchRemoveStarting(holder) + } - override fun onAnimationEnd(view: View) { - animation.setListener(null) - ViewCompat.setAlpha(view, 1f) - dispatchRemoveFinished(holder) - mRemoveAnimations.remove(holder) - dispatchFinishedWhenDone() - } - }).start() + override fun onAnimationEnd(view: View) { + animation.setListener(null) + ViewCompat.setAlpha(view, 1f) + dispatchRemoveFinished(holder) + mRemoveAnimations.remove(holder) + dispatchFinishedWhenDone() + } + }).start() } override fun animateAdd(holder: ViewHolder): Boolean { @@ -195,8 +206,10 @@ class MultiSelectItemAnimator : SimpleItemAnimator() { }).start() } - override fun animateMove(holder: ViewHolder, fromX: Int, fromY: Int, - toX: Int, toY: Int): Boolean { + override fun animateMove( + holder: ViewHolder, fromX: Int, fromY: Int, + toX: Int, toY: Int + ): Boolean { var fromX = fromX var fromY = fromY val view = holder.itemView @@ -259,8 +272,10 @@ class MultiSelectItemAnimator : SimpleItemAnimator() { }).start() } - override fun animateChange(oldHolder: ViewHolder, newHolder: ViewHolder?, - fromX: Int, fromY: Int, toX: Int, toY: Int): Boolean { + override fun animateChange( + oldHolder: ViewHolder, newHolder: ViewHolder?, + fromX: Int, fromY: Int, toX: Int, toY: Int + ): Boolean { if (oldHolder === newHolder) { // Don't know how to run change animations when the same view holder is re-used. // run a move animation to handle position changes. @@ -294,7 +309,8 @@ class MultiSelectItemAnimator : SimpleItemAnimator() { val newView = newHolder?.itemView if (view != null) { val oldViewAnim = ViewCompat.animate(view).setDuration( - changeDuration) + changeDuration + ) mChangeAnimations.add(changeInfo.oldHolder!!) oldViewAnim.translationX((changeInfo.toX - changeInfo.fromX).toFloat()) oldViewAnim.translationY((changeInfo.toY - changeInfo.fromY).toFloat()) @@ -317,21 +333,22 @@ class MultiSelectItemAnimator : SimpleItemAnimator() { if (newView != null) { val newViewAnimation = ViewCompat.animate(newView) mChangeAnimations.add(changeInfo.newHolder!!) - newViewAnimation.translationX(0f).translationY(0f).setDuration(getChangeDuration()).alpha(1f).setListener(object : VpaListenerAdapter() { - override fun onAnimationStart(view: View) { - dispatchChangeStarting(changeInfo.newHolder, false) - } + newViewAnimation.translationX(0f).translationY(0f).setDuration(getChangeDuration()) + .alpha(1f).setListener(object : VpaListenerAdapter() { + override fun onAnimationStart(view: View) { + dispatchChangeStarting(changeInfo.newHolder, false) + } - override fun onAnimationEnd(view: View) { - newViewAnimation.setListener(null) - ViewCompat.setAlpha(newView, 1f) - ViewCompat.setTranslationX(newView, 0f) - ViewCompat.setTranslationY(newView, 0f) - dispatchChangeFinished(changeInfo.newHolder, false) - mChangeAnimations.remove(changeInfo.newHolder!!) - dispatchFinishedWhenDone() - } - }).start() + override fun onAnimationEnd(view: View) { + newViewAnimation.setListener(null) + ViewCompat.setAlpha(newView, 1f) + ViewCompat.setTranslationX(newView, 0f) + ViewCompat.setTranslationY(newView, 0f) + dispatchChangeFinished(changeInfo.newHolder, false) + mChangeAnimations.remove(changeInfo.newHolder!!) + dispatchFinishedWhenDone() + } + }).start() } } @@ -454,7 +471,7 @@ class MultiSelectItemAnimator : SimpleItemAnimator() { } private fun resetAnimation(holder: ViewHolder) { - AnimatorCompatHelper.clearInterpolator(holder.itemView) + holder.itemView.animate().interpolator = ValueAnimator().interpolator endAnimation(holder) } @@ -578,8 +595,10 @@ class MultiSelectItemAnimator : SimpleItemAnimator() { * * */ - override fun canReuseUpdatedViewHolder(viewHolder: ViewHolder, - payloads: List): Boolean { + override fun canReuseUpdatedViewHolder( + viewHolder: ViewHolder, + payloads: List + ): Boolean { return !payloads.isEmpty() || super.canReuseUpdatedViewHolder(viewHolder, payloads) } diff --git a/multiselection/src/main/java/com/yalantis/multiselection/lib/MultiSelectViewPager.kt b/multiselection/src/main/java/com/yalantis/multiselection/lib/MultiSelectViewPager.kt index 0294a76..7adc9b9 100644 --- a/multiselection/src/main/java/com/yalantis/multiselection/lib/MultiSelectViewPager.kt +++ b/multiselection/src/main/java/com/yalantis/multiselection/lib/MultiSelectViewPager.kt @@ -1,10 +1,10 @@ package com.yalantis.multiselection.lib import android.content.Context -import android.support.v4.view.ViewPager import android.util.AttributeSet import android.util.Log import android.view.MotionEvent +import androidx.viewpager.widget.ViewPager /** * Created by Artem Kholodnyi on 9/2/16. @@ -17,8 +17,8 @@ class MultiSelectViewPager : ViewPager { */ var onClickCallback: (Float, Float) -> Boolean = { x, y -> false } - constructor(context: Context?) : super(context) - constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) + constructor(context: Context) : super(context) + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) private var lastDownX: Float = -1f private var lastDownY: Float = -1f diff --git a/multiselection/src/main/java/com/yalantis/multiselection/lib/ZoomPageTransformer.kt b/multiselection/src/main/java/com/yalantis/multiselection/lib/ZoomPageTransformer.kt index b671672..8ec3591 100644 --- a/multiselection/src/main/java/com/yalantis/multiselection/lib/ZoomPageTransformer.kt +++ b/multiselection/src/main/java/com/yalantis/multiselection/lib/ZoomPageTransformer.kt @@ -1,7 +1,7 @@ package com.yalantis.multiselection.lib -import android.support.v4.view.ViewPager import android.view.View +import androidx.viewpager.widget.ViewPager import com.yalantis.multiselection.lib.util.mix import com.yalantis.multiselection.lib.util.setScaleXY import com.yalantis.multiselection.lib.util.smoothstep diff --git a/multiselection/src/main/java/com/yalantis/multiselection/lib/adapter/BaseAdapter.kt b/multiselection/src/main/java/com/yalantis/multiselection/lib/adapter/BaseAdapter.kt index c122662..c72a326 100644 --- a/multiselection/src/main/java/com/yalantis/multiselection/lib/adapter/BaseAdapter.kt +++ b/multiselection/src/main/java/com/yalantis/multiselection/lib/adapter/BaseAdapter.kt @@ -1,8 +1,8 @@ package com.yalantis.multiselection.lib.adapter -import android.support.annotation.CallSuper -import android.support.v7.widget.RecyclerView import android.view.View +import androidx.annotation.CallSuper +import androidx.recyclerview.widget.RecyclerView /** * Created by Artem Kholodnyi on 9/6/16. diff --git a/multiselection/src/main/java/com/yalantis/multiselection/lib/adapter/BaseLeftAdapter.kt b/multiselection/src/main/java/com/yalantis/multiselection/lib/adapter/BaseLeftAdapter.kt index 65d945d..11174b7 100644 --- a/multiselection/src/main/java/com/yalantis/multiselection/lib/adapter/BaseLeftAdapter.kt +++ b/multiselection/src/main/java/com/yalantis/multiselection/lib/adapter/BaseLeftAdapter.kt @@ -1,21 +1,21 @@ package com.yalantis.multiselection.lib.adapter -import android.support.v7.util.SortedList -import android.support.v7.widget.RecyclerView +import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.SortedList import com.yalantis.multiselection.lib.callbacks.SortedListCallback /** * Created by Artem Kholodnyi on 9/3/16. */ -abstract class BaseLeftAdapter, VH : RecyclerView.ViewHolder> -: BaseAdapter { +abstract class BaseLeftAdapter, VH : RecyclerView.ViewHolder> : + BaseAdapter { lateinit var items: SortedList private constructor() : super() constructor(klass: Class) : super() { - items = SortedList(klass, object: SortedListCallback() {}) + items = SortedList(klass, object : SortedListCallback() {}) } override fun getItemCount(): Int = items.size() diff --git a/multiselection/src/main/java/com/yalantis/multiselection/lib/adapter/BaseRightAdapter.kt b/multiselection/src/main/java/com/yalantis/multiselection/lib/adapter/BaseRightAdapter.kt index 86e6bf8..1a1cfa2 100644 --- a/multiselection/src/main/java/com/yalantis/multiselection/lib/adapter/BaseRightAdapter.kt +++ b/multiselection/src/main/java/com/yalantis/multiselection/lib/adapter/BaseRightAdapter.kt @@ -1,6 +1,7 @@ package com.yalantis.multiselection.lib.adapter -import android.support.v7.widget.RecyclerView +import androidx.recyclerview.widget.RecyclerView + /** * Created by Artem Kholodnyi on 9/6/16. diff --git a/multiselection/src/main/java/com/yalantis/multiselection/lib/adapter/ViewPagerAdapter.kt b/multiselection/src/main/java/com/yalantis/multiselection/lib/adapter/ViewPagerAdapter.kt index f12b327..e45475d 100644 --- a/multiselection/src/main/java/com/yalantis/multiselection/lib/adapter/ViewPagerAdapter.kt +++ b/multiselection/src/main/java/com/yalantis/multiselection/lib/adapter/ViewPagerAdapter.kt @@ -1,11 +1,9 @@ package com.yalantis.multiselection.lib.adapter -import android.support.v4.view.PagerAdapter -import android.support.v4.view.ViewPager -import android.support.v7.widget.RecyclerView import android.view.View import android.view.ViewGroup -import java.io.Serializable +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager /** * Created by Artem Kholodnyi on 8/17/16. @@ -25,7 +23,7 @@ class ViewPagerAdapter(val pageWidth: Float) : PagerAdapter() { return view == `object` } - override fun instantiateItem(container: ViewGroup?, position: Int): Any { + override fun instantiateItem(container: ViewGroup, position: Int): Any { val pager = container as ViewPager val view = getView(position, pager) pager.addView(view) diff --git a/multiselection/src/main/java/com/yalantis/multiselection/lib/callbacks/SortedListCallback.kt b/multiselection/src/main/java/com/yalantis/multiselection/lib/callbacks/SortedListCallback.kt index 93d6c59..bcbb636 100644 --- a/multiselection/src/main/java/com/yalantis/multiselection/lib/callbacks/SortedListCallback.kt +++ b/multiselection/src/main/java/com/yalantis/multiselection/lib/callbacks/SortedListCallback.kt @@ -1,11 +1,11 @@ package com.yalantis.multiselection.lib.callbacks -import android.support.v7.util.SortedList.Callback +import androidx.recyclerview.widget.SortedList /** * Created by Artem Kholodnyi on 9/4/16. */ -open class SortedListCallback> : Callback() { +open class SortedListCallback> : SortedList.Callback() { override fun areItemsTheSame(item1: T, item2: T): Boolean { return item1 == item2 diff --git a/multiselection/src/main/java/com/yalantis/multiselection/lib/util/Extesions.kt b/multiselection/src/main/java/com/yalantis/multiselection/lib/util/Extesions.kt index cb316cc..b72918e 100644 --- a/multiselection/src/main/java/com/yalantis/multiselection/lib/util/Extesions.kt +++ b/multiselection/src/main/java/com/yalantis/multiselection/lib/util/Extesions.kt @@ -15,8 +15,8 @@ fun View.removeFromParent() { } } -inline fun T.afterMeasured(crossinline f: T.() -> Unit) { - viewTreeObserver.addOnGlobalLayoutListener(object: ViewTreeObserver.OnGlobalLayoutListener { +inline fun T.afterMeasured(crossinline f: T.() -> Unit) { + viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { override fun onGlobalLayout() { if (measuredHeight > 0 && measuredWidth > 0) { viewTreeObserver.removeOnGlobalLayoutListener(this) diff --git a/multiselection/src/main/res/drawable/yal_ms_left_side.xml b/multiselection/src/main/res/drawable/yal_ms_left_side.xml index 5fc16e5..55f006d 100644 --- a/multiselection/src/main/res/drawable/yal_ms_left_side.xml +++ b/multiselection/src/main/res/drawable/yal_ms_left_side.xml @@ -1,11 +1,14 @@ - - - - - - + + + + + + diff --git a/multiselection/src/main/res/drawable/yal_ms_right_side.xml b/multiselection/src/main/res/drawable/yal_ms_right_side.xml index d1baa04..4c40a6a 100644 --- a/multiselection/src/main/res/drawable/yal_ms_right_side.xml +++ b/multiselection/src/main/res/drawable/yal_ms_right_side.xml @@ -1,10 +1,13 @@ - + android:right="@dimen/yal_ms_divider_width_half_negative" + android:top="@dimen/yal_ms_divider_width_half_negative"> - + diff --git a/multiselection/src/main/res/drawable/yal_ms_round_left.xml b/multiselection/src/main/res/drawable/yal_ms_round_left.xml index 5908ffc..96c8797 100644 --- a/multiselection/src/main/res/drawable/yal_ms_round_left.xml +++ b/multiselection/src/main/res/drawable/yal_ms_round_left.xml @@ -2,8 +2,10 @@ - - + + \ No newline at end of file diff --git a/multiselection/src/main/res/drawable/yal_ms_round_right.xml b/multiselection/src/main/res/drawable/yal_ms_round_right.xml index 9104696..588fdaf 100644 --- a/multiselection/src/main/res/drawable/yal_ms_round_right.xml +++ b/multiselection/src/main/res/drawable/yal_ms_round_right.xml @@ -2,8 +2,10 @@ - - + + \ No newline at end of file diff --git a/multiselection/src/main/res/layout/yal_ms_multiselect.xml b/multiselection/src/main/res/layout/yal_ms_multiselect.xml index d34e43a..7c93238 100644 --- a/multiselection/src/main/res/layout/yal_ms_multiselect.xml +++ b/multiselection/src/main/res/layout/yal_ms_multiselect.xml @@ -1,11 +1,11 @@ + android:layout_width="match_parent" + android:layout_height="match_parent"> - + diff --git a/multiselection/src/main/res/layout/yal_ms_page_left.xml b/multiselection/src/main/res/layout/yal_ms_page_left.xml index 786ea13..a56b683 100644 --- a/multiselection/src/main/res/layout/yal_ms_page_left.xml +++ b/multiselection/src/main/res/layout/yal_ms_page_left.xml @@ -4,17 +4,16 @@ android:layout_height="match_parent" android:background="@drawable/yal_ms_left_side"> - + android:layout_marginEnd="@dimen/yal_ms_knob_width_half" /> + android:layout_gravity="end|center_vertical" + android:background="@drawable/yal_ms_round_left" /> \ No newline at end of file diff --git a/multiselection/src/main/res/layout/yal_ms_page_right.xml b/multiselection/src/main/res/layout/yal_ms_page_right.xml index e6bb616..b9f3e36 100644 --- a/multiselection/src/main/res/layout/yal_ms_page_right.xml +++ b/multiselection/src/main/res/layout/yal_ms_page_right.xml @@ -4,17 +4,16 @@ android:layout_height="match_parent" android:background="@drawable/yal_ms_right_side"> - + android:layout_marginStart="@dimen/yal_ms_knob_width_half" /> + android:layout_gravity="start|center_vertical" + android:background="@drawable/yal_ms_round_right" /> diff --git a/multiselection/src/main/res/values/ids.xml b/multiselection/src/main/res/values/ids.xml index 8cdf61b..ef6a0b9 100644 --- a/multiselection/src/main/res/values/ids.xml +++ b/multiselection/src/main/res/values/ids.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file From 52d59ed6d90c4001408b076c5faefd9a92e6dfc0 Mon Sep 17 00:00:00 2001 From: dmorozov Date: Mon, 19 Sep 2022 12:09:43 +0300 Subject: [PATCH 2/3] Update release keystore.jks - Re-generate release keystore - Update credentials for newly generated keystore --- app/build.gradle | 8 ++++---- keys/keystore.jks | Bin 2178 -> 2675 bytes 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4d031d7..0cc557e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -19,10 +19,10 @@ android { signingConfigs { release { -// storeFile file(RELEASE_STORE_FILE) -// storePassword RELEASE_KEYSTORE_PASSWORD -// keyAlias RELEASE_KEY_ALIAS_NAME -// keyPassword RELEASE_KEY_ALIAS_PASSWORD + storeFile file("$project.rootDir/keys/keystore.jks") + storePassword "CevXpj2w6Pd_Updrkpw4" + keyAlias "multiselect" + keyPassword "CevXpj2w6Pd_Updrkpw4" } } diff --git a/keys/keystore.jks b/keys/keystore.jks index 391a1c53eb0eddbcbf0fcddb937a772ca008d687..700b01c93f3afea100f63d781511b11c48319ea5 100644 GIT binary patch literal 2675 zcma)+S5y-U5{A=AZbIlmkYg+F#riLa>oJ7RRkV-u_bVI9{T~++0R-jIxsL5aJ)FlM2Nw^{2}k&6 zMdGj!6wgZKuXH=ynS^=Jz5K~5lGd%qO+g@eeh?6iLqh-h_eT(%3xJb^!d)0AfbL)j zPzl1%=BOVb|9!~|;7P^1Qr;&(=#cl7*+&+zS82oD=yxHZCE=Myjb^vJQ9ej~3^dgB zE+@aJiGT9~SNg$J{7H}Q*F(?ei~Fv9Kjx&%SuV^uxscM_>~Vk#572rRSk12|d_ggp z=}x;jL6@_bEEE!&em+u~_2Q>Nqfec!hVmn?_A~82&Ea<>`f+IukBl{hN!aQydRbJ5 zNQ&7}$Zz2EX4)H7cC2pwcjA7BLajvRGjLa&scIDIO z^3aY&U#C-?Q58$_aN$WeSn1Eq%~P)~o+8wV(FE0P3OsvH1Q<@oaUfZyRwe|W8`|j| z;z*7kQ4f3jux*>Yl|&q0cM6Q(apVhoCCJfe zd;f2DQbyBqI_pUuZiKUAVT%@H37QnkkF6pTcRNGcI!oFyf%|Df@V+jrctcD^Z5*3%Pvc~wUt^?h*a~`){7Un zM&3D8T2oo=B5DMfuspcxDn0lltWzcOdPyZ@ZwUI*SAlg_OANAO|FFYUBOcCd3DG(y zqt!e<$3AeHLBD7qbsW|!q@;t6M@FS~2U?I7B>cHjQ}%#Y0}4!TM$Opf^JH`fGmpe2**77jaf5 zdD_S^BSwV97S-(7RBZ;)_H~ldd^;}>p?7z5s$19Z>lUJauL`|_<$j{p3bLAAm1!0^ zj_~Ew-)metvFc7*of&dDt~n|$heU`S?2Gys`7mq1F#>$~f}t=YP&`WHvpMn3CzBz; z4^if;UbkN2e%8d58^Rtugqj;kZhT2LEr@6IqTGR)s#`=Uxaz%!cfQ!`$}b*zM{=Cv zHTVr{yKB0epJ`QFJP>=l>d+yCWRfmrB5(tnW%#kSa*p=i*L0D5v&~7R#lJv6-V+(qQ_v!@sSgu7c{&v_G}-Fg`TY_@75&XR zu3@B!@mY<`<@>4v!WK_2c(Yyi*dMR)nUyiYl(+_2^@NWzFVK0%RMDsMURBgf%hflM-AXT6VyyyHL2gK6*48&MJk{aSYaet` zZz9EaU^@vdZmn=A_ZNOK1(g+rTzZ1qTx)59DL5Au{{neTAvUOW7X8d=AL0gMe7q<6&;33E7 zaR&)Eia2T{oa~>tgrn3%r49gm0l@$tKoEcixD0ULpWFeifFPXoKWD;fD2Sjf&DR~R zrm3lc*COC?YIp(;M~7JbIf6m+=n&#QG5`Sq`%UW~1^B-LJKXFVfk8Co_Do@wnON4a zX7Szn|4(3BbbxIPlbS!)_iwI@b-X3qq=Op{kQ1N+)K!`6Wo%fCQ@G6&;Pyly<{^OD zrRbA>uB^{*{!wLqOxZ`pbjxvWw0vFaAT!6F`8A`>$YSnPO~hW#sKPF-F)nVvG(}%o zDuMhH)-6p111X_bJU?XCi=F$HgW{zSkG0Cr=+pSmHJV6C2u%+1@YcVrevzU^#8jj3#H6OaJ2ZPh=FPv}b{ceR7< zcQ3>tMI*Sx5wDwH&R$LxHO8k(Rw$L#cJjPZ$QUm<>|((+I5hcUyi-9v_#F8tP0%9t z;Q5havXE9%!f={oHq@C3V>_GnRW_^^I$G;n9gO$flXAc8f83w8yuQAfzo=T*l?!eK zQP;6b@)o~1do)g&XIq=O{~d^EUoM9n_(*F zd%J~sJRX&dFw@L*#K+h@z<}TfP^sdf$}Mlw*h^xMqa!%6i9#kl<%7QWvofZM=_H?G zbzb?;Hs~%fB74?p5pN(OWU@v$7TdGNb5u^MpduUD;T%kKnXdbLLu&ScSz-9pnU|jM zPA@Kj>vx4p?EKRF$;o9QuhUd|4Bp`mchE=;Z)>2Bm_6)M-YDJTRlAI*$~|qmm-;+a z?K|w2Xj}Tk5*l^TSV4uD+5j?b&ZBDM4s^lWF~!uW1J|8ii-Q9XQ-qZFklzrpJRh=$ z1FwGaSCuEb73=X*d~79A@!QNJvw<70N}(^-5iD!ZCyAy_i`TPPHYpXS871?CJfsDL=0WqY%-v9sr literal 2178 zcmb_c*IUzx7ED4CI*1Vv1f;0+@C!Xel#cY?5eNh|lmscRp(zl9C{5R}Qa6YoMM@}9 zxClydUjczYkVAm~0W>t21RN3% zXEEM*5C{eVlA-&65S&jH4u*nNAR=He3tTSj3t%d;C5^cay2II zS4<{aw0qqr8d2!9;Sr6@@U=ETc1Pa zw~ReW{2^JXu0i;O30xKM^K50P23Lh9SPrQxj$TQV_j%^iKNIjcL!UT=l$iMnf;3Bo2*;rAwb_YYc~Va+#s@z8tra|ik2<(^1zn+Y z8!Ezm&!Eagd9(Nk^7ebGqRQNocmlmB+hMzKt+!|5OmDQlb}hu+s%aDyQiJ>$SLfTp zBoeSq*zmG^xS`a+(FAAaf}y&akEUHIHO`c7ldUV!L`%Ql6C+W$Tvzc?oKE%gtO+sg zZ~E4ZYT=PO*1t{Xnl!a4cNfh%XMl8#^Q85C=XY#BbDEuyzl@EvOC|Ux6{8|N`^sK> zgGfHLv3eU#o_Fzk(>XfNbGQwMpS~?|Pq>ZB(bm3EPGBwm@J<_W=J@lMH{Yu3H?h3l zd8zpp!DW)tokJv)zW&48`&xat0nAmY@#3tU7YoUMCs5AS@<&teUQOKq!$5ak|046} zPMk=*wZ+&{V}Q;&bxazjG(G)1kSY8h=sI^aEHBWrBo?pTjh|W7lddUheRh$Shamwi z`NQ-sqTDP87PFajVPBXKV*c+f0v5wiC zVd?3!b_x{WoK_HJij{tDIQ5ca?!t2zb+>N9jWyrq5A>IJMAmtWB|;-uzakPqLUWa_r?)Q9JqK zBFi^c(sEtnf_;blnDfnwmU5Qu{#f)`n6Yr2UUO%3M~Gk=g^dGGY*^S&vQibcP#yKG z6V)N7`6jGf!a|^LM?y*Ol5PnJ#-36>^US{6k>WTll^~WyMn|n63MO-VU=Q~@)4p+V z8~*(obFC!HiVf_aFFc^^Op|e%=03b(CcHIh74xo*x<(`pCZ&II>N_5M$z|oCXs0N@ z0Nd78R5V#=)UB;Vg=Jn=A)f)CP#?X!FlChOlQ=$WyM71rxjSPs;#ZA>0QPF_jMs0b zR%=hcMR`mTe5e>S<->5fW63ZvGddyVIZ%q^JdT0i)8-6A{<6Qe$Vy?*Kx#ytOfyyC0bxhj2bW&?ANmGNuRvubH~ z!D+f!PfPj3S()<>I(|QkYffRW;T$ZkiKsi-B`!U_fmwL0BR@A{ANJB&_=p<$)#VX5 z^Pp8B=%#;KY&9-rA1@pJ6#n_aR+qwbYF>Czhuv`2gMoi~5$1{10ni{27Y0b?(gTtq zCuv*|Fa!dPx5DB8K{&4p5DeyrfdCs6Kfnv;a)ZJV5I19#@ZtQBa3kPm1bjp! z5hVf$|1Iz%c)YM-SVA;D3UwS1`&;5d2pdO62ZzhrTp@-LaRd?`kQEn1=>lj?O_Y`< z8l~@jTv!v(2LLpn`#<6TyDk|l|L=1S+ny^KEDQpY!F-TpFc`$(5z7f}(;uUi*6;We z!uVu^+d8V5t390pi;<_c=NVTksN+HDdt<7iPPgZ^O!m>$66rE7iFGe_g%US49+uew zoAbRwU5^$M8h3XMz#DNT`%IVYIJDTU@Z zRvVQJ8EWamtc}t#7+XGJ+XD{T?B+Aj+omE+rt4gR9E1xD0++}ECjsfhz@&wsV$fr6 zi>2N@S`Q#$|Li~CaI<_-X01x?-zFaZ#G#2`5Lp_ZAvCTQhwPHAiZ#fD58WNxAnRLA z&v~<!v zzRz&m3cPe6J z%*B2nhn9&Bl3}=wRL(;|E#Tm Date: Thu, 22 Sep 2022 11:54:12 +0300 Subject: [PATCH 3/3] Update library release version tag - Update README.md - Update library release version tag --- README.md | 6 +----- app/build.gradle | 6 +++--- multiselection/build.gradle | 4 ++-- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 78df2f1..1d4598b 100644 --- a/README.md +++ b/README.md @@ -32,14 +32,10 @@ allprojects { Add the dependency: ```Groovy dependencies { - compile 'com.github.yalantis:multi-selection:v0.1' + implementation 'com.github.yalantis:multi-selection:v0.2' } ``` -## How to use this library - -Instructions can be found [here](https://yalantis.com/blog/how-we-created-a-multiselection-solution-for-android/) in section How to use MultiSelect - ## Let us know! We’d be really happy if you sent us links to your projects where you use our component. Just send an email to github@yalantis.com And do let us know if you have any questions or suggestion regarding the animation. diff --git a/app/build.gradle b/app/build.gradle index 0cc557e..7528da8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,8 +8,8 @@ android { applicationId "com.yalantis.multiselect.demo" targetSdkVersion 33 minSdkVersion 17 - versionCode 1 - versionName "1.0" + versionCode 2 + versionName "1.1" } compileOptions { @@ -41,7 +41,7 @@ dependencies { implementation project(path: ':multiselection') // in real project use this: - //compile 'com.github.yalantis:multi-selection:v0.1' +// implementation 'com.github.yalantis:multi-selection:v0.2' implementation "androidx.appcompat:appcompat:$androidx_version" implementation "androidx.recyclerview:recyclerview:$androidx_recycler_view_version" diff --git a/multiselection/build.gradle b/multiselection/build.gradle index e69a171..832ff5c 100644 --- a/multiselection/build.gradle +++ b/multiselection/build.gradle @@ -8,8 +8,8 @@ android { defaultConfig { minSdkVersion 17 targetSdkVersion 33 - versionCode 1 - versionName "1.0" + versionCode 2 + versionName "1.1" } buildTypes { release {