From 141376c835204f1f1c33ddfbd365a8162e022a9c Mon Sep 17 00:00:00 2001
From: GamblingDog <125975490@qq.com>
Date: 星期二, 09 九月 2025 11:12:01 +0800
Subject: [PATCH] 交付

---
 app/src/main/res/layout/item_select_driver.xml                                  |   55 ++
 app/src/main/java/com/xianning/driver/ui/main/GetOrderFragment.kt               |    6 
 app/src/main/java/com/xianning/driver/ui/adapter/MainAdapter.kt                 |   12 
 app/src/main/res/mipmap-xxhdpi/default_driver.png                               |    0 
 app/src/main/java/com/xianning/driver/ui/to_city/GetCityFragment.kt             |   46 +
 app/src/main/java/com/xianning/driver/base/MyApplication.kt                     |    2 
 app/src/main/res/layout/activity_trip_cargo.xml                                 |   68 ++
 app/src/main/java/com/xianning/driver/ui/to_city/SelectDriverActivity.kt        |  104 ++++
 app/src/main/java/com/xianning/driver/bean/LineDriverBean.kt                    |   14 
 app/src/main/res/mipmap-xxhdpi/bz_money_2.png                                   |    0 
 app/src/main/java/com/xianning/driver/base/gaode/BaiduUtils.java                |    2 
 app/src/main/java/com/xianning/driver/ui/main/small_cargo/SmallCargoActivity.kt |  765 +++++++++++++++++++++++++++++
 app/src/main/res/layout/activity_mine.xml                                       |   86 +-
 app/src/main/res/layout/view_btn_sure_driver.xml                                |   32 +
 app/src/main/java/com/xianning/driver/base/MyBaseActivity.java                  |    9 
 .idea/gradle.xml                                                                |    1 
 build.gradle                                                                    |    4 
 app/src/main/java/com/xianning/driver/ui/to_city/TripCityActivity.kt            |    6 
 app/src/main/res/drawable/bg_white_right6.xml                                   |    5 
 app/build.gradle                                                                |    2 
 app/src/main/java/com/xianning/driver/netUtls/Api.java                          |   10 
 app/src/main/java/com/xianning/driver/ui/to_city/SelectPeopleActivity.kt        |    7 
 app/release/xianning-1.98-2025-08-28.apk                                        |    0 
 settings.gradle                                                                 |    2 
 app/src/main/res/mipmap-xxhdpi/ic_warning.png                                   |    0 
 app/src/main/res/layout/item_small_user_img.xml                                 |   13 
 app/src/main/res/mipmap-xxhdpi/bz_money.png                                     |    0 
 app/src/main/AndroidManifest.xml                                                |    6 
 app/src/main/java/com/xianning/driver/ui/main/ReassignActivity.kt               |    6 
 app/src/main/java/com/xianning/driver/ui/pub/BecomeDriverActivity.kt            |    4 
 app/src/main/java/com/xianning/driver/ui/main/TripActivity.kt                   |    7 
 app/src/main/java/com/xianning/driver/ui/main/small_cargo/SmallOverActivity.kt  |  170 ++++++
 /dev/null                                                                       |   49 -
 app/src/main/res/drawable/bg_cj_bz.xml                                          |    4 
 app/release/output.json                                                         |    2 
 app/src/main/java/com/xianning/driver/ui/adapter/SelectDriverAdapter.kt         |   32 +
 app/src/main/java/com/xianning/driver/ui/DialogUtil.kt                          |    1 
 app/src/main/java/com/xianning/driver/ui/adapter/SelectPeopleAdapter.kt         |    2 
 app/src/main/java/com/xianning/driver/ui/main/MainActivity.kt                   |    6 
 39 files changed, 1,399 insertions(+), 141 deletions(-)

diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 92fbfc8..d0bb5dc 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -11,7 +11,6 @@
         <option name="modules">
           <set>
             <option value="$PROJECT_DIR$" />
-            <option value="$PROJECT_DIR$/ChipsLayoutManager" />
             <option value="$PROJECT_DIR$/app" />
             <option value="$PROJECT_DIR$/easyfloat" />
             <option value="$PROJECT_DIR$/rxnetty" />
diff --git a/ChipsLayoutManager/.gitignore b/ChipsLayoutManager/.gitignore
deleted file mode 100644
index 796b96d..0000000
--- a/ChipsLayoutManager/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/build
diff --git a/ChipsLayoutManager/build.gradle b/ChipsLayoutManager/build.gradle
deleted file mode 100644
index 4f9a2c9..0000000
--- a/ChipsLayoutManager/build.gradle
+++ /dev/null
@@ -1,193 +0,0 @@
-plugins {
-    id "com.jfrog.bintray" version "1.7.3"
-    id "com.github.dcendents.android-maven" version "1.5"
-}
-
-apply plugin: 'com.android.library'
-
-//upload settings to bintray
-ext {
-    bintrayRepo = 'widget'
-    bintrayName = 'ChipsLayoutManager'
-
-    libraryName = 'ChipsLayoutManager'
-    publishedGroupId = 'com.beloo.widget'
-    artifact = 'ChipsLayoutManager'
-    libraryVersion = "rootProject.ext.libraryVersion"
-
-    libraryDescription = 'Android. A custom layout manager for RecyclerView which mimicric TextView span behaviour, flow layouts behaviour with support of amazing recyclerView features'
-
-    siteUrl = 'https://github.com/BelooS/ChipsLayoutManager'
-    gitUrl = 'https://github.com/BelooS/ChipsLayoutManager.git'
-
-    developerId = 'beloo'
-    developerName = 'Beloy Oleg'
-    developerEmail = 'beloyoleg@gmail.com'
-
-    licenseName = 'The Apache Software License, Version 2.0'
-    licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
-    allLicenses = ["Apache-2.0"]
-}
-
-android {
-    compileSdkVersion 29
-    buildToolsVersion "29.0.3"
-
-    testBuildType "debug"
-
-    defaultConfig {
-        minSdkVersion 24
-        targetSdkVersion 29
-        versionCode 10
-        versionName "1.0.1"
-
-        testApplicationId "com.beloo.chipslayoutmanager.test"
-        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
-
-    }
-    buildTypes {
-
-        all {
-            buildConfigField("boolean", "isLogEnabled", "false")
-        }
-
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
-        }
-
-        development {
-            buildConfigField("boolean", "isLogEnabled", "true")
-        }
-    }
-
-    sourceSets {
-        androidTest {
-            res.srcDirs = ['src/androidTest/res']
-        }
-    }
-
-}
-
-task androidJavadocs(type: Javadoc) {
-    source = android.sourceSets.main.java.srcDirs
-}
-
-task androidJavadocsJar(type: Jar) {
-    classifier = 'javadoc'
-    baseName = artifact
-    from androidJavadocs.destinationDir
-}
-
-task androidSourcesJar(type: Jar) {
-    classifier = 'sources'
-    baseName = artifact
-    from android.sourceSets.main.java.srcDirs
-}
-
-artifacts {
-    archives androidSourcesJar
-    archives androidJavadocsJar
-}
-
-
-def supportVersion = "25+";
-
-dependencies {
-    compile fileTree(dir: 'libs', include: ['*.jar'])
-    testCompile 'junit:junit:4.12'
-
-    compile "com.android.support:appcompat-v7:$supportVersion"
-    compile "com.android.support:recyclerview-v7:$supportVersion"
-
-    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
-    androidTestCompile 'com.android.support.test:runner:0.5'
-    androidTestCompile "com.android.support:support-annotations:$supportVersion"
-    androidTestCompile 'pl.pragmatists:JUnitParams:1.0.5'
-}
-
-group = publishedGroupId // Maven Group ID for the artifact
-version = libraryVersion
-
-install {
-    repositories.mavenInstaller {
-        // This generates POM.xml with proper parameters
-        pom {
-            project {
-                packaging 'aar'
-                groupId publishedGroupId
-                artifactId artifact
-                version libraryVersion
-
-                // Add your description here
-                name libraryName
-                description libraryDescription
-                url siteUrl
-
-                // Set your license
-                licenses {
-                    license {
-                        name licenseName
-                        url licenseUrl
-                    }
-                }
-                developers {
-                    developer {
-                        id developerId
-                        name developerName
-                        email developerEmail
-                    }
-                }
-                scm {
-                    connection gitUrl
-                    developerConnection gitUrl
-                    url siteUrl
-
-                }
-            }.writeTo("$buildDir/poms/pom-default.xml")
-        }
-    }
-}
-
-Properties properties = new Properties()
-properties.load(project.rootProject.file('local.properties').newDataInputStream())
-
-bintray {
-    user = properties.getProperty("bintray.user")
-    key = properties.getProperty("bintray.apikey")
-
-    configurations = ['archives'] //When uploading configuration files
-
-    dryRun = false //[Default: false] Whether to run this as dry-run, without deploying
-    publish = true //[Default: false] Whether version should be auto published after an upload
-    override = true //[Default: false] Whether to override version artifacts already published
-
-    //Package configuration. The plugin will use the repo and name properties to check if the package already exists. In that case, there's no need to configure the other package properties (like userOrg, desc, etc).
-    pkg {
-        repo = bintrayRepo
-        name = bintrayName
-        desc = libraryDescription
-        websiteUrl = siteUrl
-        issueTrackerUrl = 'https://github.com/BelooS/ChipsLayoutManager/issues'
-        vcsUrl = gitUrl
-        licenses = allLicenses
-        publish = true
-        publicDownloadNumbers = true
-
-        githubRepo = 'BelooS/ChipsLayoutManager'
-        githubReleaseNotesFile = 'README.md'
-
-        //Optional version descriptor
-        version {
-            name = libraryVersion //Bintray logical version name
-            desc = '' //Optional - Version-specific description'
-            vcsTag = libraryVersion
-
-            gpg {
-                sign = true //Determines whether to GPG sign the files. The default is false
-                passphrase = properties.getProperty("bintray.gpg.password")
-                //Optional. The passphrase for GPG signing'
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/ChipsLayoutManager/proguard-rules.pro b/ChipsLayoutManager/proguard-rules.pro
deleted file mode 100644
index 66b1246..0000000
--- a/ChipsLayoutManager/proguard-rules.pro
+++ /dev/null
@@ -1,31 +0,0 @@
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in C:\Users\Beloo\AppData\Local\Android\sdk/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the proguardFiles
-# directive in build.gradle.
-#
-# For more details, see
-#   http://developer.android.com/guide/developing/tools/proguard.html
-
-# Add any project specific keep options here:
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-#   public *;
-#}
-
-##
-## Disable logging
-##
-
-# Disable Android logging for release builds
--assumenosideeffects class android.util.Log {
-    public static boolean isLoggable(java.lang.String, int);
-    public static int v(...);
-    public static int i(...);
-    public static int w(...);
-    public static int d(...);
-    public static int e(...);
-}
diff --git a/ChipsLayoutManager/src/androidTest/java/com/beloo/widget/chipslayoutmanager/ParamsType.java b/ChipsLayoutManager/src/androidTest/java/com/beloo/widget/chipslayoutmanager/ParamsType.java
deleted file mode 100644
index 5c20039..0000000
--- a/ChipsLayoutManager/src/androidTest/java/com/beloo/widget/chipslayoutmanager/ParamsType.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.beloo.widget.chipslayoutmanager;
-
-public enum ParamsType {
-    VALID, INVALID
-}
diff --git a/ChipsLayoutManager/src/androidTest/java/com/beloo/widget/chipslayoutmanager/gravity/BottomGravityModifierTest.java b/ChipsLayoutManager/src/androidTest/java/com/beloo/widget/chipslayoutmanager/gravity/BottomGravityModifierTest.java
deleted file mode 100644
index c41b5c6..0000000
--- a/ChipsLayoutManager/src/androidTest/java/com/beloo/widget/chipslayoutmanager/gravity/BottomGravityModifierTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-
-import com.beloo.widget.chipslayoutmanager.ParamsType;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import static com.beloo.widget.chipslayoutmanager.ParamsType.VALID;
-import static org.junit.Assert.assertEquals;
-
-/** test for {@link BottomGravityModifier}*/
-@RunWith(Parameterized.class)
-public class BottomGravityModifierTest extends GravityModifierTest {
-
-    public BottomGravityModifierTest(ParamsType paramsType, int minTop, int maxBottom, Rect testRect, Rect expectedResultRect) {
-        super(paramsType, minTop, maxBottom, testRect, expectedResultRect);
-    }
-
-    @Parameterized.Parameters
-    public static Iterable<Object[]> data() {
-        List<Object[]> list = new ArrayList<>();
-        list.addAll(Arrays.asList(new Object[][]{
-                {VALID, 0, 100, new Rect(0, 20, 0, 100), new Rect(0, 20, 0, 100)},
-                {VALID, 0, 100, new Rect(0, 20, 0, 80), new Rect(0, 40, 0, 100)},
-                {VALID, 0, 100, new Rect(0, 0, 0, 40), new Rect(0, 60, 0, 100)},
-                {VALID, 0, 100, new Rect(0, 10, 0, 20), new Rect(0, 90, 0, 100)},
-                {VALID, 0, 100, new Rect(0, 0, 0, 100), new Rect(0, 0, 0, 100)},
-        }));
-        list.addAll(GravityDataProvider.getInvalidGravityModifierParams());
-        return list;
-    }
-
-    @Override
-    protected IGravityModifier getGravityModifier() {
-        return new BottomGravityModifier();
-    }
-
-
-}
diff --git a/ChipsLayoutManager/src/androidTest/java/com/beloo/widget/chipslayoutmanager/gravity/CenterInRowGravityModifierTest.java b/ChipsLayoutManager/src/androidTest/java/com/beloo/widget/chipslayoutmanager/gravity/CenterInRowGravityModifierTest.java
deleted file mode 100644
index aca3e60..0000000
--- a/ChipsLayoutManager/src/androidTest/java/com/beloo/widget/chipslayoutmanager/gravity/CenterInRowGravityModifierTest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-import com.beloo.widget.chipslayoutmanager.ParamsType;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import static com.beloo.widget.chipslayoutmanager.ParamsType.VALID;
-
-@RunWith(Parameterized.class)
-public class CenterInRowGravityModifierTest extends GravityModifierTest {
-
-    @Parameterized.Parameters
-    public static Iterable<Object[]> data() {
-        List<Object[]> list = new ArrayList<>();
-        list.addAll(Arrays.asList(new Object[][] {
-                {VALID, 0, 100, new Rect(0, 20, 0, 100), new Rect(0, 10, 0, 90)},
-                {VALID, 0, 100, new Rect(0, 20, 0, 80), new Rect(0, 20, 0, 80)},
-                {VALID, 0, 100, new Rect(0, 0, 0, 40), new Rect(0, 30, 0, 70)},
-                {VALID, 0, 100, new Rect(0, 10, 0, 20), new Rect(0, 45, 0, 55)},
-                {VALID, 0, 100, new Rect(0, 0, 0, 100), new Rect(0, 0, 0, 100)}
-        }));
-        list.addAll(GravityDataProvider.getInvalidGravityModifierParams());
-        return list;
-    }
-
-    public CenterInRowGravityModifierTest(ParamsType paramsType, int minTop, int maxBottom, Rect testRect, Rect expectedResultRect) {
-        super(paramsType, minTop, maxBottom, testRect, expectedResultRect);
-    }
-
-    @Override
-    protected IGravityModifier getGravityModifier() {
-        return new CenterInRowGravityModifier();
-    }
-
-}
diff --git a/ChipsLayoutManager/src/androidTest/java/com/beloo/widget/chipslayoutmanager/gravity/GravityDataProvider.java b/ChipsLayoutManager/src/androidTest/java/com/beloo/widget/chipslayoutmanager/gravity/GravityDataProvider.java
deleted file mode 100644
index bf21c9b..0000000
--- a/ChipsLayoutManager/src/androidTest/java/com/beloo/widget/chipslayoutmanager/gravity/GravityDataProvider.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-import java.util.Arrays;
-import java.util.Collection;
-
-import static com.beloo.widget.chipslayoutmanager.ParamsType.INVALID;
-
-class GravityDataProvider {
-    static Collection<Object[]> getInvalidGravityModifierParams() {
-        return Arrays.asList(new Object[][]{
-                //start lower than minStart
-                {INVALID, 0, 100, new Rect(0, -50, 0, 0), new Rect(0, 0, 0, 0)},
-                //start lower than minStart
-                {INVALID, 20, 100, new Rect(0, 10, 0, 0), new Rect(0, 0, 0, 0)},
-                //end bigger than maxEnd
-                {INVALID, 20, 100, new Rect(0, 20, 0, 120), new Rect(0, 0, 0, 0)}
-        });
-    }
-}
diff --git a/ChipsLayoutManager/src/androidTest/java/com/beloo/widget/chipslayoutmanager/gravity/GravityModifierTest.java b/ChipsLayoutManager/src/androidTest/java/com/beloo/widget/chipslayoutmanager/gravity/GravityModifierTest.java
deleted file mode 100644
index 0ad5a0a..0000000
--- a/ChipsLayoutManager/src/androidTest/java/com/beloo/widget/chipslayoutmanager/gravity/GravityModifierTest.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-
-import com.beloo.widget.chipslayoutmanager.ParamsType;
-
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-
-import static com.beloo.widget.chipslayoutmanager.ParamsType.INVALID;
-import static com.beloo.widget.chipslayoutmanager.ParamsType.VALID;
-import static org.junit.Assert.assertEquals;
-
-@RunWith(Parameterized.class)
-abstract class GravityModifierTest {
-
-    private IGravityModifier gravityModifier;
-
-    @Before
-    public void setUp() {
-        gravityModifier = getGravityModifier();
-    }
-
-    protected abstract IGravityModifier getGravityModifier();
-
-    private ParamsType paramsType;
-    private int minTop;
-    private int maxBottom;
-    private Rect testRect;
-    private Rect expectedResultRect;
-
-    GravityModifierTest(ParamsType paramsType, int minTop, int maxBottom, Rect testRect, Rect expectedResultRect) {
-        this.paramsType = paramsType;
-        this.minTop = minTop;
-        this.maxBottom = maxBottom;
-        this.testRect = testRect;
-        this.expectedResultRect = expectedResultRect;
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void invalidDataForModifierShouldThrowIllegalArgumentException() {
-        Assume.assumeTrue(paramsType.equals(INVALID));
-        gravityModifier.modifyChildRect(minTop, maxBottom, testRect);
-    }
-
-    @Test
-    public void modifierShouldAlignInputRect() {
-        Assume.assumeTrue(paramsType.equals(VALID));
-        Rect resultRect = gravityModifier.modifyChildRect(minTop, maxBottom, testRect);
-        assertEquals(expectedResultRect, resultRect);
-    }
-
-}
\ No newline at end of file
diff --git a/ChipsLayoutManager/src/androidTest/java/com/beloo/widget/chipslayoutmanager/gravity/RowGravityModifiersFactoryTest.java b/ChipsLayoutManager/src/androidTest/java/com/beloo/widget/chipslayoutmanager/gravity/RowGravityModifiersFactoryTest.java
deleted file mode 100644
index a0b07a8..0000000
--- a/ChipsLayoutManager/src/androidTest/java/com/beloo/widget/chipslayoutmanager/gravity/RowGravityModifiersFactoryTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.view.Gravity;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertTrue;
-
-public class RowGravityModifiersFactoryTest {
-
-    private RowGravityModifiersFactory factory = new RowGravityModifiersFactory();
-
-    @Test
-    public void factoryShouldReturnCenterModifierForCenterGravity() {
-        IGravityModifier gravityModifier = factory.getGravityModifier(Gravity.CENTER);
-        assertTrue(gravityModifier instanceof CenterInRowGravityModifier);
-    }
-
-    @Test
-    public void factoryShouldReturnCenterModifierForCenterVerticalGravity() {
-        IGravityModifier gravityModifier = factory.getGravityModifier(Gravity.CENTER_VERTICAL);
-        assertTrue(gravityModifier instanceof CenterInRowGravityModifier);
-    }
-
-    @Test
-    public void factoryShouldReturnTopModifierForTopGravity() {
-        IGravityModifier gravityModifier = factory.getGravityModifier(Gravity.TOP);
-        assertTrue(gravityModifier instanceof TopGravityModifier);
-    }
-
-    @Test
-    public void factoryShouldReturnBottomModifierForBottomGravity() {
-        IGravityModifier gravityModifier = factory.getGravityModifier(Gravity.BOTTOM);
-        assertTrue(gravityModifier instanceof BottomGravityModifier);
-    }
-
-    @Test
-    public void factoryShouldReturnCenterModifierForUnknownGravity() {
-        IGravityModifier gravityModifier = factory.getGravityModifier(Gravity.CENTER_HORIZONTAL);
-        assertTrue(gravityModifier instanceof CenterInRowGravityModifier);
-    }
-
-}
diff --git a/ChipsLayoutManager/src/androidTest/java/com/beloo/widget/chipslayoutmanager/gravity/TopGravityModifierTest.java b/ChipsLayoutManager/src/androidTest/java/com/beloo/widget/chipslayoutmanager/gravity/TopGravityModifierTest.java
deleted file mode 100644
index 1dfdcc5..0000000
--- a/ChipsLayoutManager/src/androidTest/java/com/beloo/widget/chipslayoutmanager/gravity/TopGravityModifierTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-import com.beloo.widget.chipslayoutmanager.ParamsType;
-
-import org.junit.runners.Parameterized;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
-import static com.beloo.widget.chipslayoutmanager.ParamsType.INVALID;
-import static com.beloo.widget.chipslayoutmanager.ParamsType.VALID;
-
-/** test for {@link TopGravityModifier}*/
-public class TopGravityModifierTest extends GravityModifierTest {
-
-    @Parameterized.Parameters
-    public static Iterable<Object[]> data() {
-        List<Object[]> data = new ArrayList<>();
-        data.addAll(Arrays.asList(new Object[][] {
-                {VALID, 0, 100, new Rect(0, 20, 0, 100), new Rect(0, 0, 0, 80)},
-                {VALID, 0, 100, new Rect(0, 20, 0, 80), new Rect(0, 0, 0, 60)},
-                {VALID, 0, 100, new Rect(0, 0, 0, 40), new Rect(0, 0, 0, 40)},
-                {VALID, 0, 100, new Rect(0, 10, 0, 20), new Rect(0, 0, 0, 10)},
-                {VALID, 0, 100, new Rect(0, 0, 0, 100), new Rect(0, 0, 0, 100)}
-        }));
-        data.addAll(getInvalidGravityModifierParams());
-        return data;
-    }
-
-    public TopGravityModifierTest(ParamsType paramsType, int minTop, int maxBottom, Rect testRect, Rect expectedResultRect) {
-        super(paramsType, minTop, maxBottom, testRect, expectedResultRect);
-    }
-
-    @Override
-    protected IGravityModifier getGravityModifier() {
-        return new TopGravityModifier();
-    }
-
-    private static Collection<Object[]> getInvalidGravityModifierParams() {
-        return Arrays.asList(new Object[][]{
-                {INVALID, 0, 100, new Rect(-50, 0, 0, 0), new Rect(0, 0, 0, 0)},
-                {INVALID, 20, 100, new Rect(10, 0, 0, 0), new Rect(0, 0, 0, 0)},
-                {INVALID, 20, 100, new Rect(20, 0, 120, 0), new Rect(0, 0, 0, 0)}
-        });
-    }
-}
diff --git a/ChipsLayoutManager/src/main/AndroidManifest.xml b/ChipsLayoutManager/src/main/AndroidManifest.xml
deleted file mode 100644
index 45e4adf..0000000
--- a/ChipsLayoutManager/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1 +0,0 @@
-<manifest package="com.beloo.widget.chipslayoutmanager"/>
\ No newline at end of file
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/ChildViewsIterable.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/ChildViewsIterable.java
deleted file mode 100644
index 8213083..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/ChildViewsIterable.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.beloo.widget.chipslayoutmanager;
-
-import android.view.View;
-
-import androidx.recyclerview.widget.RecyclerView;
-
-import java.util.Iterator;
-
-public class ChildViewsIterable implements Iterable<View> {
-
-    private RecyclerView.LayoutManager layoutManager;
-
-    public ChildViewsIterable(RecyclerView.LayoutManager layoutManager) {
-        this.layoutManager = layoutManager;
-    }
-
-    @Override
-    public Iterator<View> iterator() {
-        return new Iterator<View>() {
-            int i = 0;
-
-            @Override
-            public boolean hasNext() {
-                return i < layoutManager.getChildCount();
-            }
-
-            @Override
-            public View next() {
-                return layoutManager.getChildAt(i++);
-            }
-        };
-    }
-
-    public int size() {
-        return layoutManager.getChildCount();
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/ChipsLayoutManager.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/ChipsLayoutManager.java
deleted file mode 100644
index a570495..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/ChipsLayoutManager.java
+++ /dev/null
@@ -1,1206 +0,0 @@
-package com.beloo.widget.chipslayoutmanager;
-
-import android.content.Context;
-import android.graphics.Rect;
-import android.os.Parcelable;
-import android.util.SparseArray;
-import android.view.View;
-
-import androidx.annotation.IntRange;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.annotation.RestrictTo;
-import androidx.annotation.VisibleForTesting;
-import androidx.core.view.ViewCompat;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.beloo.widget.chipslayoutmanager.anchor.AnchorViewState;
-import com.beloo.widget.chipslayoutmanager.anchor.IAnchorFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.ColumnsStateFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.ICanvas;
-import com.beloo.widget.chipslayoutmanager.layouter.IMeasureSupporter;
-import com.beloo.widget.chipslayoutmanager.layouter.IStateFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.MeasureSupporter;
-import com.beloo.widget.chipslayoutmanager.layouter.RowsStateFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.breaker.EmptyRowBreaker;
-import com.beloo.widget.chipslayoutmanager.layouter.breaker.IRowBreaker;
-import com.beloo.widget.chipslayoutmanager.cache.IViewCacheStorage;
-import com.beloo.widget.chipslayoutmanager.cache.ViewCacheFactory;
-import com.beloo.widget.chipslayoutmanager.gravity.CenterChildGravity;
-import com.beloo.widget.chipslayoutmanager.gravity.CustomGravityResolver;
-import com.beloo.widget.chipslayoutmanager.gravity.IChildGravityResolver;
-import com.beloo.widget.chipslayoutmanager.layouter.LayouterFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractPositionIterator;
-import com.beloo.widget.chipslayoutmanager.layouter.ILayouter;
-import com.beloo.widget.chipslayoutmanager.layouter.criteria.AbstractCriteriaFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.criteria.ICriteriaFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.criteria.InfiniteCriteriaFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.placer.PlacerFactory;
-import com.beloo.widget.chipslayoutmanager.util.log.IFillLogger;
-import com.beloo.widget.chipslayoutmanager.util.log.LoggerFactory;
-import com.beloo.widget.chipslayoutmanager.util.AssertionUtils;
-import com.beloo.widget.chipslayoutmanager.util.LayoutManagerUtil;
-import com.beloo.widget.chipslayoutmanager.util.log.Log;
-import com.beloo.widget.chipslayoutmanager.util.log.LogSwitcherFactory;
-import com.beloo.widget.chipslayoutmanager.util.testing.EmptySpy;
-import com.beloo.widget.chipslayoutmanager.util.testing.ISpy;
-
-import java.util.Locale;
-
-public class ChipsLayoutManager extends RecyclerView.LayoutManager implements IChipsLayoutManagerContract,
-        IStateHolder,
-        ScrollingController.IScrollerListener {
-    ///////////////////////////////////////////////////////////////////////////
-    // orientation types
-    ///////////////////////////////////////////////////////////////////////////
-    @SuppressWarnings("WeakerAccess")
-    public static final int HORIZONTAL = 1;
-    @SuppressWarnings("WeakerAccess")
-    public static final int VERTICAL = 2;
-
-    ///////////////////////////////////////////////////////////////////////////
-    // row strategy types
-    ///////////////////////////////////////////////////////////////////////////
-    @SuppressWarnings("WeakerAccess")
-    public static final int STRATEGY_DEFAULT = 1;
-    @SuppressWarnings("WeakerAccess")
-    public static final int STRATEGY_FILL_VIEW = 2;
-    @SuppressWarnings("WeakerAccess")
-    public static final int STRATEGY_FILL_SPACE = 4;
-    @SuppressWarnings("WeakerAccess")
-    public static final int STRATEGY_CENTER = 5;
-    @SuppressWarnings("WeakerAccess")
-    public static final int STRATEGY_CENTER_DENSE = 6;
-
-    ///////////////////////////////////////////////////////////////////////////
-    // inner constants
-    ///////////////////////////////////////////////////////////////////////////
-    private static final String TAG = ChipsLayoutManager.class.getSimpleName();
-    private static final int INT_ROW_SIZE_APPROXIMATELY_FOR_CACHE = 10;
-    private static final int APPROXIMATE_ADDITIONAL_ROWS_COUNT = 5;
-    /**
-     * coefficient to support fast scrolling, caching views only for one row may not be enough
-     */
-    private static final float FAST_SCROLLING_COEFFICIENT = 2;
-
-    /** delegate which represents available canvas for drawing views according to layout*/
-    private ICanvas canvas;
-
-    private IDisappearingViewsManager disappearingViewsManager;
-
-    /** iterable over views added to RecyclerView */
-    private ChildViewsIterable childViews = new ChildViewsIterable(this);
-
-    private SparseArray<View> childViewPositions = new SparseArray<>();
-
-    ///////////////////////////////////////////////////////////////////////////
-    // contract parameters
-    ///////////////////////////////////////////////////////////////////////////
-    /** determine gravity of child inside row*/
-    private IChildGravityResolver childGravityResolver;
-    private boolean isScrollingEnabledContract = true;
-    /** strict restriction of max count of views in particular row */
-    private Integer maxViewsInRow = null;
-    /** determines whether LM should break row from view position */
-    private IRowBreaker rowBreaker = new EmptyRowBreaker();
-    //--- end contract parameters
-    /** layoutOrientation of layout. Could have HORIZONTAL or VERTICAL style */
-    @Orientation
-    private int layoutOrientation = HORIZONTAL;
-    @RowStrategy
-    private int rowStrategy = STRATEGY_DEFAULT;
-    private boolean isStrategyAppliedWithLastRow;
-    /** @see #setSmoothScrollbarEnabled(boolean). True by default */
-    private boolean isSmoothScrollbarEnabled = false;
-
-    ///////////////////////////////////////////////////////////////////////////
-    // cache
-    ///////////////////////////////////////////////////////////////////////////
-
-    /** store positions of placed view to know when LM should break row while moving back
-     * this cache mostly needed to place views when scrolling down to the same places, where they have been previously */
-    private IViewCacheStorage viewPositionsStorage;
-
-    /**
-     * when scrolling reached this position {@link ChipsLayoutManager} is able to restore items layout according to cached items with positions above.
-     * That layout would exactly correspond to current item view situation
-     */
-    @Nullable
-    private Integer cacheNormalizationPosition = null;
-
-    /**
-     * store detached views to probably reattach it if them still visible.
-     * Used while scrolling
-     */
-    private SparseArray<View> viewCache = new SparseArray<>();
-
-    /**
-     * storing state due layoutOrientation changes
-     */
-    private ParcelableContainer container = new ParcelableContainer();
-
-    ///////////////////////////////////////////////////////////////////////////
-    // loggers
-    ///////////////////////////////////////////////////////////////////////////
-    private IFillLogger logger;
-    //--- end loggers
-
-    /**
-     * is layout in RTL mode. Variable needed to detect mode changes
-     */
-    private boolean isLayoutRTL = false;
-
-    /**
-     * current device layoutOrientation
-     */
-    @DeviceOrientation
-    private int orientation;
-
-    ///////////////////////////////////////////////////////////////////////////
-    // borders
-    ///////////////////////////////////////////////////////////////////////////
-
-    /**
-     * stored current anchor view due to scroll state changes
-     */
-    private AnchorViewState anchorView;
-
-    ///////////////////////////////////////////////////////////////////////////
-    // state-dependent
-    ///////////////////////////////////////////////////////////////////////////
-    /** factory for state-dependent layouter factories*/
-    private IStateFactory stateFactory;
-
-    /** manage auto-measuring */
-    private IMeasureSupporter measureSupporter;
-
-    /** factory which could retrieve anchorView on which layouting based*/
-    private IAnchorFactory anchorFactory;
-
-    /** manage scrolling of layout manager according to current state */
-    private IScrollingController scrollingController;
-    //--- end state-dependent vars
-
-    /** factory for placers factories*/
-    private PlacerFactory placerFactory = new PlacerFactory(this);
-
-    /** used for testing purposes to spy for {@link ChipsLayoutManager} behaviour */
-    private ISpy spy = new EmptySpy();
-
-    private boolean isAfterPreLayout;
-
-    @SuppressWarnings("WeakerAccess")
-    @VisibleForTesting
-    ChipsLayoutManager(Context context) {
-        @DeviceOrientation
-        int orientation = context.getResources().getConfiguration().orientation;
-        this.orientation = orientation;
-
-        LoggerFactory loggerFactory = new LoggerFactory();
-        logger = loggerFactory.getFillLogger(viewCache);
-
-        viewPositionsStorage = new ViewCacheFactory(this).createCacheStorage();
-        measureSupporter = new MeasureSupporter(this);
-        setAutoMeasureEnabled(true);
-    }
-
-    ///////////////////////////////////////////////////////////////////////////
-    // ChipsLayoutManager contract methods
-    ///////////////////////////////////////////////////////////////////////////
-
-    public static Builder newBuilder(Context context) {
-        if (context == null) throw new IllegalArgumentException("you have passed null context to builder");
-        return new ChipsLayoutManager(context).new StrategyBuilder();
-    }
-
-    public IChildGravityResolver getChildGravityResolver() {
-        return childGravityResolver;
-    }
-
-    /** use it to strictly disable scrolling.
-     * If scrolling enabled it would be disabled in case all items fit on the screen */
-    @Override
-    public void setScrollingEnabledContract(boolean isEnabled) {
-        isScrollingEnabledContract = isEnabled;
-    }
-
-    @Override
-    public boolean isScrollingEnabledContract() {
-        return isScrollingEnabledContract;
-    }
-
-    /**
-     * change max count of row views in runtime
-     */
-    @SuppressWarnings("unused")
-    public void setMaxViewsInRow(@IntRange(from = 1) Integer maxViewsInRow) {
-        if (maxViewsInRow < 1)
-            throw new IllegalArgumentException("maxViewsInRow should be positive, but is = " + maxViewsInRow);
-        this.maxViewsInRow = maxViewsInRow;
-        onRuntimeLayoutChanges();
-    }
-
-    private void onRuntimeLayoutChanges() {
-        cacheNormalizationPosition = 0;
-        viewPositionsStorage.purge();
-        requestLayoutWithAnimations();
-    }
-
-    @Override
-    public Integer getMaxViewsInRow() {
-        return maxViewsInRow;
-    }
-
-    @Override
-    public IRowBreaker getRowBreaker() {
-        return rowBreaker;
-    }
-
-    @Override
-    @RowStrategy
-    public int getRowStrategyType() {
-        return rowStrategy;
-    }
-
-    ///////////////////////////////////////////////////////////////////////////
-    // non-contract public methods. Used only for inner purposes
-    ///////////////////////////////////////////////////////////////////////////
-
-    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    public boolean isStrategyAppliedWithLastRow() {
-        return isStrategyAppliedWithLastRow;
-    }
-
-    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    public IViewCacheStorage getViewPositionsStorage() {
-        return viewPositionsStorage;
-    }
-
-    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    public ICanvas getCanvas() {
-        return canvas;
-    }
-
-    @NonNull
-    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    AnchorViewState getAnchor() {
-        return anchorView;
-    }
-
-    @VisibleForTesting
-    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    void setSpy(ISpy spy) {
-        this.spy = spy;
-    }
-
-    ///////////////////////////////////////////////////////////////////////////
-    // builder
-    ///////////////////////////////////////////////////////////////////////////
-
-    //create decorator if any other builders would be added
-    @SuppressWarnings("WeakerAccess")
-    public class StrategyBuilder extends Builder {
-
-        /** @param withLastRow true, if row strategy should be applied to last row.
-         * @see Builder#setRowStrategy(int) */
-        @SuppressWarnings("unused")
-        public Builder withLastRow(boolean withLastRow) {
-            ChipsLayoutManager.this.isStrategyAppliedWithLastRow = withLastRow;
-            return this;
-        }
-
-    }
-
-    @SuppressWarnings("WeakerAccess")
-    public class Builder {
-
-        @SpanLayoutChildGravity
-        private Integer gravity;
-
-        private Builder() {
-        }
-
-        /**
-         * set vertical gravity in a row for all children. Default = CENTER_VERTICAL
-         */
-        @SuppressWarnings({"unused", "WeakerAccess"})
-        public Builder setChildGravity(@SpanLayoutChildGravity int gravity) {
-            this.gravity = gravity;
-            return this;
-        }
-
-        /**
-         * set gravity resolver in case you need special gravity for items. This method have priority over {@link #setChildGravity(int)}
-         */
-        @SuppressWarnings("unused")
-        public Builder setGravityResolver(@NonNull IChildGravityResolver gravityResolver) {
-            AssertionUtils.assertNotNull(gravityResolver, "gravity resolver couldn't be null");
-            childGravityResolver = gravityResolver;
-            return this;
-        }
-
-        /**
-         * strictly disable scrolling if needed
-         */
-        @SuppressWarnings("unused")
-        public Builder setScrollingEnabled(boolean isEnabled) {
-            ChipsLayoutManager.this.setScrollingEnabledContract(isEnabled);
-            return this;
-        }
-
-        /** row strategy for views in completed row.
-         * Any row has some space left, where is impossible to place the next view, because that space is too small.
-         * But we could distribute that space for available views in that row
-         * @param rowStrategy is a mode of distribution left space<br/>
-         * {@link #STRATEGY_DEFAULT} is used by default. Left space is placed at the end of the row.<br/>
-         * {@link #STRATEGY_FILL_VIEW} available space is distributed among views<br/>
-         * {@link #STRATEGY_FILL_SPACE} available space is distributed among spaces between views, start & end views are docked to a nearest border<br/>
-         * {@link #STRATEGY_CENTER} available space is distributed among spaces between views, start & end spaces included. Views are placed in center of canvas<br/>
-         * {@link #STRATEGY_CENTER_DENSE} available space is distributed among start & end spaces. Views are placed in center of canvas<br/>
-         * <br/>
-         * In such layouts by default last row isn't considered completed. So strategy isn't applied for last row.<br/>
-         * But you can also enable opposite behaviour.
-         * @see StrategyBuilder#withLastRow(boolean)
-         */
-        @SuppressWarnings("unused")
-        public StrategyBuilder setRowStrategy(@RowStrategy int rowStrategy) {
-            ChipsLayoutManager.this.rowStrategy = rowStrategy;
-            return (StrategyBuilder) this;
-        }
-
-        /**
-         * set maximum possible count of views in row
-         */
-        @SuppressWarnings("unused")
-        public Builder setMaxViewsInRow(@IntRange(from = 1) int maxViewsInRow) {
-            if (maxViewsInRow < 1)
-                throw new IllegalArgumentException("maxViewsInRow should be positive, but is = " + maxViewsInRow);
-            ChipsLayoutManager.this.maxViewsInRow = maxViewsInRow;
-            return this;
-        }
-
-        /** @param breaker override to determine whether ChipsLayoutManager should breaks row due to position of view. */
-        @SuppressWarnings("unused")
-        public Builder setRowBreaker(@NonNull IRowBreaker breaker) {
-            AssertionUtils.assertNotNull(breaker, "breaker couldn't be null");
-            ChipsLayoutManager.this.rowBreaker = breaker;
-            return this;
-        }
-
-        /** @param orientation of layout manager. Could be {@link #HORIZONTAL} or {@link #VERTICAL}
-         * {@link #HORIZONTAL} by default */
-        public Builder setOrientation(@Orientation int orientation) {
-            if (orientation != HORIZONTAL && orientation != VERTICAL) {
-                return this;
-            }
-            ChipsLayoutManager.this.layoutOrientation = orientation;
-            return this;
-        }
-
-        /**
-         * create SpanLayoutManager
-         */
-        public ChipsLayoutManager build() {
-            // setGravityResolver always have priority
-            if (childGravityResolver == null) {
-                if (gravity != null) {
-                    childGravityResolver = new CustomGravityResolver(gravity);
-                } else {
-                    childGravityResolver = new CenterChildGravity();
-                }
-            }
-
-            stateFactory = layoutOrientation == HORIZONTAL ? new RowsStateFactory(ChipsLayoutManager.this) : new ColumnsStateFactory(ChipsLayoutManager.this);
-            canvas = stateFactory.createCanvas();
-            anchorFactory = stateFactory.anchorFactory();
-            scrollingController = stateFactory.scrollingController();
-
-            anchorView = anchorFactory.createNotFound();
-
-            disappearingViewsManager = new DisappearingViewsManager(canvas, childViews, stateFactory);
-
-            return ChipsLayoutManager.this;
-        }
-
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public RecyclerView.LayoutParams generateDefaultLayoutParams() {
-        return new RecyclerView.LayoutParams(
-                RecyclerView.LayoutParams.WRAP_CONTENT,
-                RecyclerView.LayoutParams.WRAP_CONTENT);
-    }
-
-    private void requestLayoutWithAnimations() {
-        LayoutManagerUtil.requestLayoutWithAnimations(this);
-    }
-
-    ///////////////////////////////////////////////////////////////////////////
-    // instance state
-    ///////////////////////////////////////////////////////////////////////////
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void onRestoreInstanceState(Parcelable state) {
-        container = (ParcelableContainer) state;
-
-        anchorView = container.getAnchorViewState();
-        if (orientation != container.getOrientation()) {
-            //orientation have been changed, clear anchor rect
-            int anchorPos = anchorView.getPosition();
-            anchorView = anchorFactory.createNotFound();
-            anchorView.setPosition(anchorPos);
-        }
-
-        viewPositionsStorage.onRestoreInstanceState(container.getPositionsCache(orientation));
-        cacheNormalizationPosition = container.getNormalizationPosition(orientation);
-
-        Log.d(TAG, "RESTORE. last cache position before cleanup = " + viewPositionsStorage.getLastCachePosition());
-        if (cacheNormalizationPosition != null) {
-            viewPositionsStorage.purgeCacheFromPosition(cacheNormalizationPosition);
-        }
-        viewPositionsStorage.purgeCacheFromPosition(anchorView.getPosition());
-        Log.d(TAG, "RESTORE. anchor position =" + anchorView.getPosition());
-        Log.d(TAG, "RESTORE. layoutOrientation = " + orientation + " normalizationPos = " + cacheNormalizationPosition);
-        Log.d(TAG, "RESTORE. last cache position = " + viewPositionsStorage.getLastCachePosition());
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public Parcelable onSaveInstanceState() {
-
-        container.putAnchorViewState(anchorView);
-        container.putPositionsCache(orientation, viewPositionsStorage.onSaveInstanceState());
-        container.putOrientation(orientation);
-        Log.d(TAG, "STORE. last cache position =" + viewPositionsStorage.getLastCachePosition());
-
-        Integer storedNormalizationPosition = cacheNormalizationPosition != null ? cacheNormalizationPosition : viewPositionsStorage.getLastCachePosition();
-
-        Log.d(TAG, "STORE. layoutOrientation = " + orientation + " normalizationPos = " + storedNormalizationPosition);
-
-        container.putNormalizationPosition(orientation, storedNormalizationPosition);
-
-        return container;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public boolean supportsPredictiveItemAnimations() {
-        return true;
-    }
-
-    ///////////////////////////////////////////////////////////////////////////
-    // visible items
-    ///////////////////////////////////////////////////////////////////////////
-
-    /** returns count of completely visible views
-     * @see #findFirstCompletelyVisibleItemPosition() ()
-     * @see #findLastCompletelyVisibleItemPosition() */
-    @SuppressWarnings("WeakerAccess")
-    public int getCompletelyVisibleViewsCount() {
-        int visibleViewsCount = 0;
-        for (View child : childViews) {
-            if (canvas.isFullyVisible(child)){
-                visibleViewsCount++;
-            }
-        }
-
-        return visibleViewsCount;
-    }
-
-    ///////////////////////////////////////////////////////////////////////////
-    // positions contract
-    ///////////////////////////////////////////////////////////////////////////
-
-    /**
-     * Returns the adapter position of the first visible view. This position does not include
-     * adapter changes that were dispatched after the last layout pass.
-     * If RecyclerView has item decorators, they will be considered in calculations as well.
-     * <p>
-     * LayoutManager may pre-cache some views that are not necessarily visible. Those views
-     * are ignored in this method.
-     *
-     * @return The adapter position of the first visible item or {@link RecyclerView#NO_POSITION} if
-     * there aren't any visible items.
-     * @see #findFirstCompletelyVisibleItemPosition()
-     * @see #findLastVisibleItemPosition()
-     */
-    @Override
-    public int findFirstVisibleItemPosition() {
-        if (getChildCount() == 0)
-            return RecyclerView.NO_POSITION;
-        return canvas.getMinPositionOnScreen();
-    }
-
-    /**
-     * Returns the adapter position of the first fully visible view. This position does not include
-     * adapter changes that were dispatched after the last layout pass.
-     *
-     * @return The adapter position of the first fully visible item or
-     * {@link RecyclerView#NO_POSITION} if there aren't any visible items.
-     * @see #findFirstVisibleItemPosition()
-     * @see #findLastCompletelyVisibleItemPosition()
-     */
-    @Override
-    public int findFirstCompletelyVisibleItemPosition() {
-        for (View view : childViews) {
-            Rect rect = canvas.getViewRect(view);
-            if (!canvas.isFullyVisible(rect)) continue;
-            if (canvas.isInside(rect)) {
-                return getPosition(view);
-            }
-        }
-
-        return RecyclerView.NO_POSITION;
-    }
-
-    /**
-     * Returns the adapter position of the last visible view. This position does not include
-     * adapter changes that were dispatched after the last layout pass.
-     * If RecyclerView has item decorators, they will be considered in calculations as well.
-     * <p>
-     * LayoutManager may pre-cache some views that are not necessarily visible. Those views
-     * are ignored in this method.
-     *
-     * @return The adapter position of the last visible view or {@link RecyclerView#NO_POSITION} if
-     * there aren't any visible items.
-     * @see #findLastCompletelyVisibleItemPosition()
-     * @see #findFirstVisibleItemPosition()
-     */
-    @Override
-    public int findLastVisibleItemPosition() {
-        if (getChildCount() == 0)
-            return RecyclerView.NO_POSITION;
-        return canvas.getMaxPositionOnScreen();
-    }
-
-    /**
-     * Returns the adapter position of the last fully visible view. This position does not include
-     * adapter changes that were dispatched after the last layout pass.
-     *
-     *  @return The adapter position of the last fully visible view or
-     * {@link RecyclerView#NO_POSITION} if there aren't any visible items.
-     * @see #findLastVisibleItemPosition()
-     * @see #findFirstCompletelyVisibleItemPosition()
-     */
-    @Override
-    public int findLastCompletelyVisibleItemPosition() {
-
-        for (int i = getChildCount() - 1; i >=0; i--) {
-            View view = getChildAt(i);
-            Rect rect = canvas.getViewRect(view);
-            if (!canvas.isFullyVisible(rect)) continue;
-            if (canvas.isInside(view)) {
-                return getPosition(view);
-            }
-        }
-
-        return RecyclerView.NO_POSITION;
-    }
-
-    /** @return child for requested position. Null if that child haven't added to layout manager*/
-    @Nullable
-    View getChildWithPosition(int position) {
-        return childViewPositions.get(position);
-    }
-
-    ///////////////////////////////////////////////////////////////////////////
-    // orientation
-    ///////////////////////////////////////////////////////////////////////////
-
-    /**
-     * @return true if RTL mode enabled in RecyclerView
-     */
-    public boolean isLayoutRTL() {
-        return getLayoutDirection() == ViewCompat.LAYOUT_DIRECTION_RTL;
-    }
-
-    @Override
-    @Orientation
-    public int layoutOrientation() {
-        return layoutOrientation;
-    }
-
-    ///////////////////////////////////////////////////////////////////////////
-    // layouting
-    ///////////////////////////////////////////////////////////////////////////
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public int getItemCount() {
-        //in pre-layouter drawing we need item count with items will be actually deleted to pre-draw appearing items properly
-        return super.getItemCount() + disappearingViewsManager.getDeletingItemsOnScreenCount();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
-        spy.onLayoutChildren(recycler, state);
-        Log.d(TAG, "onLayoutChildren. State =" + state);
-        //We have nothing to show for an empty data set but clear any existing views
-        if (getItemCount() == 0) {
-            detachAndScrapAttachedViews(recycler);
-            return;
-        }
-
-        Log.i("onLayoutChildren", "isPreLayout = " + state.isPreLayout(), LogSwitcherFactory.PREDICTIVE_ANIMATIONS);
-
-        if (isLayoutRTL() != isLayoutRTL) {
-            //if layout direction changed programmatically we should clear anchors
-            isLayoutRTL = isLayoutRTL();
-            //so detach all views before we start searching for anchor view
-            detachAndScrapAttachedViews(recycler);
-        }
-
-        calcRecyclerCacheSize(recycler);
-
-        if (state.isPreLayout()) {
-            //inside pre-layout stage. It is called when item animation reconstruction will be played
-            //it is NOT called on layoutOrientation changes
-
-            int additionalLength = disappearingViewsManager.calcDisappearingViewsLength(recycler);
-
-            Log.d("LayoutManager", "height =" + getHeight(), LogSwitcherFactory.PREDICTIVE_ANIMATIONS);
-            Log.d("onDeletingHeightCalc", "additional height  = " + additionalLength, LogSwitcherFactory.PREDICTIVE_ANIMATIONS);
-
-            anchorView = anchorFactory.getAnchor();
-            anchorFactory.resetRowCoordinates(anchorView);
-            Log.w(TAG, "anchor state in pre-layout = " + anchorView);
-            detachAndScrapAttachedViews(recycler);
-
-            //in case removing draw additional rows to show predictive animations for appearing views
-            AbstractCriteriaFactory criteriaFactory = stateFactory.createDefaultFinishingCriteriaFactory();
-            criteriaFactory.setAdditionalRowsCount(APPROXIMATE_ADDITIONAL_ROWS_COUNT);
-            criteriaFactory.setAdditionalLength(additionalLength);
-
-            LayouterFactory layouterFactory = stateFactory.createLayouterFactory(criteriaFactory, placerFactory.createRealPlacerFactory());
-
-            logger.onBeforeLayouter(anchorView);
-            fill(recycler,
-                    layouterFactory.getBackwardLayouter(anchorView),
-                    layouterFactory.getForwardLayouter(anchorView));
-
-            isAfterPreLayout = true;
-        } else {
-            detachAndScrapAttachedViews(recycler);
-
-            //we perform layouting stage from scratch, so cache will be rebuilt soon, we could purge it and avoid unnecessary normalization
-            viewPositionsStorage.purgeCacheFromPosition(anchorView.getPosition());
-            if (cacheNormalizationPosition != null && anchorView.getPosition() <= cacheNormalizationPosition) {
-                cacheNormalizationPosition = null;
-            }
-
-            /* In case some moving views
-             * we should place it at layout to support predictive animations
-             * we can't place all possible moves on theirs real place, because concrete layout position of particular view depends on placing of previous views
-             * and there could be moving from 0 position to 10k. But it is preferably to place nearest moved view to real positions to make moving more natural
-             * like moving from 0 position to 15 for example, where user could scroll fast and check
-             * so we fill additional rows to cover nearest moves
-             */
-            AbstractCriteriaFactory criteriaFactory = stateFactory.createDefaultFinishingCriteriaFactory();
-            criteriaFactory.setAdditionalRowsCount(APPROXIMATE_ADDITIONAL_ROWS_COUNT);
-
-            LayouterFactory layouterFactory = stateFactory.createLayouterFactory(criteriaFactory, placerFactory.createRealPlacerFactory());
-            ILayouter backwardLayouter = layouterFactory.getBackwardLayouter(anchorView);
-            ILayouter forwardLayouter = layouterFactory.getForwardLayouter(anchorView);
-
-            fill(recycler, backwardLayouter, forwardLayouter);
-
-            /* should be executed before {@link #layoutDisappearingViews} */
-            if (scrollingController.normalizeGaps(recycler, null)) {
-                Log.d(TAG, "normalize gaps");
-                //we should re-layout with new anchor after normalizing gaps
-                anchorView = anchorFactory.getAnchor();
-                requestLayoutWithAnimations();
-            }
-
-            if (isAfterPreLayout) {
-                //we should layout disappearing views after pre-layout to support natural movements)
-                layoutDisappearingViews(recycler, backwardLayouter, forwardLayouter);
-            }
-
-            isAfterPreLayout = false;
-        }
-
-        disappearingViewsManager.reset();
-
-        if (!state.isMeasuring()) {
-            measureSupporter.onSizeChanged();
-        }
-
-    }
-
-    @Override
-    public void detachAndScrapAttachedViews(RecyclerView.Recycler recycler) {
-        super.detachAndScrapAttachedViews(recycler);
-        childViewPositions.clear();
-    }
-
-    /** layout disappearing view to support predictive animations */
-    private void layoutDisappearingViews(RecyclerView.Recycler recycler, @NonNull ILayouter upLayouter, ILayouter downLayouter) {
-
-        ICriteriaFactory criteriaFactory = new InfiniteCriteriaFactory();
-        LayouterFactory layouterFactory = stateFactory.createLayouterFactory(criteriaFactory, placerFactory.createDisappearingPlacerFactory());
-
-        DisappearingViewsManager.DisappearingViewsContainer disappearingViews = disappearingViewsManager.getDisappearingViews(recycler);
-
-        if (disappearingViews.size() > 0) {
-            Log.d("disappearing views", "count = " + disappearingViews.size());
-            Log.d("fill disappearing views", "");
-            downLayouter = layouterFactory.buildForwardLayouter(downLayouter);
-
-            //we should layout disappearing views left somewhere, just continue layout them in current layouter
-            for (int i = 0; i< disappearingViews.getForwardViews().size(); i++) {
-                int position = disappearingViews.getForwardViews().keyAt(i);
-                downLayouter.placeView(recycler.getViewForPosition(position));
-            }
-            //layout last row
-            downLayouter.layoutRow();
-
-            upLayouter = layouterFactory.buildBackwardLayouter(upLayouter);
-            //we should layout disappearing views left somewhere, just continue layout them in current layouter
-            for (int i = 0; i< disappearingViews.getBackwardViews().size(); i++) {
-                int position = disappearingViews.getBackwardViews().keyAt(i);
-                upLayouter.placeView(recycler.getViewForPosition(position));
-            }
-
-            //layout last row
-            upLayouter.layoutRow();
-        }
-    }
-
-    /**
-     * place all added views to cache (in case scrolling)...
-     */
-    private void fillCache() {
-        for (int i = 0, cnt = getChildCount(); i < cnt; i++) {
-            View view = getChildAt(i);
-            int pos = getPosition(view);
-            viewCache.put(pos, view);
-        }
-    }
-
-    /**
-     * place all views on theirs right places according to current state
-     */
-    private void fill(RecyclerView.Recycler recycler, ILayouter backwardLayouter, ILayouter forwardLayouter) {
-        int startingPos = anchorView.getPosition();
-        fillCache();
-
-        //... and remove from layout
-        for (int i = 0; i < viewCache.size(); i++) {
-            detachView(viewCache.valueAt(i));
-        }
-
-        logger.onStartLayouter(startingPos - 1);
-
-        /* there is no sense to perform backward layouting when anchor is null.
-           null anchor means that layout will be performed from absolutely top corner with start at anchor position
-        */
-        if (anchorView.getAnchorViewRect() != null) {
-            //up layouter should be invoked earlier than down layouter, because views with lower positions positioned above anchorView
-            //start from anchor position
-            fillWithLayouter(recycler, backwardLayouter, startingPos - 1);
-        }
-
-        logger.onStartLayouter(startingPos);
-
-        //start from anchor position
-        fillWithLayouter(recycler, forwardLayouter, startingPos);
-
-        logger.onAfterLayouter();
-        //move to trash everything, which haven't used in this layout cycle
-        //that views gone from a screen or was removed outside from adapter
-        for (int i = 0; i < viewCache.size(); i++) {
-            removeAndRecycleView(viewCache.valueAt(i), recycler);
-            logger.onRemovedAndRecycled(i);
-        }
-
-        canvas.findBorderViews();
-        buildChildWithPositionsMap();
-
-        viewCache.clear();
-        logger.onAfterRemovingViews();
-    }
-
-    private void buildChildWithPositionsMap() {
-        childViewPositions.clear();
-        for (View view : childViews) {
-            int position = getPosition(view);
-            childViewPositions.put(position, view);
-        }
-    }
-
-    /**
-     * place views in layout started from chosen position with chosen layouter
-     */
-    private void fillWithLayouter(RecyclerView.Recycler recycler, ILayouter layouter, int startingPos) {
-        if (startingPos < 0) return;
-        AbstractPositionIterator iterator = layouter.positionIterator();
-        iterator.move(startingPos);
-        while (iterator.hasNext()) {
-            int pos = iterator.next();
-            View view = viewCache.get(pos);
-            if (view == null) { // we don't have view from previous layouter stage, request new one
-                try {
-                    view = recycler.getViewForPosition(pos);
-                } catch (IndexOutOfBoundsException e) {
-                    /* WTF sometimes on prediction animation playing in case very fast sequential changes in adapter
-                     * {@link #getItemCount} could return value bigger than real count of items
-                     * & {@link RecyclerView.Recycler#getViewForPosition(int)} throws exception in this case!
-                     * to handle it, just leave the loop*/
-                    break;
-                }
-
-                logger.onItemRequested();
-
-                if (!layouter.placeView(view)) {
-                     /* reached end of visible bounds, exit.
-                    recycle view, which was requested previously
-                     */
-                    recycler.recycleView(view);
-                    logger.onItemRecycled();
-
-                    break;
-                }
-
-            } else { //we have detached views from previous layouter stage, attach it if needed
-                if (!layouter.onAttachView(view)) {
-                    break;
-                }
-
-                //remove reattached view from cache
-                viewCache.remove(pos);
-            }
-
-        }
-
-        logger.onFinishedLayouter();
-
-        //layout last row, in case iterator fully processed
-        layouter.layoutRow();
-    }
-
-    /**
-     * recycler should contain all recycled views from a longest row, not just 2 holders by default
-     */
-    private void calcRecyclerCacheSize(RecyclerView.Recycler recycler) {
-        int viewsInRow = maxViewsInRow == null ? INT_ROW_SIZE_APPROXIMATELY_FOR_CACHE : maxViewsInRow;
-        recycler.setViewCacheSize((int) (viewsInRow * FAST_SCROLLING_COEFFICIENT));
-    }
-
-    /**
-     * after several layout changes our item views probably haven't placed on right places,
-     * because we don't memorize whole positions of items.
-     * So them should be normalized to real positions when we can do it.
-     */
-    private void performNormalizationIfNeeded() {
-        if (cacheNormalizationPosition != null && getChildCount() > 0) {
-            final View firstView = getChildAt(0);
-            int firstViewPosition = getPosition(firstView);
-
-            if (firstViewPosition < cacheNormalizationPosition ||
-                    (cacheNormalizationPosition == 0 && cacheNormalizationPosition == firstViewPosition)) {
-                //perform normalization when we have reached previous position then normalization position
-                Log.d("normalization", "position = " + cacheNormalizationPosition + " top view position = " + firstViewPosition);
-                Log.d(TAG, "cache purged from position " + firstViewPosition);
-                viewPositionsStorage.purgeCacheFromPosition(firstViewPosition);
-                //reset normalization position
-                cacheNormalizationPosition = null;
-                requestLayoutWithAnimations();
-            }
-        }
-    }
-
-    ///////////////////////////////////////////////////////////////////////////
-    // measure
-    ///////////////////////////////////////////////////////////////////////////
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void setMeasuredDimension(int widthSize, int heightSize) {
-        measureSupporter.measure(widthSize, heightSize);
-        Log.i(TAG, "measured dimension = " + heightSize);
-        super.setMeasuredDimension(measureSupporter.getMeasuredWidth(), measureSupporter.getMeasuredHeight());
-    }
-
-    ///////////////////////////////////////////////////////////////////////////
-    // data set changed events
-    ///////////////////////////////////////////////////////////////////////////
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void onAdapterChanged(RecyclerView.Adapter oldAdapter,
-                                 RecyclerView.Adapter newAdapter) {
-        if (oldAdapter != null && measureSupporter.isRegistered()) {
-            try {
-                measureSupporter.setRegistered(false);
-                oldAdapter.unregisterAdapterDataObserver((RecyclerView.AdapterDataObserver) measureSupporter);
-            } catch (IllegalStateException e) {
-                //skip unregister errors
-            }
-        }
-        if (newAdapter != null) {
-            measureSupporter.setRegistered(true);
-            newAdapter.registerAdapterDataObserver((RecyclerView.AdapterDataObserver) measureSupporter);
-        }
-        //Completely scrap the existing layout
-        removeAllViews();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void onItemsRemoved(final RecyclerView recyclerView, int positionStart, int itemCount) {
-        Log.d("onItemsRemoved", "starts from = " + positionStart + ", item count = " + itemCount, LogSwitcherFactory.ADAPTER_ACTIONS);
-        super.onItemsRemoved(recyclerView, positionStart, itemCount);
-        onLayoutUpdatedFromPosition(positionStart);
-
-        measureSupporter.onItemsRemoved(recyclerView);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void onItemsAdded(RecyclerView recyclerView, int positionStart, int itemCount) {
-        Log.d("onItemsAdded",  "starts from = " + positionStart + ", item count = " + itemCount, LogSwitcherFactory.ADAPTER_ACTIONS);
-        super.onItemsAdded(recyclerView, positionStart, itemCount);
-        onLayoutUpdatedFromPosition(positionStart);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void onItemsChanged(RecyclerView recyclerView) {
-        Log.d("onItemsChanged", "", LogSwitcherFactory.ADAPTER_ACTIONS);
-        super.onItemsChanged(recyclerView);
-        viewPositionsStorage.purge();
-        onLayoutUpdatedFromPosition(0);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void onItemsUpdated(RecyclerView recyclerView, int positionStart, int itemCount) {
-        Log.d("onItemsUpdated", "starts from = " + positionStart + ", item count = " + itemCount, LogSwitcherFactory.ADAPTER_ACTIONS);
-        super.onItemsUpdated(recyclerView, positionStart, itemCount);
-        onLayoutUpdatedFromPosition(positionStart);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void onItemsUpdated(RecyclerView recyclerView, int positionStart, int itemCount, Object payload) {
-        onItemsUpdated(recyclerView, positionStart, itemCount);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void onItemsMoved(RecyclerView recyclerView, int from, int to, int itemCount) {
-        Log.d("onItemsMoved", String.format(Locale.US, "from = %d, to = %d, itemCount = %d", from, to, itemCount), LogSwitcherFactory.ADAPTER_ACTIONS);
-        super.onItemsMoved(recyclerView, from, to, itemCount);
-        onLayoutUpdatedFromPosition(Math.min(from, to));
-    }
-
-    /** update cache according to data changes */
-    private void onLayoutUpdatedFromPosition(int position) {
-        Log.d(TAG, "cache purged from position " + position);
-        viewPositionsStorage.purgeCacheFromPosition(position);
-        int startRowPos = viewPositionsStorage.getStartOfRow(position);
-        cacheNormalizationPosition = cacheNormalizationPosition == null ?
-                startRowPos : Math.min(cacheNormalizationPosition, startRowPos);
-    }
-
-
-    ///////////////////////////////////////////////////////////////////////////
-    // Scrolling
-    ///////////////////////////////////////////////////////////////////////////
-
-    /**
-     * When smooth scrollbar is enabled, the position and size of the scrollbar thumb is computed
-     * based on the number of visible pixels in the visible items. This however assumes that all
-     * list items have similar or equal widths or heights (depending on list orientation).
-     *
-     * Also this is {@link ChipsLayoutManager} specific issue, that we can't predict exact count of items on screen
-     * in general case, because we can't predict items count in row.
-     * So to enable it you should accomplish one of those conditions:
-     * <ul>
-     *     <li> Your items have same width and height </li>
-     *     <li> You have {@link ChipsLayoutManager#setMaxViewsInRow(Integer)} set and you able to make sure, that there won't be many rows with lower items count.
-     *     The best is none. </li>
-     * </ul>
-     *
-     * If you use a list in which items have different dimensions, the scrollbar will change
-     * appearance as the user scrolls through the list. To avoid this issue,  you need to disable
-     * this property.
-     *
-     * When smooth scrollbar is disabled, the position and size of the scrollbar thumb is based
-     * solely on the number of items in the adapter and the position of the visible items inside
-     * the adapter. This provides a stable scrollbar as the user navigates through a list of items
-     * with varying widths / heights.
-     *
-     * @param enabled Whether or not to enable smooth scrollbar.
-     *
-     * @see #isSmoothScrollbarEnabled()
-     */
-    @Override
-    public void setSmoothScrollbarEnabled(boolean enabled) {
-        isSmoothScrollbarEnabled = enabled;
-    }
-
-    /**
-     * Returns the current state of the smooth scrollbar feature. It is NOT enabled by default.
-     *
-     * @return True if smooth scrollbar is enabled, false otherwise.
-     *
-     * @see #setSmoothScrollbarEnabled(boolean)
-     */
-    @Override
-    public boolean isSmoothScrollbarEnabled() {
-        return isSmoothScrollbarEnabled;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void scrollToPosition(int position) {
-        if (position >= getItemCount() || position < 0) {
-            Log.e("span layout manager", "Cannot scroll to " + position + ", item count " + getItemCount());
-            return;
-        }
-
-        Integer lastCachePosition = viewPositionsStorage.getLastCachePosition();
-
-        cacheNormalizationPosition = cacheNormalizationPosition != null ? cacheNormalizationPosition : lastCachePosition;
-
-        if (lastCachePosition != null && position < lastCachePosition) {
-            position = viewPositionsStorage.getStartOfRow(position);
-        }
-
-        anchorView = anchorFactory.createNotFound();
-        anchorView.setPosition(position);
-
-        //Trigger a new view layout
-        super.requestLayout();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, final int position) {
-        if (position >= getItemCount() || position < 0) {
-            Log.e("span layout manager", "Cannot scroll to " + position + ", item count " + getItemCount());
-            return;
-        }
-
-        RecyclerView.SmoothScroller scroller = scrollingController.createSmoothScroller(recyclerView.getContext(), position, 150, anchorView);
-        scroller.setTargetPosition(position);
-        startSmoothScroll(scroller);
-    }
-
-    @Override
-    public boolean canScrollHorizontally() {
-        return scrollingController.canScrollHorizontally();
-    }
-
-    @Override
-    public boolean canScrollVertically() {
-        return scrollingController.canScrollVertically();
-    }
-
-    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    @Override
-    public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {
-        return scrollingController.scrollVerticallyBy(dy, recycler, state);
-    }
-
-    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    @Override
-    public int scrollHorizontallyBy(int dx, RecyclerView.Recycler recycler, RecyclerView.State state) {
-        return scrollingController.scrollHorizontallyBy(dx, recycler, state);
-    }
-
-    public VerticalScrollingController verticalScrollingController() {
-        return new VerticalScrollingController(this, stateFactory, this);
-    }
-
-    public HorizontalScrollingController horizontalScrollingController() {
-        return new HorizontalScrollingController(this, stateFactory, this);
-    }
-
-    @Override
-    public void onScrolled(IScrollingController scrollingController, RecyclerView.Recycler recycler, RecyclerView.State state) {
-
-        performNormalizationIfNeeded();
-        anchorView = anchorFactory.getAnchor();
-
-        AbstractCriteriaFactory criteriaFactory = stateFactory.createDefaultFinishingCriteriaFactory();
-        criteriaFactory.setAdditionalRowsCount(1);
-        LayouterFactory factory = stateFactory.createLayouterFactory(criteriaFactory, placerFactory.createRealPlacerFactory());
-
-        fill(recycler,
-                factory.getBackwardLayouter(anchorView),
-                factory.getForwardLayouter(anchorView));
-    }
-
-    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    @Override
-    public int computeVerticalScrollOffset(RecyclerView.State state) {
-        return scrollingController.computeVerticalScrollOffset(state);
-    }
-
-    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    @Override
-    public int computeVerticalScrollExtent(RecyclerView.State state) {
-        return scrollingController.computeVerticalScrollExtent(state);
-    }
-
-    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    @Override
-    public int computeVerticalScrollRange(RecyclerView.State state) {
-        return scrollingController.computeVerticalScrollRange(state);
-    }
-
-    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    @Override
-    public int computeHorizontalScrollExtent(RecyclerView.State state) {
-        return scrollingController.computeHorizontalScrollExtent(state);
-    }
-
-    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    @Override
-    public int computeHorizontalScrollOffset(RecyclerView.State state) {
-        return scrollingController.computeHorizontalScrollOffset(state);
-    }
-
-    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    @Override
-    public int computeHorizontalScrollRange(RecyclerView.State state) {
-        return scrollingController.computeHorizontalScrollRange(state);
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/DeviceOrientation.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/DeviceOrientation.java
deleted file mode 100644
index 78a630e..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/DeviceOrientation.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.beloo.widget.chipslayoutmanager;
-
-import android.content.res.Configuration;
-
-import androidx.annotation.IntDef;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-@IntDef({Configuration.ORIENTATION_LANDSCAPE, Configuration.ORIENTATION_PORTRAIT, Configuration.ORIENTATION_UNDEFINED})
-@Retention(RetentionPolicy.SOURCE)
-@interface DeviceOrientation {}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/DisappearingViewsManager.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/DisappearingViewsManager.java
deleted file mode 100644
index 4c8946b..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/DisappearingViewsManager.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package com.beloo.widget.chipslayoutmanager;
-
-import android.util.SparseArray;
-import android.view.View;
-
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.beloo.widget.chipslayoutmanager.layouter.ICanvas;
-import com.beloo.widget.chipslayoutmanager.layouter.IStateFactory;
-
-import java.util.List;
-
-class DisappearingViewsManager implements IDisappearingViewsManager {
-
-    private ICanvas canvas;
-    private ChildViewsIterable childViews;
-    private IStateFactory stateFactory;
-
-    /* in pre-layouter drawing we need item count with items will be actually deleted to pre-draw appearing items properly
-    * buf value */
-    private int deletingItemsOnScreenCount;
-
-    DisappearingViewsManager(ICanvas canvas, ChildViewsIterable childViews, IStateFactory stateFactory) {
-        this.canvas = canvas;
-        this.childViews = childViews;
-        this.stateFactory = stateFactory;
-    }
-
-    class DisappearingViewsContainer {
-        private SparseArray<View> backwardViews = new SparseArray<>();
-        private SparseArray<View> forwardViews = new SparseArray<>();
-
-        int size() {
-            return backwardViews.size() + forwardViews.size();
-        }
-
-        SparseArray<View> getBackwardViews() {
-            return backwardViews;
-        }
-
-        SparseArray<View> getForwardViews() {
-            return forwardViews;
-        }
-    }
-
-    /** @return views which moved from screen, but not deleted*/
-    @Override
-    public DisappearingViewsContainer getDisappearingViews(RecyclerView.Recycler recycler) {
-        final List<RecyclerView.ViewHolder> scrapList = recycler.getScrapList();
-        DisappearingViewsContainer container = new DisappearingViewsContainer();
-
-        for (RecyclerView.ViewHolder holder : scrapList) {
-            final View child = holder.itemView;
-            final RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) child.getLayoutParams();
-            if (!lp.isItemRemoved()) {
-                if (lp.getViewAdapterPosition() < canvas.getMinPositionOnScreen()) {
-                    container.backwardViews.put(lp.getViewAdapterPosition(), child);
-                } else if (lp.getViewAdapterPosition() > canvas.getMaxPositionOnScreen()) {
-                    container.forwardViews.put(lp.getViewAdapterPosition(), child);
-                }
-            }
-        }
-
-        return container;
-    }
-    /** during pre-layout calculate approximate height which will be free after moving items offscreen (removed or moved)
-     * @return approximate height of disappearing views. Could be bigger, than accurate value. */
-    @Override
-    public int calcDisappearingViewsLength(RecyclerView.Recycler recycler) {
-        int removedLength = 0;
-
-        Integer minStart = Integer.MAX_VALUE;
-        Integer maxEnd = Integer.MIN_VALUE;
-
-        for (View view : childViews) {
-            RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) view.getLayoutParams();
-
-            boolean probablyMovedFromScreen = false;
-
-            if (!lp.isItemRemoved()) {
-                //view won't be removed, but maybe it is moved offscreen
-                int pos = lp.getViewLayoutPosition();
-
-                pos = recycler.convertPreLayoutPositionToPostLayout(pos);
-                probablyMovedFromScreen = pos < canvas.getMinPositionOnScreen() || pos > canvas.getMaxPositionOnScreen();
-            }
-
-            if (lp.isItemRemoved() || probablyMovedFromScreen) {
-                deletingItemsOnScreenCount++;
-
-                minStart = Math.min(minStart, stateFactory.getStart(view));
-                maxEnd = Math.max(maxEnd, stateFactory.getEnd(view));
-            }
-        }
-
-        if (minStart != Integer.MAX_VALUE) {
-            removedLength = maxEnd - minStart;
-        }
-
-        return removedLength;
-    }
-
-    @Override
-    public int getDeletingItemsOnScreenCount() {
-        return deletingItemsOnScreenCount;
-    }
-
-    @Override
-    public void reset() {
-        deletingItemsOnScreenCount = 0;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/HorizontalScrollingController.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/HorizontalScrollingController.java
deleted file mode 100644
index 8095170..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/HorizontalScrollingController.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package com.beloo.widget.chipslayoutmanager;
-
-import android.content.Context;
-import android.graphics.PointF;
-import android.view.View;
-import android.view.animation.LinearInterpolator;
-
-import androidx.annotation.NonNull;
-import androidx.recyclerview.widget.LinearSmoothScroller;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.beloo.widget.chipslayoutmanager.anchor.AnchorViewState;
-import com.beloo.widget.chipslayoutmanager.layouter.IStateFactory;
-
-class HorizontalScrollingController extends ScrollingController implements IScrollingController {
-
-    private ChipsLayoutManager layoutManager;
-
-    HorizontalScrollingController(ChipsLayoutManager layoutManager, IStateFactory stateFactory, IScrollerListener scrollerListener) {
-        super(layoutManager, stateFactory, scrollerListener);
-        this.layoutManager = layoutManager;
-    }
-
-    @Override
-    public RecyclerView.SmoothScroller createSmoothScroller(@NonNull Context context, final int position, final int timeMs, final AnchorViewState anchor) {
-        return new LinearSmoothScroller(context) {
-            /*
-             * LinearSmoothScroller, at a minimum, just need to know the vector
-             * (x/y distance) to travel in order to get from the current positioning
-             * to the target.
-             */
-            @Override
-            public PointF computeScrollVectorForPosition(int targetPosition) {
-                int visiblePosition = anchor.getPosition();
-                //determine scroll up or scroll down needed
-                return new PointF(position > visiblePosition ? 1 : -1, 0);
-            }
-
-            @Override
-            protected void onTargetFound(View targetView, RecyclerView.State state, Action action) {
-                super.onTargetFound(targetView, state, action);
-                int currentLeft = layoutManager.getPaddingLeft();
-                int desiredLeft = layoutManager.getDecoratedLeft(targetView);
-
-                int dx = desiredLeft - currentLeft;
-
-                //perform fit animation to move target view at top of layoutX
-                action.update(dx, 0, timeMs, new LinearInterpolator());
-            }
-        };
-    }
-
-    @Override
-    public boolean canScrollVertically() {
-        return false;
-    }
-
-    @Override
-    public boolean canScrollHorizontally() {
-        canvas.findBorderViews();
-        if (layoutManager.getChildCount() > 0) {
-            int left = layoutManager.getDecoratedLeft(canvas.getLeftView());
-            int right = layoutManager.getDecoratedRight(canvas.getRightView());
-
-            if (canvas.getMinPositionOnScreen() == 0
-                    && canvas.getMaxPositionOnScreen() == layoutManager.getItemCount() - 1
-                    && left >= layoutManager.getPaddingLeft()
-                    && right <= layoutManager.getWidth() - layoutManager.getPaddingRight()) {
-                return false;
-            }
-        } else {
-            return false;
-        }
-
-        return layoutManager.isScrollingEnabledContract();
-    }
-
-    @Override
-    void offsetChildren(int d) {
-        layoutManager.offsetChildrenHorizontal(d);
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/IBorder.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/IBorder.java
deleted file mode 100644
index fe3f086..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/IBorder.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.beloo.widget.chipslayoutmanager;
-
-public interface IBorder {
-    int getCanvasRightBorder();
-
-    int getCanvasBottomBorder();
-
-    int getCanvasLeftBorder();
-
-    int getCanvasTopBorder();
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/IChipsLayoutManagerContract.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/IChipsLayoutManagerContract.java
deleted file mode 100644
index 21adea4..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/IChipsLayoutManagerContract.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.beloo.widget.chipslayoutmanager;
-
-
-import androidx.annotation.IntRange;
-
-import com.beloo.widget.chipslayoutmanager.layouter.breaker.IRowBreaker;
-
-interface IChipsLayoutManagerContract extends IPositionsContract, IScrollingContract {
-    /** use it to strictly disable scrolling.
-     * If scrolling enabled it would be disabled in case all items fit on the screen */
-    void setScrollingEnabledContract(boolean isEnabled);
-    /**
-     * change max count of row views in runtime
-     */
-    void setMaxViewsInRow(@IntRange(from = 1) Integer maxViewsInRow);
-
-    /** retrieve max views in row settings*/
-    Integer getMaxViewsInRow();
-
-    /** retrieve instantiated row breaker*/
-    IRowBreaker getRowBreaker();
-
-    /** retrieve row strategy type*/
-    @RowStrategy
-    int getRowStrategyType();
-
-    @Orientation
-    /** orientation type of layout manager*/
-    int layoutOrientation();
-
-    /** whether or not scrolling disabled outside*/
-    boolean isScrollingEnabledContract();
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/IDisappearingViewsManager.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/IDisappearingViewsManager.java
deleted file mode 100644
index e964cea..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/IDisappearingViewsManager.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.beloo.widget.chipslayoutmanager;
-
-
-import androidx.recyclerview.widget.RecyclerView;
-
-interface IDisappearingViewsManager {
-    DisappearingViewsManager.DisappearingViewsContainer getDisappearingViews(RecyclerView.Recycler recycler);
-
-    int calcDisappearingViewsLength(RecyclerView.Recycler recycler);
-
-    int getDeletingItemsOnScreenCount();
-
-    void reset();
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/IPositionsContract.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/IPositionsContract.java
deleted file mode 100644
index 035e027..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/IPositionsContract.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.beloo.widget.chipslayoutmanager;
-
-interface IPositionsContract {
-    int findFirstVisibleItemPosition();
-    int findFirstCompletelyVisibleItemPosition();
-    int findLastVisibleItemPosition();
-    int findLastCompletelyVisibleItemPosition();
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/IScrollingContract.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/IScrollingContract.java
deleted file mode 100644
index 7813154..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/IScrollingContract.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.beloo.widget.chipslayoutmanager;
-
-interface IScrollingContract {
-    void setScrollingEnabledContract(boolean isEnabled);
-
-    boolean isScrollingEnabledContract();
-
-    void setSmoothScrollbarEnabled(boolean enabled);
-
-    boolean isSmoothScrollbarEnabled();
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/IScrollingController.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/IScrollingController.java
deleted file mode 100644
index 9e3d345..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/IScrollingController.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.beloo.widget.chipslayoutmanager;
-
-import android.content.Context;
-
-import androidx.annotation.NonNull;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.beloo.widget.chipslayoutmanager.anchor.AnchorViewState;
-
-public interface IScrollingController {
-
-    RecyclerView.SmoothScroller createSmoothScroller(@NonNull Context context, int position, int timeMs, AnchorViewState anchor);
-
-    boolean canScrollVertically();
-
-    boolean canScrollHorizontally();
-
-    /**
-     * calculate offset of views while scrolling, layout items on new places
-     */
-    int scrollVerticallyBy(int d, RecyclerView.Recycler recycler, RecyclerView.State state);
-
-    int scrollHorizontallyBy(int d, RecyclerView.Recycler recycler, RecyclerView.State state);
-
-    /** changes may cause gaps on the UI, try to fix them */
-    boolean normalizeGaps(RecyclerView.Recycler recycler, RecyclerView.State state);
-
-    /** @see ChipsLayoutManager#computeVerticalScrollOffset(RecyclerView.State) */
-    int computeVerticalScrollOffset(RecyclerView.State state);
-
-    /** @see ChipsLayoutManager#computeVerticalScrollExtent(RecyclerView.State) */
-    int computeVerticalScrollExtent(RecyclerView.State state);
-
-    /** @see ChipsLayoutManager#computeVerticalScrollRange(RecyclerView.State) */
-    int computeVerticalScrollRange(RecyclerView.State state);
-
-    /** @see ChipsLayoutManager#computeHorizontalScrollOffset(RecyclerView.State) */
-    int computeHorizontalScrollOffset(RecyclerView.State state);
-
-    /** @see ChipsLayoutManager#computeHorizontalScrollExtent(RecyclerView.State) */
-    int computeHorizontalScrollExtent(RecyclerView.State state);
-
-    /** @see ChipsLayoutManager#computeHorizontalScrollRange(RecyclerView.State) */
-    int computeHorizontalScrollRange(RecyclerView.State state);
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/IStateHolder.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/IStateHolder.java
deleted file mode 100644
index 788195f..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/IStateHolder.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.beloo.widget.chipslayoutmanager;
-
-interface IStateHolder {
-    boolean isLayoutRTL();
-
-    @Orientation
-    int layoutOrientation();
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/Orientation.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/Orientation.java
deleted file mode 100644
index a7869a3..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/Orientation.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.beloo.widget.chipslayoutmanager;
-
-
-import androidx.annotation.IntDef;
-
-@IntDef({ChipsLayoutManager.HORIZONTAL, ChipsLayoutManager.VERTICAL})
-@interface Orientation {
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/ParcelableContainer.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/ParcelableContainer.java
deleted file mode 100644
index aa7f34a..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/ParcelableContainer.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package com.beloo.widget.chipslayoutmanager;
-
-import android.content.res.Configuration;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.util.SparseArray;
-
-import androidx.annotation.IntRange;
-import androidx.annotation.Nullable;
-
-import com.beloo.widget.chipslayoutmanager.anchor.AnchorViewState;
-import com.beloo.widget.chipslayoutmanager.cache.CacheParcelableContainer;
-
-class ParcelableContainer implements Parcelable {
-
-    private AnchorViewState anchorViewState;
-    private SparseArray<Object> orientationCacheMap = new SparseArray<>();
-    private SparseArray<Object> cacheNormalizationPositionMap = new SparseArray<>();
-    //store previous orientation
-    private int orientation;
-
-    ParcelableContainer() {
-        //initial values. We should normalize cache when scrolled to zero in case first time of changing layoutOrientation state
-        cacheNormalizationPositionMap.put(Configuration.ORIENTATION_PORTRAIT, 0);
-        cacheNormalizationPositionMap.put(Configuration.ORIENTATION_LANDSCAPE, 0);
-    }
-
-    void putAnchorViewState(AnchorViewState anchorViewState) {
-        this.anchorViewState = anchorViewState;
-    }
-
-    AnchorViewState getAnchorViewState() {
-        return anchorViewState;
-    }
-
-    @DeviceOrientation
-    int getOrientation() {
-        return orientation;
-    }
-
-    void putOrientation(@DeviceOrientation int orientation) {
-        this.orientation = orientation;
-    }
-
-    @SuppressWarnings("unchecked")
-    private ParcelableContainer(Parcel parcel) {
-        anchorViewState = AnchorViewState.CREATOR.createFromParcel(parcel);
-        orientationCacheMap = parcel.readSparseArray(CacheParcelableContainer.class.getClassLoader());
-        cacheNormalizationPositionMap = parcel.readSparseArray(Integer.class.getClassLoader());
-        orientation = parcel.readInt();
-    }
-
-    @Override
-    public void writeToParcel(Parcel parcel, int i) {
-        anchorViewState.writeToParcel(parcel, i);
-        parcel.writeSparseArray(orientationCacheMap);
-        parcel.writeSparseArray(cacheNormalizationPositionMap);
-        parcel.writeInt(orientation);
-    }
-
-    void putPositionsCache(@DeviceOrientation int orientation, Parcelable parcelable) {
-        orientationCacheMap.put(orientation, parcelable);
-    }
-
-    void putNormalizationPosition(@DeviceOrientation int orientation, @Nullable Integer normalizationPosition) {
-        cacheNormalizationPositionMap.put(orientation, normalizationPosition);
-    }
-
-    @Nullable
-    Parcelable getPositionsCache(@DeviceOrientation int orientation) {
-        return (Parcelable) orientationCacheMap.get(orientation);
-    }
-
-    @IntRange(from = 0)
-    @Nullable
-    Integer getNormalizationPosition(@DeviceOrientation int orientation) {
-        return (Integer) cacheNormalizationPositionMap.get(orientation);
-    }
-
-    public static final Creator<ParcelableContainer> CREATOR = new Creator<ParcelableContainer>() {
-
-        @Override
-        public ParcelableContainer createFromParcel(Parcel parcel) {
-            return new ParcelableContainer(parcel);
-        }
-
-        @Override
-        public ParcelableContainer[] newArray(int i) {
-            return new ParcelableContainer[i];
-        }
-    };
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/RowStrategy.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/RowStrategy.java
deleted file mode 100644
index 3e879b5..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/RowStrategy.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.beloo.widget.chipslayoutmanager;
-
-
-import androidx.annotation.IntDef;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-@IntDef({ChipsLayoutManager.STRATEGY_DEFAULT,
-        ChipsLayoutManager.STRATEGY_FILL_SPACE,
-        ChipsLayoutManager.STRATEGY_FILL_VIEW,
-        ChipsLayoutManager.STRATEGY_CENTER,
-        ChipsLayoutManager.STRATEGY_CENTER_DENSE
-})
-@Retention(RetentionPolicy.SOURCE)
-public @interface RowStrategy {}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/ScrollingController.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/ScrollingController.java
deleted file mode 100644
index ea60ac8..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/ScrollingController.java
+++ /dev/null
@@ -1,258 +0,0 @@
-package com.beloo.widget.chipslayoutmanager;
-
-import android.view.View;
-
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.beloo.widget.chipslayoutmanager.anchor.AnchorViewState;
-import com.beloo.widget.chipslayoutmanager.layouter.ICanvas;
-import com.beloo.widget.chipslayoutmanager.layouter.IStateFactory;
-
-abstract class ScrollingController implements IScrollingController {
-
-    private ChipsLayoutManager lm;
-    private IScrollerListener scrollerListener;
-    private IStateFactory stateFactory;
-    ICanvas canvas;
-
-    interface IScrollerListener {
-        void onScrolled(IScrollingController scrollingController, RecyclerView.Recycler recycler, RecyclerView.State state);
-    }
-
-    ScrollingController(ChipsLayoutManager layoutManager, IStateFactory stateFactory, IScrollerListener scrollerListener) {
-        this.lm = layoutManager;
-        this.scrollerListener = scrollerListener;
-        this.stateFactory = stateFactory;
-        this.canvas = layoutManager.getCanvas();
-    }
-
-    final int calculateEndGap() {
-        if (lm.getChildCount() == 0) return 0;
-
-        int visibleViewsCount = lm.getCompletelyVisibleViewsCount();
-
-        if (visibleViewsCount == lm.getItemCount()) return 0;
-        int currentEnd = stateFactory.getEndViewBound();
-        int desiredEnd = stateFactory.getEndAfterPadding();
-
-        int diff = desiredEnd - currentEnd;
-        if (diff < 0) return 0;
-        return diff;
-    }
-
-    final int calculateStartGap() {
-        if (lm.getChildCount() == 0) return 0;
-        int currentStart = stateFactory.getStartViewBound();
-        int desiredStart = stateFactory.getStartAfterPadding();
-        int diff = currentStart - desiredStart;
-        if (diff < 0) return 0;
-        return diff;
-    }
-
-    @Override
-    public final boolean normalizeGaps(RecyclerView.Recycler recycler, RecyclerView.State state) {
-        int backwardGap = calculateStartGap();
-        if (backwardGap > 0) {
-            offsetChildren(-backwardGap);
-            //if we have normalized start gap, normalizing bottom have no sense
-            return true;
-        }
-
-        int forwardGap = calculateEndGap();
-        if (forwardGap > 0) {
-            scrollBy(-forwardGap, recycler, state);
-            return true;
-        }
-
-        return false;
-    }
-
-    final int calcOffset(int d) {
-        int childCount = lm.getChildCount();
-        if (childCount == 0) {
-            return 0;
-        }
-
-        int delta = 0;
-        if (d < 0) {   //if content scrolled down
-            delta = onContentScrolledBackward(d);
-        } else if (d > 0) { //if content scrolled up
-            delta = onContentScrolledForward(d);
-        }
-
-        return delta;
-    }
-
-    /**
-     * invoked when content scrolled forward (return to older items)
-     *
-     * @param d not processed changing of x or y axis, depending on lm state
-     * @return delta. Calculated changing of x or y axis, depending on lm state
-     */
-    final int onContentScrolledBackward(int d) {
-        int delta;
-
-        AnchorViewState anchor = lm.getAnchor();
-        if (anchor.getAnchorViewRect() == null) {
-            return 0;
-        }
-
-        if (anchor.getPosition() != 0) { //in case 0 position haven't added in layout yet
-            delta = d;
-        } else { //in case top view is a first view in adapter and wouldn't be any other view above
-            int startBorder = stateFactory.getStartAfterPadding();
-            int viewStart = stateFactory.getStart(anchor);
-            int distance;
-            distance = viewStart - startBorder;
-
-            if (distance >= 0) {
-                // in case over scroll on top border
-                delta = distance;
-            } else {
-                //in case first child showed partially
-                delta = Math.max(distance, d);
-            }
-        }
-
-        return delta;
-    }
-
-    /**
-     * invoked when content scrolled up (to newer items)
-     *
-     * @param d not processed changing of x or y axis, depending on lm state
-     * @return delta. Calculated changing of x or y axis, depending on lm state
-     */
-    final int onContentScrolledForward(int d) {
-        int childCount = lm.getChildCount();
-        int itemCount = lm.getItemCount();
-        int delta;
-
-        View lastView = lm.getChildAt(childCount - 1);
-        int lastViewAdapterPos = lm.getPosition(lastView);
-        if (lastViewAdapterPos < itemCount - 1) { //in case lower view isn't the last view in adapter
-            delta = d;
-        } else { //in case lower view is the last view in adapter and wouldn't be any other view below
-            int viewEnd = stateFactory.getEndViewBound();
-            int parentEnd = stateFactory.getEndAfterPadding();
-            delta = Math.min(viewEnd - parentEnd, d);
-        }
-
-        return delta;
-    }
-
-    abstract void offsetChildren(int d);
-
-    @Override
-    public final int scrollHorizontallyBy(int d, RecyclerView.Recycler recycler, RecyclerView.State state) {
-        return canScrollHorizontally()? scrollBy(d, recycler, state) : 0;
-    }
-
-    @Override
-    public final int scrollVerticallyBy(int d, RecyclerView.Recycler recycler, RecyclerView.State state) {
-        return canScrollVertically()? scrollBy(d, recycler, state) : 0;
-    }
-
-    private int scrollBy(int d, RecyclerView.Recycler recycler, RecyclerView.State state) {
-        d = calcOffset(d);
-        offsetChildren(-d);
-
-        scrollerListener.onScrolled(this, recycler, state);
-
-        return d;
-    }
-
-    private int getLaidOutArea() {
-        return stateFactory.getEndViewBound() -
-                stateFactory.getStartViewBound();
-    }
-
-    /** @see ChipsLayoutManager#computeVerticalScrollOffset(RecyclerView.State)
-     * @see ChipsLayoutManager#computeHorizontalScrollOffset(RecyclerView.State) */
-    private int computeScrollOffset(RecyclerView.State state) {
-        if (lm.getChildCount() == 0 || state.getItemCount() == 0) {
-            return 0;
-        }
-
-        int firstVisiblePos = lm.findFirstVisibleItemPosition();
-        int lastVisiblePos = lm.findLastVisibleItemPosition();
-        final int itemsBefore = Math.max(0, firstVisiblePos);
-
-        if (!lm.isSmoothScrollbarEnabled()) {
-            return itemsBefore;
-        }
-
-        final int itemRange = Math.abs(firstVisiblePos - lastVisiblePos) + 1;
-
-        final float avgSizePerRow = (float) getLaidOutArea() / itemRange;
-
-        return Math.round(itemsBefore * avgSizePerRow +
-                (stateFactory.getStartAfterPadding() - stateFactory.getStartViewBound()));
-    }
-
-    /** @see ChipsLayoutManager#computeVerticalScrollExtent(RecyclerView.State)
-     * @see ChipsLayoutManager#computeHorizontalScrollExtent(RecyclerView.State) */
-    private int computeScrollExtent(RecyclerView.State state) {
-        if (lm.getChildCount() == 0 || state.getItemCount() == 0) {
-            return 0;
-        }
-
-        int firstVisiblePos = lm.findFirstVisibleItemPosition();
-        int lastVisiblePos = lm.findLastVisibleItemPosition();
-
-        if (!lm.isSmoothScrollbarEnabled()) {
-            return Math.abs(lastVisiblePos - firstVisiblePos) + 1;
-        }
-
-        return Math.min(stateFactory.getTotalSpace(), getLaidOutArea());
-    }
-
-    private int computeScrollRange(RecyclerView.State state) {
-        if (lm.getChildCount() == 0 || state.getItemCount() == 0) {
-            return 0;
-        }
-
-        if (!lm.isSmoothScrollbarEnabled()) {
-            return state.getItemCount();
-        }
-
-        int firstVisiblePos = lm.findFirstVisibleItemPosition();
-        int lastVisiblePos = lm.findLastVisibleItemPosition();
-
-        // smooth scrollbar enabled. try to estimate better.
-        final int laidOutRange = Math.abs(firstVisiblePos - lastVisiblePos) + 1;
-
-        // estimate a size for full list.
-        return (int) ((float) getLaidOutArea() / laidOutRange * state.getItemCount());
-    }
-
-    @Override
-    public final int computeVerticalScrollExtent(RecyclerView.State state) {
-        return canScrollVertically() ? computeScrollExtent(state) : 0;
-    }
-
-    @Override
-    public final int computeVerticalScrollRange(RecyclerView.State state) {
-        return canScrollVertically() ? computeScrollRange(state) : 0;
-    }
-
-    @Override
-    public final int computeVerticalScrollOffset(RecyclerView.State state) {
-        return canScrollVertically() ? computeScrollOffset(state) : 0;
-    }
-
-    @Override
-    public final int computeHorizontalScrollRange(RecyclerView.State state) {
-        return canScrollHorizontally() ? computeScrollRange(state) : 0;
-    }
-
-    @Override
-    public final int computeHorizontalScrollOffset(RecyclerView.State state) {
-        return canScrollHorizontally() ? computeScrollOffset(state) : 0;
-    }
-
-    @Override
-    public final int computeHorizontalScrollExtent(RecyclerView.State state) {
-        return canScrollHorizontally() ? computeScrollExtent(state) : 0;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/SpacingItemDecoration.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/SpacingItemDecoration.java
deleted file mode 100644
index 2d17dde..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/SpacingItemDecoration.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.beloo.widget.chipslayoutmanager;
-
-import android.graphics.Rect;
-import android.view.View;
-
-import androidx.recyclerview.widget.RecyclerView;
-
-public class SpacingItemDecoration extends RecyclerView.ItemDecoration {
-    private int horizontalSpacing;
-    private int verticalSpacing;
-
-    public SpacingItemDecoration(int horizontalSpacing, int verticalSpacing) {
-        this.horizontalSpacing = horizontalSpacing;
-        this.verticalSpacing = verticalSpacing;
-    }
-
-    @Override
-    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
-        outRect.left = horizontalSpacing / 2;
-        outRect.right = horizontalSpacing / 2;
-        outRect.top = verticalSpacing / 2;
-        outRect.bottom = verticalSpacing /2;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/SpanLayoutChildGravity.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/SpanLayoutChildGravity.java
deleted file mode 100644
index 00719cf..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/SpanLayoutChildGravity.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.beloo.widget.chipslayoutmanager;
-
-import android.view.Gravity;
-
-import androidx.annotation.IntDef;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-@IntDef({Gravity.TOP,
-        Gravity.BOTTOM,
-        Gravity.CENTER,
-        Gravity.CENTER_VERTICAL,
-        Gravity.CENTER_HORIZONTAL,
-        Gravity.LEFT,
-        Gravity.RIGHT,
-        Gravity.FILL
-})
-@Retention(RetentionPolicy.SOURCE)
-public @interface SpanLayoutChildGravity {}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/VerticalScrollingController.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/VerticalScrollingController.java
deleted file mode 100644
index 01c4db5..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/VerticalScrollingController.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package com.beloo.widget.chipslayoutmanager;
-
-import android.content.Context;
-import android.graphics.PointF;
-import android.view.View;
-import android.view.animation.LinearInterpolator;
-
-import androidx.annotation.NonNull;
-import androidx.recyclerview.widget.LinearSmoothScroller;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.beloo.widget.chipslayoutmanager.anchor.AnchorViewState;
-import com.beloo.widget.chipslayoutmanager.layouter.IStateFactory;
-
-class VerticalScrollingController extends ScrollingController implements IScrollingController {
-
-    private ChipsLayoutManager lm;
-
-    VerticalScrollingController(ChipsLayoutManager layoutManager, IStateFactory stateFactory, IScrollerListener scrollerListener) {
-        super(layoutManager, stateFactory, scrollerListener);
-        this.lm = layoutManager;
-    }
-
-    @Override
-    public RecyclerView.SmoothScroller createSmoothScroller(@NonNull Context context, final int position, final int timeMs, final AnchorViewState anchor) {
-        return new LinearSmoothScroller(context) {
-            /*
-             * LinearSmoothScroller, at a minimum, just need to know the vector
-             * (x/y distance) to travel in order to get from the current positioning
-             * to the target.
-             */
-            @Override
-            public PointF computeScrollVectorForPosition(int targetPosition) {
-                int visiblePosition = anchor.getPosition();
-                //determine scroll up or scroll down needed
-                return new PointF(0, position > visiblePosition ? 1 : -1);
-            }
-
-            @Override
-            protected void onTargetFound(View targetView, RecyclerView.State state, Action action) {
-                super.onTargetFound(targetView, state, action);
-                int desiredTop = lm.getPaddingTop();
-                int currentTop = lm.getDecoratedTop(targetView);
-
-                int dy = currentTop - desiredTop;
-
-                //perform fit animation to move target view at top of layout
-                action.update(0, dy, timeMs, new LinearInterpolator());
-            }
-        };
-    }
-
-    @Override
-    public boolean canScrollVertically() {
-        canvas.findBorderViews();
-        if (lm.getChildCount() > 0) {
-            int top = lm.getDecoratedTop(canvas.getTopView());
-            int bottom = lm.getDecoratedBottom(canvas.getBottomView());
-
-            if (canvas.getMinPositionOnScreen() == 0
-                    && canvas.getMaxPositionOnScreen() == lm.getItemCount() - 1
-                    && top >= lm.getPaddingTop()
-                    && bottom <= lm.getHeight() - lm.getPaddingBottom()) {
-                return false;
-            }
-        } else {
-            return false;
-        }
-
-        return lm.isScrollingEnabledContract();
-    }
-
-    @Override
-    public boolean canScrollHorizontally() {
-        return false;
-    }
-
-    @Override
-    void offsetChildren(int d) {
-        lm.offsetChildrenVertical(d);
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/anchor/AbstractAnchorFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/anchor/AbstractAnchorFactory.java
deleted file mode 100644
index f743509..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/anchor/AbstractAnchorFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.anchor;
-
-import android.view.View;
-
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.beloo.widget.chipslayoutmanager.layouter.ICanvas;
-
-abstract class AbstractAnchorFactory implements IAnchorFactory {
-    RecyclerView.LayoutManager lm;
-    private ICanvas canvas;
-
-    AbstractAnchorFactory(RecyclerView.LayoutManager lm, ICanvas canvas) {
-        this.lm = lm;
-        this.canvas = canvas;
-    }
-
-    ICanvas getCanvas() {
-        return canvas;
-    }
-
-    AnchorViewState createAnchorState(View view) {
-        return new AnchorViewState(lm.getPosition(view), canvas.getViewRect(view));
-    }
-
-    @Override
-    public AnchorViewState createNotFound() {
-        return AnchorViewState.getNotFoundState();
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/anchor/AnchorViewState.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/anchor/AnchorViewState.java
deleted file mode 100644
index d207f18..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/anchor/AnchorViewState.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.anchor;
-
-import android.graphics.Rect;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import androidx.annotation.NonNull;
-
-import java.util.Locale;
-
-/**
- * represents View, which is highest visible left view
- */
-
-public class AnchorViewState implements Parcelable {
-    private Integer position = 0;
-    private Rect anchorViewRect;
-
-    private AnchorViewState() {
-    }
-
-    static AnchorViewState getNotFoundState() {
-        return new AnchorViewState();
-    }
-
-    AnchorViewState(int position, @NonNull Rect anchorViewRect) {
-        this.position = position;
-        this.anchorViewRect = anchorViewRect;
-    }
-
-    public boolean isNotFoundState() {
-        return anchorViewRect == null;
-    }
-
-    public Integer getPosition() {
-        return position;
-    }
-
-    public void setPosition(Integer position) {
-        this.position = position;
-    }
-
-    public Rect getAnchorViewRect() {
-        return anchorViewRect;
-    }
-
-    public void setAnchorViewRect(Rect anchorViewRect) {
-        this.anchorViewRect = anchorViewRect;
-    }
-
-    public boolean isRemoving() {
-        return getPosition() == -1;
-    }
-
-    //parcelable logic below
-
-    private AnchorViewState(Parcel parcel) {
-        int parcelPosition = parcel.readInt();
-        position = parcelPosition == -1? null : parcelPosition;
-        anchorViewRect = parcel.readParcelable(AnchorViewState.class.getClassLoader());
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(Parcel parcel, int i) {
-        parcel.writeInt(position == null? -1 : position);
-        parcel.writeParcelable(anchorViewRect, 0);
-    }
-
-    public static final Parcelable.Creator<AnchorViewState> CREATOR = new Parcelable.Creator<AnchorViewState>() {
-        // unpack Object from Parcel
-        public AnchorViewState createFromParcel(Parcel in) {
-            return new AnchorViewState(in);
-        }
-
-        public AnchorViewState[] newArray(int size) {
-            return new AnchorViewState[size];
-        }
-    };
-
-    @Override
-    public String toString() {
-        return String.format(Locale.getDefault(), "AnchorState. Position = %d, Rect = %s", position, String.valueOf(anchorViewRect));
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/anchor/ColumnsAnchorFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/anchor/ColumnsAnchorFactory.java
deleted file mode 100644
index a2cd515..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/anchor/ColumnsAnchorFactory.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.anchor;
-
-import android.graphics.Rect;
-import android.view.View;
-
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.beloo.widget.chipslayoutmanager.ChildViewsIterable;
-import com.beloo.widget.chipslayoutmanager.layouter.ICanvas;
-
-public class ColumnsAnchorFactory extends AbstractAnchorFactory {
-
-    private ChildViewsIterable childViews;
-
-    public ColumnsAnchorFactory(RecyclerView.LayoutManager lm, ICanvas canvas) {
-        super(lm, canvas);
-        childViews = new ChildViewsIterable(lm);
-    }
-
-    /** get the closest views to left border. The highest view will be picked from it. */
-    @Override
-    public AnchorViewState getAnchor() {
-
-        AnchorViewState minPosView = AnchorViewState.getNotFoundState();
-
-        int minPosition = Integer.MAX_VALUE;
-        int minLeft = Integer.MAX_VALUE;
-        int maxRight = Integer.MIN_VALUE;
-
-        for (View view : childViews) {
-            AnchorViewState anchorViewState = createAnchorState(view);
-            int pos = lm.getPosition(view);
-            int left = lm.getDecoratedLeft(view);
-            int right = lm.getDecoratedRight(view);
-
-            Rect viewRect = new Rect(anchorViewState.getAnchorViewRect());
-
-            if (getCanvas().isInside(viewRect) && !anchorViewState.isRemoving()) {
-                if (minPosition > pos) {
-                    minPosition = pos;
-                    minPosView = anchorViewState;
-                }
-
-                if (minLeft > left) {
-                    minLeft = left;
-                    maxRight = right;
-                } else if (minLeft == left) {
-                    maxRight = Math.max(maxRight, right);
-                }
-
-            }
-        }
-
-        if (!minPosView.isNotFoundState()) {
-            minPosView.getAnchorViewRect().left = minLeft;
-            minPosView.getAnchorViewRect().right = maxRight;
-
-            minPosView.setPosition(minPosition);
-        }
-
-        return minPosView;
-    }
-
-    @Override
-    public void resetRowCoordinates(AnchorViewState anchorView) {
-        if (!anchorView.isNotFoundState()) {
-            Rect rect = anchorView.getAnchorViewRect();
-            rect.top = getCanvas().getCanvasTopBorder();
-            rect.bottom = getCanvas().getCanvasBottomBorder();
-        }
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/anchor/IAnchorFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/anchor/IAnchorFactory.java
deleted file mode 100644
index 256e292..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/anchor/IAnchorFactory.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.anchor;
-
-public interface IAnchorFactory {
-    /** find the view in a higher row which is closest to the left border*/
-    AnchorViewState getAnchor();
-
-    AnchorViewState createNotFound();
-
-    /** modify anchorView state according to pre-layout state */
-    void resetRowCoordinates(AnchorViewState anchorView);
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/anchor/RowsAnchorFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/anchor/RowsAnchorFactory.java
deleted file mode 100644
index c2f5dab..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/anchor/RowsAnchorFactory.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.anchor;
-
-import android.graphics.Rect;
-import android.view.View;
-
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.beloo.widget.chipslayoutmanager.ChildViewsIterable;
-import com.beloo.widget.chipslayoutmanager.layouter.ICanvas;
-
-public class RowsAnchorFactory extends AbstractAnchorFactory {
-
-    private ChildViewsIterable childViews;
-
-    public RowsAnchorFactory(RecyclerView.LayoutManager lm, ICanvas canvas) {
-        super(lm, canvas);
-        childViews = new ChildViewsIterable(lm);
-    }
-
-    /** get the highest views in layout. The closest to left border view will be picked from it. */
-    @Override
-    public AnchorViewState getAnchor() {
-
-        AnchorViewState minPosView = AnchorViewState.getNotFoundState();
-
-        int minPosition = Integer.MAX_VALUE;
-        int minTop = Integer.MAX_VALUE;
-
-        for (View view : childViews) {
-            AnchorViewState anchorViewState = createAnchorState(view);
-            int pos = lm.getPosition(view);
-            int top = lm.getDecoratedTop(view);
-
-            Rect viewRect = new Rect(anchorViewState.getAnchorViewRect());
-
-            if (getCanvas().isInside(viewRect) && !anchorViewState.isRemoving()) {
-                if (minPosition > pos) {
-                    minPosition = pos;
-                    minPosView = anchorViewState;
-                }
-
-                if (minTop > top) {
-                    minTop = top;
-                }
-            }
-        }
-
-        if (!minPosView.isNotFoundState()) {
-            minPosView.getAnchorViewRect().top = minTop;
-            /* we don't need bottom coordinate for layouter
-            also this helps to normalize row properly when anchor deleted and was the biggest view in a row
-            */
-            minPosView.setPosition(minPosition);
-        }
-
-        return minPosView;
-    }
-
-    @Override
-    public void resetRowCoordinates(AnchorViewState anchorView) {
-        if (!anchorView.isNotFoundState()) {
-            Rect rect = anchorView.getAnchorViewRect();
-            rect.left = getCanvas().getCanvasLeftBorder();
-            rect.right = getCanvas().getCanvasRightBorder();
-        }
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/cache/CacheParcelableContainer.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/cache/CacheParcelableContainer.java
deleted file mode 100644
index 55a31eb..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/cache/CacheParcelableContainer.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.cache;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.NavigableSet;
-import java.util.TreeSet;
-
-public final class CacheParcelableContainer implements Parcelable {
-    private NavigableSet<Integer> startsRow = new TreeSet<>();
-    private NavigableSet<Integer> endsRow = new TreeSet<>();
-
-    CacheParcelableContainer(NavigableSet<Integer> startsRow, NavigableSet<Integer> endsRow) {
-        this.startsRow = startsRow;
-        this.endsRow = endsRow;
-    }
-
-    private CacheParcelableContainer(Parcel in) {
-        List<Integer> startsRowList = new LinkedList<>();
-        List<Integer> endsRowList = new LinkedList<>();
-        in.readList(startsRowList, Integer.class.getClassLoader());
-        in.readList(endsRowList, Integer.class.getClassLoader());
-
-        startsRow = new TreeSet<>(startsRowList);
-        endsRow = new TreeSet<>(endsRowList);
-    }
-
-    @Override
-    public void writeToParcel(Parcel parcel, int i) {
-        List<Integer> startRowList = new LinkedList<>(startsRow);
-        List<Integer> endRowList = new LinkedList<>(endsRow);
-
-        parcel.writeList(startRowList);
-        parcel.writeList(endRowList);
-    }
-
-    NavigableSet<Integer> getStartsRow() {
-        return startsRow;
-    }
-
-    NavigableSet<Integer> getEndsRow() {
-        return endsRow;
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    public static final Creator<CacheParcelableContainer> CREATOR = new Creator<CacheParcelableContainer>() {
-        @Override
-        public CacheParcelableContainer createFromParcel(Parcel in) {
-            return new CacheParcelableContainer(in);
-        }
-
-        @Override
-        public CacheParcelableContainer[] newArray(int size) {
-            return new CacheParcelableContainer[size];
-        }
-    };
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/cache/IViewCacheStorage.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/cache/IViewCacheStorage.java
deleted file mode 100644
index 24bc46e..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/cache/IViewCacheStorage.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.cache;
-
-import android.graphics.Rect;
-import android.os.Parcelable;
-import android.util.Pair;
-import android.view.View;
-
-import androidx.annotation.Nullable;
-
-import java.util.List;
-
-public interface IViewCacheStorage {
-
-    boolean isPositionEndsRow(int position);
-
-    boolean isPositionStartsRow(int position);
-
-    void setCachingEnabled(boolean isEnabled);
-
-    boolean isCachingEnabled();
-
-    int getStartOfRow(int endRow);
-
-    void storeRow(List<Pair<Rect, View>> row);
-
-    boolean isInCache(int position);
-
-    /** purge whole cache*/
-    void purge();
-
-    /** all cache to selected position will be purged
-     * @param position the end position, exclusive */
-    void purgeCacheToPosition(int position);
-
-    @Nullable
-    /** @return null if cache empty*/
-    Integer getLastCachePosition();
-
-    boolean isCacheEmpty();
-
-    /** all cache from selected position will be purged
-     * @param position the start position, inclusive */
-    void purgeCacheFromPosition(int position);
-
-    /** onSaveInstanceState cache storage content to {@link Parcelable}*/
-    Parcelable onSaveInstanceState();
-
-    void onRestoreInstanceState(@Nullable Parcelable parcelable);
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/cache/ViewCacheFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/cache/ViewCacheFactory.java
deleted file mode 100644
index b08afa0..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/cache/ViewCacheFactory.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.cache;
-
-
-import androidx.recyclerview.widget.RecyclerView;
-
-public class ViewCacheFactory {
-
-    private RecyclerView.LayoutManager layoutManager;
-
-    public ViewCacheFactory(RecyclerView.LayoutManager layoutManager) {
-        this.layoutManager = layoutManager;
-    }
-
-    public IViewCacheStorage createCacheStorage() {
-        return new ViewCacheStorage(layoutManager);
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/cache/ViewCacheStorage.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/cache/ViewCacheStorage.java
deleted file mode 100644
index e6532a6..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/cache/ViewCacheStorage.java
+++ /dev/null
@@ -1,168 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.cache;
-
-import android.graphics.Rect;
-import android.os.Parcelable;
-import android.util.Log;
-import android.util.Pair;
-import android.view.View;
-
-import androidx.annotation.Nullable;
-import androidx.recyclerview.widget.RecyclerView;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.NavigableSet;
-import java.util.TreeSet;
-
-class ViewCacheStorage implements IViewCacheStorage {
-    private static final String TAG = ViewCacheStorage.class.getSimpleName();
-    private static final int SIZE_MAX_CACHE = 1000;
-
-    private RecyclerView.LayoutManager layoutManager;
-    private NavigableSet<Integer> startsRow = new TreeSet<>();
-    private NavigableSet<Integer> endsRow = new TreeSet<>();
-    private int maxCacheSize = SIZE_MAX_CACHE;
-    private boolean isCachingEnabled;
-
-    ViewCacheStorage(RecyclerView.LayoutManager layoutManager) {
-        this.layoutManager = layoutManager;
-        isCachingEnabled = true;
-    }
-
-    public void setMaxCacheSize(int maxCacheSize) {
-        this.maxCacheSize = maxCacheSize;
-    }
-
-    @Override
-    public boolean isCachingEnabled() {
-        return isCachingEnabled;
-    }
-
-    @Override
-    public int getStartOfRow(int positionInRow) {
-        Integer integer = startsRow.floor(positionInRow);
-        if (integer == null) {
-            integer = positionInRow;
-        }
-        return integer;
-    }
-
-    @Override
-    public boolean isPositionEndsRow(int position) {
-        return endsRow.contains(position);
-    }
-
-    @Override
-    public boolean isPositionStartsRow(int position) {
-        return startsRow.contains(position);
-    }
-
-    @Override
-    public void setCachingEnabled(boolean isEnabled) {
-        if (isCachingEnabled == isEnabled) return;
-        Log.i(TAG, isEnabled ? "caching enabled" : "caching disabled");
-        isCachingEnabled = isEnabled;
-    }
-
-    //todo test max size cache reached
-    private void checkCacheSizeReached() {
-        if (startsRow.size() > maxCacheSize) {
-            startsRow.remove(startsRow.first());
-        }
-        if (endsRow.size() > maxCacheSize) {
-            endsRow.remove(endsRow.first());
-        }
-    }
-
-    @Override
-    public void storeRow(List<Pair<Rect, View>> row) {
-        if (isCachingEnabled && !row.isEmpty()) {
-
-            Pair<Rect, View> firstPair = row.get(0);
-            Pair<Rect, View> secondPair = row.get(row.size()-1);
-
-            int startPosition = layoutManager.getPosition(firstPair.second);
-            int endPosition = layoutManager.getPosition(secondPair.second);
-
-            checkCacheSizeReached();
-
-            startsRow.add(startPosition);
-            endsRow.add(endPosition);
-        }
-    }
-
-    @Override
-    public boolean isInCache(int position) {
-        return startsRow.ceiling(position) != null || endsRow.ceiling(position) != null;
-    }
-
-    @Override
-    public void purge() {
-        startsRow.clear();
-        endsRow.clear();
-    }
-
-
-    @Override
-    public void purgeCacheToPosition(int position) {
-        if (isCacheEmpty()) return;
-        Log.d(TAG, "cache purged to position " + position);
-        Iterator<Integer> removeIterator = startsRow.headSet(position).iterator();
-        while (removeIterator.hasNext()) {
-            removeIterator.next();
-            removeIterator.remove();
-        }
-
-        removeIterator = endsRow.headSet(position).iterator();
-        while (removeIterator.hasNext()) {
-            removeIterator.next();
-            removeIterator.remove();
-        }
-    }
-
-    @Override
-
-    public Integer getLastCachePosition() {
-        if (isCacheEmpty()) return null;
-        return endsRow.last();
-    }
-
-    @Override
-    public boolean isCacheEmpty() {
-        return endsRow.isEmpty();
-    }
-
-
-    @Override
-    public void purgeCacheFromPosition(int position) {
-        if (isCacheEmpty()) return;
-
-        Iterator<Integer> removeIterator = startsRow.tailSet(position, true).iterator();
-        while (removeIterator.hasNext()) {
-            removeIterator.next();
-            removeIterator.remove();
-        }
-        Integer previous = startsRow.lower(position);
-        previous = previous == null? position : previous;
-
-        //we should also remove previous end row cache to guarantee consistency
-        removeIterator = endsRow.tailSet(previous, true).iterator();
-        while (removeIterator.hasNext()) {
-            removeIterator.next();
-            removeIterator.remove();
-        }
-    }
-
-    @Override
-    public Parcelable onSaveInstanceState() {
-        return new CacheParcelableContainer(startsRow, endsRow);
-    }
-
-    public void onRestoreInstanceState(@Nullable Parcelable parcelable) {
-        if (parcelable == null) return;
-        if (!(parcelable instanceof CacheParcelableContainer)) throw new IllegalStateException("wrong parcelable passed");
-        CacheParcelableContainer container = (CacheParcelableContainer) parcelable;
-        startsRow = container.getStartsRow();
-        endsRow = container.getEndsRow();
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/BottomGravityModifier.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/BottomGravityModifier.java
deleted file mode 100644
index dad3f5e..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/BottomGravityModifier.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-class BottomGravityModifier implements IGravityModifier {
-    @Override
-    public Rect modifyChildRect(int minStart, int maxEnd, Rect childRect) {
-        if (childRect.top < minStart) {
-            throw new IllegalArgumentException("top point of input rect can't be lower than minTop");
-        }
-        if (childRect.bottom > maxEnd) {
-            throw new IllegalArgumentException("bottom point of input rect can't be bigger than maxTop");
-        }
-        Rect modified = new Rect(childRect);
-
-        if (modified.bottom < maxEnd) {
-            modified.top += maxEnd - modified.bottom;
-            modified.bottom = maxEnd;
-        }
-        return modified;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/CenterChildGravity.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/CenterChildGravity.java
deleted file mode 100644
index 98b6b23..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/CenterChildGravity.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.view.Gravity;
-
-import com.beloo.widget.chipslayoutmanager.SpanLayoutChildGravity;
-
-public class CenterChildGravity implements IChildGravityResolver {
-    @Override
-    @SpanLayoutChildGravity
-    public int getItemGravity(int position) {
-        return Gravity.CENTER_VERTICAL;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/CenterInColumnGravityModifier.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/CenterInColumnGravityModifier.java
deleted file mode 100644
index dc3f9b8..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/CenterInColumnGravityModifier.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-class CenterInColumnGravityModifier implements IGravityModifier {
-
-    @Override
-    public Rect modifyChildRect(int minStart, int maxEnd, Rect childRect) {
-        childRect = new Rect(childRect);
-
-        int placeWidth = maxEnd - minStart;
-
-        int rectWidth = childRect.right - childRect.left;
-        int halfOffset = (placeWidth - rectWidth)/2;
-
-        childRect.left = minStart + halfOffset;
-        childRect.right = maxEnd - halfOffset;
-
-        return childRect;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/CenterInRowGravityModifier.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/CenterInRowGravityModifier.java
deleted file mode 100644
index f23eac9..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/CenterInRowGravityModifier.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-class CenterInRowGravityModifier implements IGravityModifier {
-    @Override
-    public Rect modifyChildRect(int minStart, int maxEnd, Rect childRect) {
-        if (childRect.top < minStart) {
-            throw new IllegalArgumentException("top point of input rect can't be lower than minTop");
-        }
-        if (childRect.bottom > maxEnd) {
-            throw new IllegalArgumentException("bottom point of input rect can't be bigger than maxTop");
-        }
-
-        childRect = new Rect(childRect);
-
-        int placeHeight = maxEnd - minStart;
-        int rectHeight = childRect.bottom - childRect.top;
-        //calculate needed offset
-        int halfOffset = (placeHeight - rectHeight)/2;
-
-        childRect.top = minStart + halfOffset;
-        childRect.bottom = maxEnd - halfOffset;
-
-        return childRect;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/ColumnFillSpaceCenterDenseStrategy.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/ColumnFillSpaceCenterDenseStrategy.java
deleted file mode 100644
index d4f2e9e..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/ColumnFillSpaceCenterDenseStrategy.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-import com.beloo.widget.chipslayoutmanager.layouter.Item;
-
-import java.util.List;
-
-class ColumnFillSpaceCenterDenseStrategy implements IRowStrategy {
-
-    @Override
-    public void applyStrategy(AbstractLayouter abstractLayouter, List<Item> row) {
-        int difference = GravityUtil.getVerticalDifference(abstractLayouter) / 2;
-
-        for (Item item : row) {
-            Rect childRect = item.getViewRect();
-            childRect.top += difference;
-            childRect.bottom += difference;
-        }
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/ColumnFillSpaceCenterStrategy.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/ColumnFillSpaceCenterStrategy.java
deleted file mode 100644
index de65417..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/ColumnFillSpaceCenterStrategy.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-import com.beloo.widget.chipslayoutmanager.layouter.Item;
-
-import java.util.List;
-
-class ColumnFillSpaceCenterStrategy implements IRowStrategy {
-
-    @Override
-    public void applyStrategy(AbstractLayouter abstractLayouter, List<Item> row) {
-        int difference = GravityUtil.getVerticalDifference(abstractLayouter) / (abstractLayouter.getRowSize() + 1);
-        int offsetDifference = 0;
-
-        for (Item item : row) {
-            Rect childRect = item.getViewRect();
-
-            offsetDifference += difference;
-
-            childRect.top += offsetDifference;
-            childRect.bottom += offsetDifference;
-        }
-
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/ColumnFillSpaceStrategy.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/ColumnFillSpaceStrategy.java
deleted file mode 100644
index c610563..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/ColumnFillSpaceStrategy.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-import com.beloo.widget.chipslayoutmanager.layouter.Item;
-
-import java.util.List;
-
-class ColumnFillSpaceStrategy implements IRowStrategy {
-
-    @Override
-    public void applyStrategy(AbstractLayouter abstractLayouter, List<Item> row) {
-        if (abstractLayouter.getRowSize() == 1) return;
-        int difference = GravityUtil.getVerticalDifference(abstractLayouter) / (abstractLayouter.getRowSize() - 1);
-        int offsetDifference = 0;
-
-        for (Item item : row) {
-            Rect childRect = item.getViewRect();
-
-            if (childRect.top == abstractLayouter.getCanvasTopBorder()) {
-                //highest view of row
-
-                int topDif = childRect.top - abstractLayouter.getCanvasTopBorder();
-                //press view to top border
-                childRect.top = abstractLayouter.getCanvasTopBorder();
-                childRect.bottom -= topDif;
-                continue;
-            }
-            offsetDifference += difference;
-
-            childRect.top += offsetDifference;
-            childRect.bottom += offsetDifference;
-        }
-
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/ColumnFillStrategy.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/ColumnFillStrategy.java
deleted file mode 100644
index bd0f94f..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/ColumnFillStrategy.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-import com.beloo.widget.chipslayoutmanager.layouter.Item;
-
-import java.util.List;
-
-class ColumnFillStrategy implements IRowStrategy {
-
-    @Override
-    public void applyStrategy(AbstractLayouter abstractLayouter, List<Item> row) {
-        int difference = GravityUtil.getVerticalDifference(abstractLayouter) / abstractLayouter.getRowSize();
-        int offsetDifference = difference;
-
-        for (Item item : row) {
-            Rect childRect = item.getViewRect();
-
-            if (childRect.top == abstractLayouter.getCanvasTopBorder()) {
-                //highest view of row
-
-                int topDif = childRect.top - abstractLayouter.getCanvasTopBorder();
-                //press view to top border
-                childRect.top = abstractLayouter.getCanvasTopBorder();
-                childRect.bottom -= topDif;
-
-                //increase view height from bottom
-                childRect.bottom += offsetDifference;
-                continue;
-            }
-
-            childRect.top += offsetDifference;
-            offsetDifference += difference;
-            childRect.bottom += offsetDifference;
-        }
-
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/ColumnGravityModifiersFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/ColumnGravityModifiersFactory.java
deleted file mode 100644
index a8db31d..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/ColumnGravityModifiersFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.util.SparseArray;
-import android.view.Gravity;
-
-import com.beloo.widget.chipslayoutmanager.SpanLayoutChildGravity;
-
-public class ColumnGravityModifiersFactory implements IGravityModifiersFactory {
-
-    private SparseArray<IGravityModifier> gravityModifierMap;
-
-    public ColumnGravityModifiersFactory() {
-        gravityModifierMap = new SparseArray<>();
-
-        CenterInColumnGravityModifier centerGravityModifier = new CenterInColumnGravityModifier();
-
-        gravityModifierMap.put(Gravity.CENTER, centerGravityModifier);
-        gravityModifierMap.put(Gravity.CENTER_HORIZONTAL, centerGravityModifier);
-        gravityModifierMap.put(Gravity.LEFT, new LeftGravityModifier());
-        gravityModifierMap.put(Gravity.RIGHT, new RightGravityModifier());
-    }
-
-    public IGravityModifier getGravityModifier(@SpanLayoutChildGravity int gravity) {
-        IGravityModifier gravityModifier = gravityModifierMap.get(gravity);
-        if (gravityModifier == null) {
-            gravityModifier = gravityModifierMap.get(Gravity.CENTER_HORIZONTAL);
-        }
-        return gravityModifier;
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/ColumnStrategyFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/ColumnStrategyFactory.java
deleted file mode 100644
index ac89bdb..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/ColumnStrategyFactory.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import com.beloo.widget.chipslayoutmanager.ChipsLayoutManager;
-import com.beloo.widget.chipslayoutmanager.RowStrategy;
-
-public class ColumnStrategyFactory implements IRowStrategyFactory {
-
-    @Override
-    public IRowStrategy createRowStrategy(@RowStrategy int rowStrategy) {
-        switch (rowStrategy) {
-            case ChipsLayoutManager.STRATEGY_CENTER:
-                return new ColumnFillSpaceCenterStrategy();
-            case ChipsLayoutManager.STRATEGY_CENTER_DENSE:
-                return new ColumnFillSpaceCenterDenseStrategy();
-            case ChipsLayoutManager.STRATEGY_FILL_SPACE:
-                return new ColumnFillSpaceStrategy();
-            case ChipsLayoutManager.STRATEGY_FILL_VIEW:
-                return new ColumnFillStrategy();
-            case ChipsLayoutManager.STRATEGY_DEFAULT:
-            default:
-                return new EmptyRowStrategy();
-        }
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/CustomGravityResolver.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/CustomGravityResolver.java
deleted file mode 100644
index 62c3468..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/CustomGravityResolver.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import com.beloo.widget.chipslayoutmanager.SpanLayoutChildGravity;
-
-public class CustomGravityResolver implements IChildGravityResolver {
-
-    @SpanLayoutChildGravity
-    private int gravity;
-
-    public CustomGravityResolver(int gravity) {
-        this.gravity = gravity;
-    }
-
-    @Override
-    @SpanLayoutChildGravity
-    public int getItemGravity(int position) {
-        return gravity;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/EmptyRowStrategy.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/EmptyRowStrategy.java
deleted file mode 100644
index 94752eb..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/EmptyRowStrategy.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-import com.beloo.widget.chipslayoutmanager.layouter.Item;
-
-import java.util.List;
-
-class EmptyRowStrategy implements IRowStrategy {
-    @Override
-    public void applyStrategy(AbstractLayouter abstractLayouter, List<Item> row) {
-        //do nothing
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/GravityUtil.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/GravityUtil.java
deleted file mode 100644
index 3a51006..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/GravityUtil.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-abstract class GravityUtil {
-
-    static int getHorizontalDifference(AbstractLayouter layouter) {
-        return layouter.getCanvasRightBorder() - layouter.getCanvasLeftBorder() - layouter.getRowLength();
-    }
-
-    static int getVerticalDifference(AbstractLayouter layouter) {
-        return layouter.getCanvasBottomBorder() - layouter.getCanvasTopBorder() - layouter.getRowLength();
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/IChildGravityResolver.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/IChildGravityResolver.java
deleted file mode 100644
index 097219b..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/IChildGravityResolver.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import com.beloo.widget.chipslayoutmanager.SpanLayoutChildGravity;
-
-/** class which determines child gravity inside row from child position */
-public interface IChildGravityResolver {
-    @SpanLayoutChildGravity
-    int getItemGravity(int position);
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/IGravityModifier.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/IGravityModifier.java
deleted file mode 100644
index 256fbd3..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/IGravityModifier.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-import androidx.annotation.IntRange;
-
-public interface IGravityModifier {
-    /** @return created rect based on modified input rect due to concrete gravity modifier.
-     * @param childRect input rect. Immutable*/
-    Rect modifyChildRect(@IntRange(from = 0) int minTop, @IntRange(from = 0) int maxBottom, Rect childRect);
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/IGravityModifiersFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/IGravityModifiersFactory.java
deleted file mode 100644
index 1d791a8..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/IGravityModifiersFactory.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import com.beloo.widget.chipslayoutmanager.SpanLayoutChildGravity;
-
-public interface IGravityModifiersFactory {
-    IGravityModifier getGravityModifier(@SpanLayoutChildGravity int gravity);
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/IRowStrategy.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/IRowStrategy.java
deleted file mode 100644
index 98d4c84..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/IRowStrategy.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-import com.beloo.widget.chipslayoutmanager.layouter.Item;
-
-import java.util.List;
-
-public interface IRowStrategy {
-    void applyStrategy(AbstractLayouter abstractLayouter, List<Item> row);
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/IRowStrategyFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/IRowStrategyFactory.java
deleted file mode 100644
index 6052c86..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/IRowStrategyFactory.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import com.beloo.widget.chipslayoutmanager.RowStrategy;
-
-public interface IRowStrategyFactory {
-    IRowStrategy createRowStrategy(@RowStrategy int rowStrategy);
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/LTRRowFillSpaceCenterDenseStrategy.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/LTRRowFillSpaceCenterDenseStrategy.java
deleted file mode 100644
index abfe896..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/LTRRowFillSpaceCenterDenseStrategy.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-import com.beloo.widget.chipslayoutmanager.layouter.Item;
-
-import java.util.List;
-
-class LTRRowFillSpaceCenterDenseStrategy implements IRowStrategy {
-
-    @Override
-    public void applyStrategy(AbstractLayouter abstractLayouter, List<Item> row) {
-        int difference = GravityUtil.getHorizontalDifference(abstractLayouter) / 2;
-
-        for (Item item : row) {
-            Rect childRect = item.getViewRect();
-            childRect.left += difference;
-            childRect.right += difference;
-        }
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/LTRRowFillSpaceCenterStrategy.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/LTRRowFillSpaceCenterStrategy.java
deleted file mode 100644
index 017db38..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/LTRRowFillSpaceCenterStrategy.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-import com.beloo.widget.chipslayoutmanager.layouter.Item;
-
-import java.util.List;
-
-class LTRRowFillSpaceCenterStrategy implements IRowStrategy {
-
-    @Override
-    public void applyStrategy(AbstractLayouter abstractLayouter, List<Item> row) {
-        int difference = GravityUtil.getHorizontalDifference(abstractLayouter) / (abstractLayouter.getRowSize() + 1);
-        int offsetDifference = 0;
-
-        for (Item item : row) {
-            Rect childRect = item.getViewRect();
-
-            offsetDifference += difference;
-
-            childRect.left += offsetDifference;
-            childRect.right += offsetDifference;
-        }
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/LTRRowFillSpaceStrategy.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/LTRRowFillSpaceStrategy.java
deleted file mode 100644
index 7922b7c..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/LTRRowFillSpaceStrategy.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-import com.beloo.widget.chipslayoutmanager.layouter.Item;
-
-import java.util.List;
-
-class LTRRowFillSpaceStrategy implements IRowStrategy {
-
-    @Override
-    public void applyStrategy(AbstractLayouter abstractLayouter, List<Item> row) {
-        if (abstractLayouter.getRowSize() == 1) return;
-        int difference = GravityUtil.getHorizontalDifference(abstractLayouter) / (abstractLayouter.getRowSize() - 1);
-        int offsetDifference = 0;
-
-        for (Item item : row) {
-            Rect childRect = item.getViewRect();
-
-            if (childRect.left == abstractLayouter.getCanvasLeftBorder()) {
-                //left view of row
-
-                int leftDif = childRect.left - abstractLayouter.getCanvasLeftBorder();
-                //press view to left border
-                childRect.left = abstractLayouter.getCanvasLeftBorder();
-                childRect.right -= leftDif;
-                continue;
-            }
-            offsetDifference += difference;
-
-            childRect.left += offsetDifference;
-            childRect.right += offsetDifference;
-        }
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/LTRRowFillStrategy.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/LTRRowFillStrategy.java
deleted file mode 100644
index 81cc783..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/LTRRowFillStrategy.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-import com.beloo.widget.chipslayoutmanager.layouter.Item;
-
-import java.util.List;
-
-class LTRRowFillStrategy implements IRowStrategy {
-
-    @Override
-    public void applyStrategy(AbstractLayouter abstractLayouter, List<Item> row) {
-        int difference = GravityUtil.getHorizontalDifference(abstractLayouter) / abstractLayouter.getRowSize();
-        int offsetDifference = difference;
-
-        for (Item item : row) {
-
-            Rect childRect = item.getViewRect();
-
-            if (childRect.left == abstractLayouter.getCanvasLeftBorder()) {
-                //left view of row
-
-                int leftDif = childRect.left - abstractLayouter.getCanvasLeftBorder();
-                //press view to left border
-                childRect.left = abstractLayouter.getCanvasLeftBorder();
-                childRect.right -= leftDif;
-
-                //increase view width from right
-                childRect.right += offsetDifference;
-                continue;
-            }
-
-            childRect.left += offsetDifference;
-            offsetDifference += difference;
-            childRect.right += offsetDifference;
-        }
-
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/LTRRowStrategyFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/LTRRowStrategyFactory.java
deleted file mode 100644
index 0171e10..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/LTRRowStrategyFactory.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import com.beloo.widget.chipslayoutmanager.ChipsLayoutManager;
-import com.beloo.widget.chipslayoutmanager.RowStrategy;
-
-public class LTRRowStrategyFactory implements IRowStrategyFactory {
-
-    @Override
-    public IRowStrategy createRowStrategy(@RowStrategy int rowStrategy) {
-        switch (rowStrategy) {
-            case ChipsLayoutManager.STRATEGY_CENTER:
-                return new LTRRowFillSpaceCenterStrategy();
-            case ChipsLayoutManager.STRATEGY_CENTER_DENSE:
-                return new LTRRowFillSpaceCenterDenseStrategy();
-            case ChipsLayoutManager.STRATEGY_FILL_SPACE:
-                return new LTRRowFillSpaceStrategy();
-            case ChipsLayoutManager.STRATEGY_FILL_VIEW:
-                return new LTRRowFillStrategy();
-            case ChipsLayoutManager.STRATEGY_DEFAULT:
-            default:
-                return new EmptyRowStrategy();
-        }
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/LeftGravityModifier.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/LeftGravityModifier.java
deleted file mode 100644
index f4f91c5..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/LeftGravityModifier.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-class LeftGravityModifier implements IGravityModifier {
-
-    @Override
-    public Rect modifyChildRect(int minStart, int maxEnd, Rect childRect) {
-        childRect = new Rect(childRect);
-
-        if (childRect.left > minStart) {
-            childRect.right -= (childRect.left - minStart);
-            childRect.left = minStart;
-        }
-
-        return childRect;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/RTLRowFillSpaceCenterDenseStrategy.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/RTLRowFillSpaceCenterDenseStrategy.java
deleted file mode 100644
index 3a3faa2..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/RTLRowFillSpaceCenterDenseStrategy.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-import com.beloo.widget.chipslayoutmanager.layouter.Item;
-
-import java.util.List;
-
-class RTLRowFillSpaceCenterDenseStrategy implements IRowStrategy {
-
-    @Override
-    public void applyStrategy(AbstractLayouter abstractLayouter, List<Item> row) {
-        int difference = GravityUtil.getHorizontalDifference(abstractLayouter) / 2;
-
-        for (Item item : row) {
-            Rect childRect = item.getViewRect();
-            childRect.left -= difference;
-            childRect.right -= difference;
-        }
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/RTLRowFillSpaceCenterStrategy.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/RTLRowFillSpaceCenterStrategy.java
deleted file mode 100644
index c1b2229..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/RTLRowFillSpaceCenterStrategy.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-import com.beloo.widget.chipslayoutmanager.layouter.Item;
-
-import java.util.List;
-
-class RTLRowFillSpaceCenterStrategy implements IRowStrategy {
-
-    @Override
-    public void applyStrategy(AbstractLayouter abstractLayouter, List<Item> row) {
-        int difference = GravityUtil.getHorizontalDifference(abstractLayouter) / (abstractLayouter.getRowSize() + 1);
-        int offsetDifference = 0;
-
-        for (Item item : row) {
-            Rect childRect = item.getViewRect();
-
-            offsetDifference += difference;
-
-            childRect.right -= offsetDifference;
-            childRect.left -= offsetDifference;
-        }
-
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/RTLRowFillSpaceStrategy.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/RTLRowFillSpaceStrategy.java
deleted file mode 100644
index e38863f..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/RTLRowFillSpaceStrategy.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-import com.beloo.widget.chipslayoutmanager.layouter.Item;
-
-import java.util.List;
-
-class RTLRowFillSpaceStrategy implements IRowStrategy {
-
-    @Override
-    public void applyStrategy(AbstractLayouter abstractLayouter, List<Item> row) {
-        if (abstractLayouter.getRowSize() == 1) return;
-        int difference = GravityUtil.getHorizontalDifference(abstractLayouter) / (abstractLayouter.getRowSize() - 1);
-        int offsetDifference = 0;
-
-        for (Item item : row) {
-            Rect childRect = item.getViewRect();
-
-            if (childRect.right == abstractLayouter.getCanvasRightBorder()) {
-                //right view of row
-
-                int rightDif = abstractLayouter.getCanvasRightBorder() - childRect.right;
-                //press view to right border
-                childRect.left += rightDif;
-                childRect.right = abstractLayouter.getCanvasRightBorder();
-                continue;
-            }
-            offsetDifference += difference;
-
-            childRect.right -= offsetDifference;
-            childRect.left -= offsetDifference;
-        }
-
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/RTLRowFillStrategy.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/RTLRowFillStrategy.java
deleted file mode 100644
index 1064738..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/RTLRowFillStrategy.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-import com.beloo.widget.chipslayoutmanager.layouter.Item;
-
-import java.util.List;
-
-class RTLRowFillStrategy implements IRowStrategy {
-
-    @Override
-    public void applyStrategy(AbstractLayouter abstractLayouter, List<Item> row) {
-        int difference = GravityUtil.getHorizontalDifference(abstractLayouter) / abstractLayouter.getRowSize();
-        int offsetDifference = difference;
-
-        for (Item item : row) {
-            Rect childRect = item.getViewRect();
-
-            if (childRect.right == abstractLayouter.getCanvasRightBorder()) {
-                //right view of row
-
-                int rightDif = abstractLayouter.getCanvasRightBorder() - childRect.right;
-                //press view to right border
-                childRect.left += rightDif;
-                childRect.right = abstractLayouter.getCanvasRightBorder();
-                childRect.left -= offsetDifference;
-                continue;
-            }
-
-            childRect.right -= offsetDifference;
-            offsetDifference += difference;
-            childRect.left -= offsetDifference;
-        }
-
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/RTLRowStrategyFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/RTLRowStrategyFactory.java
deleted file mode 100644
index 6ab54ec..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/RTLRowStrategyFactory.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import com.beloo.widget.chipslayoutmanager.ChipsLayoutManager;
-import com.beloo.widget.chipslayoutmanager.RowStrategy;
-
-public class RTLRowStrategyFactory implements IRowStrategyFactory {
-
-    @Override
-    public IRowStrategy createRowStrategy(@RowStrategy int rowStrategy) {
-        switch (rowStrategy) {
-            case ChipsLayoutManager.STRATEGY_CENTER:
-                return new RTLRowFillSpaceCenterStrategy();
-            case ChipsLayoutManager.STRATEGY_FILL_SPACE:
-                return new RTLRowFillSpaceStrategy();
-            case ChipsLayoutManager.STRATEGY_FILL_VIEW:
-                return new RTLRowFillStrategy();
-            case ChipsLayoutManager.STRATEGY_CENTER_DENSE:
-                return new RTLRowFillSpaceCenterDenseStrategy();
-            case ChipsLayoutManager.STRATEGY_DEFAULT:
-            default:
-                return new EmptyRowStrategy();
-        }
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/RightGravityModifier.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/RightGravityModifier.java
deleted file mode 100644
index 606a268..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/RightGravityModifier.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-class RightGravityModifier implements IGravityModifier {
-    @Override
-    public Rect modifyChildRect(int minStart, int maxEnd, Rect childRect) {
-        childRect = new Rect(childRect);
-
-        if (childRect.right < maxEnd) {
-            childRect.left += maxEnd - childRect.right;
-            childRect.right = maxEnd;
-        }
-
-        return childRect;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/RowGravityModifiersFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/RowGravityModifiersFactory.java
deleted file mode 100644
index 2b2b5ec..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/RowGravityModifiersFactory.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.util.SparseArray;
-import android.view.Gravity;
-
-import com.beloo.widget.chipslayoutmanager.SpanLayoutChildGravity;
-
-public class RowGravityModifiersFactory implements IGravityModifiersFactory {
-
-    private SparseArray<IGravityModifier> gravityModifierMap;
-
-    public RowGravityModifiersFactory() {
-        gravityModifierMap = new SparseArray<>();
-
-        CenterInRowGravityModifier centerInRowGravityModifier = new CenterInRowGravityModifier();
-        TopGravityModifier topGravityModifier = new TopGravityModifier();
-        BottomGravityModifier bottomGravityModifier = new BottomGravityModifier();
-
-        gravityModifierMap.put(Gravity.TOP, topGravityModifier);
-        gravityModifierMap.put(Gravity.BOTTOM, bottomGravityModifier);
-        gravityModifierMap.put(Gravity.CENTER, centerInRowGravityModifier);
-        gravityModifierMap.put(Gravity.CENTER_VERTICAL, centerInRowGravityModifier);
-    }
-
-    public IGravityModifier getGravityModifier(@SpanLayoutChildGravity int gravity) {
-        IGravityModifier gravityModifier = gravityModifierMap.get(gravity);
-        if (gravityModifier == null) {
-            gravityModifier = gravityModifierMap.get(Gravity.CENTER_VERTICAL);
-        }
-        return gravityModifier;
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/SkipLastRowStrategy.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/SkipLastRowStrategy.java
deleted file mode 100644
index a330c55..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/SkipLastRowStrategy.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-
-import androidx.annotation.NonNull;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-import com.beloo.widget.chipslayoutmanager.layouter.Item;
-
-import java.util.List;
-
-public class SkipLastRowStrategy extends StrategyDecorator {
-
-    private boolean skipLastRow;
-
-    public SkipLastRowStrategy(@NonNull IRowStrategy rowStrategy, boolean skipLastRow) {
-        super(rowStrategy);
-        this.skipLastRow = skipLastRow;
-    }
-
-    @Override
-    public void applyStrategy(AbstractLayouter abstractLayouter, List<Item> row) {
-        //if !canNotBePlacedInCurrentRow and apply strategy called probably it is last row
-        //so skip applying strategy
-        if (skipLastRow && !abstractLayouter.isRowCompleted()) return;
-        super.applyStrategy(abstractLayouter, row);
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/StrategyDecorator.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/StrategyDecorator.java
deleted file mode 100644
index d03c510..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/StrategyDecorator.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-
-import androidx.annotation.NonNull;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-import com.beloo.widget.chipslayoutmanager.layouter.Item;
-
-import java.util.List;
-
-class StrategyDecorator implements IRowStrategy {
-
-    @NonNull
-    private IRowStrategy rowStrategy;
-
-    StrategyDecorator(@NonNull IRowStrategy rowStrategy) {
-        this.rowStrategy = rowStrategy;
-    }
-
-    @Override
-    public void applyStrategy(AbstractLayouter abstractLayouter, List<Item> row) {
-        rowStrategy.applyStrategy(abstractLayouter, row);
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/TopGravityModifier.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/TopGravityModifier.java
deleted file mode 100644
index 9e40820..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/gravity/TopGravityModifier.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.gravity;
-
-import android.graphics.Rect;
-
-class TopGravityModifier implements IGravityModifier {
-
-    @Override
-    public Rect modifyChildRect(int minStart, int maxEnd, Rect childRect) {
-        if (childRect.left < minStart) {
-            throw new IllegalArgumentException("top point of input rect can't be lower than minTop");
-        }
-        if (childRect.right > maxEnd) {
-            throw new IllegalArgumentException("bottom point of input rect can't be bigger than maxTop");
-        }
-
-        childRect = new Rect(childRect);
-
-        if (childRect.top > minStart) {
-            childRect.bottom -= (childRect.top - minStart);
-            childRect.top = minStart;
-        }
-
-        return childRect;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/AbstractLayouter.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/AbstractLayouter.java
deleted file mode 100644
index 63e891c..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/AbstractLayouter.java
+++ /dev/null
@@ -1,493 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-import android.graphics.Rect;
-import android.util.Pair;
-import android.view.View;
-
-import androidx.annotation.CallSuper;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-
-import com.beloo.widget.chipslayoutmanager.ChipsLayoutManager;
-import com.beloo.widget.chipslayoutmanager.IBorder;
-import com.beloo.widget.chipslayoutmanager.SpanLayoutChildGravity;
-import com.beloo.widget.chipslayoutmanager.gravity.IGravityModifiersFactory;
-import com.beloo.widget.chipslayoutmanager.gravity.IRowStrategy;
-import com.beloo.widget.chipslayoutmanager.layouter.breaker.ILayoutRowBreaker;
-import com.beloo.widget.chipslayoutmanager.cache.IViewCacheStorage;
-import com.beloo.widget.chipslayoutmanager.gravity.IChildGravityResolver;
-import com.beloo.widget.chipslayoutmanager.gravity.IGravityModifier;
-import com.beloo.widget.chipslayoutmanager.layouter.criteria.IFinishingCriteria;
-import com.beloo.widget.chipslayoutmanager.layouter.placer.IPlacer;
-import com.beloo.widget.chipslayoutmanager.util.AssertionUtils;
-
-/** this class performs measuring, calculation, and placing of views on border (layout manager) according to state criterias */
-public abstract class AbstractLayouter implements ILayouter, IBorder {
-    private int currentViewWidth;
-    private int currentViewHeight;
-    private int currentViewPosition;
-    List<Pair<Rect, View>> rowViews = new LinkedList<>();
-    /** bottom of current row*/
-    int viewBottom;
-    /** top of current row*/
-    int viewTop;
-
-    /** right offset */
-    int viewRight;
-    /** left offset*/
-    int viewLeft;
-
-    private int rowSize = 0;
-    private int previousRowSize;
-
-    /** is row completed when {@link #layoutRow()} called*/
-    private boolean isRowCompleted;
-
-    ///////////////////////////////////////////////////////////////////////////
-    // input dependencies
-    ///////////////////////////////////////////////////////////////////////////
-    @NonNull
-    private ChipsLayoutManager layoutManager;
-    @NonNull
-    private IViewCacheStorage cacheStorage;
-    @NonNull
-    private IBorder border;
-    @NonNull
-    private IChildGravityResolver childGravityResolver;
-    @NonNull
-    private IFinishingCriteria finishingCriteria;
-    @NonNull
-    private IPlacer placer;
-    @NonNull
-    private ILayoutRowBreaker breaker;
-    @NonNull
-    private IRowStrategy rowStrategy;
-    private Set<ILayouterListener> layouterListeners = new HashSet<>();
-    @NonNull
-    private IGravityModifiersFactory gravityModifiersFactory;
-    @NonNull
-    private AbstractPositionIterator positionIterator;
-
-    //--- end input dependencies
-    AbstractLayouter(Builder builder) {
-        //--- read builder
-        layoutManager = builder.layoutManager;
-        cacheStorage = builder.cacheStorage;
-        border = builder.border;
-        childGravityResolver = builder.childGravityResolver;
-        this.finishingCriteria = builder.finishingCriteria;
-        placer = builder.placer;
-        this.viewTop = builder.offsetRect.top;
-        this.viewBottom = builder.offsetRect.bottom;
-        this.viewRight = builder.offsetRect.right;
-        this.viewLeft = builder.offsetRect.left;
-        this.layouterListeners = builder.layouterListeners;
-        this.breaker = builder.breaker;
-        this.gravityModifiersFactory = builder.gravityModifiersFactory;
-        this.rowStrategy = builder.rowStrategy;
-        this.positionIterator = builder.positionIterator;
-        //--- end read builder
-    }
-
-    void setFinishingCriteria(@NonNull IFinishingCriteria finishingCriteria) {
-        this.finishingCriteria = finishingCriteria;
-    }
-
-    @Override
-    public AbstractPositionIterator positionIterator() {
-        return positionIterator;
-    }
-
-    public boolean isRowCompleted() {
-        return isRowCompleted;
-    }
-
-    public List<Item> getCurrentRowItems() {
-        List<Item> items = new LinkedList<>();
-        List<Pair<Rect, View>> mutableRowViews = new LinkedList<>(rowViews);
-        if (isReverseOrder()) {
-            Collections.reverse(mutableRowViews);
-        }
-        for (Pair<Rect, View> rowView : mutableRowViews) {
-            items.add(new Item(rowView.first, layoutManager.getPosition(rowView.second)));
-        }
-        return items;
-    }
-
-    public final int getCurrentViewPosition() {
-        return currentViewPosition;
-    }
-
-    final IViewCacheStorage getCacheStorage() {
-        return cacheStorage;
-    }
-
-    public void addLayouterListener(ILayouterListener layouterListener) {
-        if (layouterListener != null)
-            layouterListeners.add(layouterListener);
-    }
-
-    @Override
-    public void removeLayouterListener(ILayouterListener layouterListener) {
-        layouterListeners.remove(layouterListener);
-    }
-
-    private void notifyLayouterListeners() {
-        for (ILayouterListener layouterListener : layouterListeners) {
-            layouterListener.onLayoutRow(this);
-        }
-    }
-
-    @Override
-    public final int getPreviousRowSize() {
-        return previousRowSize;
-    }
-
-    /** read view params to memory */
-    private void calculateView(View view) {
-        currentViewHeight = layoutManager.getDecoratedMeasuredHeight(view);
-        currentViewWidth = layoutManager.getDecoratedMeasuredWidth(view);
-        currentViewPosition = layoutManager.getPosition(view);
-    }
-
-    @Override
-    @CallSuper
-    /** calculate view positions, view won't be actually added to layout when calling this method
-     * @return true if view successfully placed, false if view can't be placed because out of space on screen and have to be recycled */
-    public final boolean placeView(View view) {
-        layoutManager.measureChildWithMargins(view, 0, 0);
-        calculateView(view);
-
-        if (canNotBePlacedInCurrentRow()) {
-            isRowCompleted = true;
-            layoutRow();
-        }
-
-        if (isFinishedLayouting()) return false;
-
-        rowSize++;
-        Rect rect = createViewRect(view);
-        rowViews.add(new Pair<>(rect, view));
-
-        return true;
-    }
-
-    /** if all necessary view have placed*/
-    public final boolean isFinishedLayouting() {
-        return finishingCriteria.isFinishedLayouting(this);
-    }
-
-    /** check if we can not add current view to row
-     * we determine it on the next layouter step, because we need next view size to determine whether it fits in row or not */
-    @SuppressWarnings("WeakerAccess")
-    public final boolean canNotBePlacedInCurrentRow() {
-        return breaker.isRowBroke(this);
-    }
-
-    /** factory method for Rect, where view will be placed. Creation based on inner layouter parameters */
-    abstract Rect createViewRect(View view);
-
-    /** check whether items in {@link #rowViews} are in reverse order. It is true for backward layouters */
-    abstract boolean isReverseOrder();
-
-    /** called when layouter ready to add row to border. Children could perform normalization actions on created row*/
-    abstract void onPreLayout();
-
-    /** called after row have been layouted. Children should prepare new row here. */
-    abstract void onAfterLayout();
-
-    abstract boolean isAttachedViewFromNewRow(View view);
-
-    abstract void onInterceptAttachView(View view);
-
-    void setPlacer(@NonNull IPlacer placer) {
-        this.placer = placer;
-    }
-
-    @CallSuper
-    @Override
-    /** Read layouter state from current attached view. We need only last of it, but we can't determine here which is last.
-     * Based on characteristics of last attached view, layouter algorithm will be able to continue placing from it.
-     * This method have to be called on attaching view*/
-    public final boolean onAttachView(View view) {
-        calculateView(view);
-
-        if (isAttachedViewFromNewRow(view)) {
-            //new row, reset row size
-            notifyLayouterListeners();
-            rowSize = 0;
-        }
-
-        onInterceptAttachView(view);
-
-        if (isFinishedLayouting()) return false;
-
-        rowSize++;
-        layoutManager.attachView(view);
-        return true;
-    }
-
-    @Override
-    /** add views from current row to layout*/
-    public final void layoutRow() {
-        onPreLayout();
-
-        //apply modifiers to whole row
-        if (rowViews.size() > 0) {
-            rowStrategy.applyStrategy(this, getCurrentRowItems());
-        }
-
-        /** layout pre-calculated row on a recyclerView border */
-        for (Pair<Rect, View> rowViewRectPair : rowViews) {
-            Rect viewRect = rowViewRectPair.first;
-            View view = rowViewRectPair.second;
-
-            viewRect = applyChildGravity(view, viewRect);
-            //add view to layout
-            placer.addView(view);
-
-            //layout whole views in a row
-            layoutManager.layoutDecorated(view, viewRect.left, viewRect.top, viewRect.right, viewRect.bottom);
-        }
-
-        onAfterLayout();
-
-        notifyLayouterListeners();
-
-
-        previousRowSize = rowSize;
-        //clear row data
-        this.rowSize = 0;
-        rowViews.clear();
-        isRowCompleted = false;
-    }
-
-    /** by default items placed and attached to a top of the row.
-     * Modify theirs relative positions according to the selected child gravity
-     * @return modified rect with applied gravity */
-    private Rect applyChildGravity(View view, Rect viewRect) {
-        @SpanLayoutChildGravity
-        int viewGravity = childGravityResolver.getItemGravity(getLayoutManager().getPosition(view));
-        IGravityModifier gravityModifier = gravityModifiersFactory.getGravityModifier(viewGravity);
-        return gravityModifier.modifyChildRect(getStartRowBorder(), getEndRowBorder(), viewRect);
-    }
-
-    @NonNull
-    public ChipsLayoutManager getLayoutManager() {
-        return layoutManager;
-    }
-
-    /** get count of items inside current row */
-    @Override
-    public int getRowSize() {
-        return rowSize;
-    }
-
-    public int getViewTop() {
-        return viewTop;
-    }
-
-    /** get a start coordinate of row border which is perpendicular to row general extension*/
-    public abstract int getStartRowBorder();
-
-    /** get an end coordinate of row border which is perpendicular to row general extension*/
-    public abstract int getEndRowBorder();
-
-    @Override
-    public Rect getRowRect() {
-        return new Rect(getCanvasLeftBorder(), getViewTop(), getCanvasRightBorder(), getViewBottom());
-    }
-
-    public int getViewBottom() {
-        return viewBottom;
-    }
-
-    final Rect getOffsetRect() {
-        return new Rect(viewLeft, viewTop, viewRight, viewBottom);
-    }
-
-    public final int getViewLeft() {
-        return viewLeft;
-    }
-
-    public final int getViewRight() {
-        return viewRight;
-    }
-
-    public final int getCurrentViewWidth() {
-        return currentViewWidth;
-    }
-
-    public final int getCurrentViewHeight() {
-        return currentViewHeight;
-    }
-
-    public abstract int getRowLength();
-
-    public abstract static class Builder {
-        private ChipsLayoutManager layoutManager;
-        private IViewCacheStorage cacheStorage;
-        private IBorder border;
-        private IChildGravityResolver childGravityResolver;
-        private IFinishingCriteria finishingCriteria;
-        private IPlacer placer;
-        private ILayoutRowBreaker breaker;
-        private Rect offsetRect;
-        private HashSet<ILayouterListener> layouterListeners = new HashSet<>();
-        private IGravityModifiersFactory gravityModifiersFactory;
-        private IRowStrategy rowStrategy;
-        private AbstractPositionIterator positionIterator;
-
-        Builder() {}
-
-        @SuppressWarnings("WeakerAccess")
-        @NonNull
-        public Builder offsetRect(@NonNull Rect offsetRect) {
-            this.offsetRect = offsetRect;
-            return this;
-        }
-
-        @NonNull
-        public final Builder layoutManager(@NonNull ChipsLayoutManager layoutManager) {
-            this.layoutManager = layoutManager;
-            return this;
-        }
-
-        @NonNull
-        final Builder cacheStorage(@NonNull IViewCacheStorage cacheStorage) {
-            this.cacheStorage = cacheStorage;
-            return this;
-        }
-
-        @NonNull
-        Builder rowStrategy(IRowStrategy rowStrategy) {
-            this.rowStrategy = rowStrategy;
-            return this;
-        }
-
-        @NonNull
-        final Builder canvas(@NonNull IBorder border) {
-            this.border = border;
-            return this;
-        }
-
-        @NonNull
-        final Builder gravityModifiersFactory(@NonNull IGravityModifiersFactory gravityModifiersFactory) {
-            this.gravityModifiersFactory = gravityModifiersFactory;
-            return this;
-        }
-
-        @NonNull
-        final Builder childGravityResolver(@NonNull IChildGravityResolver childGravityResolver) {
-            this.childGravityResolver = childGravityResolver;
-            return this;
-        }
-
-        @NonNull
-        final Builder finishingCriteria(@NonNull IFinishingCriteria finishingCriteria) {
-            this.finishingCriteria = finishingCriteria;
-            return this;
-        }
-
-        @NonNull
-        public final Builder placer(@NonNull IPlacer placer) {
-            this.placer = placer;
-            return this;
-        }
-
-        @SuppressWarnings("unused")
-        @NonNull
-        final Builder addLayouterListener(@Nullable ILayouterListener layouterListener) {
-            if (layouterListener != null) {
-                layouterListeners.add(layouterListener);
-            }
-            return this;
-        }
-
-        @NonNull
-        final Builder breaker(@NonNull ILayoutRowBreaker breaker) {
-            AssertionUtils.assertNotNull(breaker, "breaker shouldn't be null");
-            this.breaker = breaker;
-            return this;
-        }
-
-        @NonNull
-        final Builder addLayouterListeners(@NonNull List<ILayouterListener> layouterListeners) {
-            this.layouterListeners.addAll(layouterListeners);
-            return this;
-        }
-
-        @NonNull
-        public Builder positionIterator(AbstractPositionIterator positionIterator) {
-            this.positionIterator = positionIterator;
-            return this;
-        }
-
-        @NonNull
-        protected abstract AbstractLayouter createLayouter();
-
-        public final AbstractLayouter build() {
-            if (layoutManager == null)
-                throw new IllegalStateException("layoutManager can't be null, call #layoutManager()");
-
-            if (breaker == null)
-                throw new IllegalStateException("breaker can't be null, call #breaker()");
-
-            if (border == null)
-                throw new IllegalStateException("border can't be null, call #border()");
-
-            if (cacheStorage == null)
-                throw new IllegalStateException("cacheStorage can't be null, call #cacheStorage()");
-
-            if (rowStrategy == null)
-                throw new IllegalStateException("rowStrategy can't be null, call #rowStrategy()");
-
-            if (offsetRect == null)
-                throw new IllegalStateException("offsetRect can't be null, call #offsetRect()");
-
-            if (finishingCriteria == null)
-                throw new IllegalStateException("finishingCriteria can't be null, call #finishingCriteria()");
-
-            if (placer == null)
-                throw new IllegalStateException("placer can't be null, call #placer()");
-
-            if (gravityModifiersFactory == null)
-                throw new IllegalStateException("gravityModifiersFactory can't be null, call #gravityModifiersFactory()");
-
-            if (childGravityResolver == null)
-                throw new IllegalStateException("childGravityResolver can't be null, call #childGravityResolver()");
-
-            if (positionIterator == null)
-                throw new IllegalStateException("positionIterator can't be null, call #positionIterator()");
-
-            return createLayouter();
-        }
-    }
-
-    ///////////////////////////////////////////////////////////////////////////
-    // border delegate
-    ///////////////////////////////////////////////////////////////////////////
-
-    public final int getCanvasRightBorder() {
-        return border.getCanvasRightBorder();
-    }
-
-    public final int getCanvasBottomBorder() {
-        return border.getCanvasBottomBorder();
-    }
-
-    public final int getCanvasLeftBorder() {
-        return border.getCanvasLeftBorder();
-    }
-
-    public final int getCanvasTopBorder() {
-        return border.getCanvasTopBorder();
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/AbstractPositionIterator.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/AbstractPositionIterator.java
deleted file mode 100644
index e62b3ff..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/AbstractPositionIterator.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-
-import androidx.annotation.IntRange;
-
-import java.util.Iterator;
-
-public abstract class AbstractPositionIterator implements Iterator<Integer> {
-    int pos;
-    int itemCount;
-
-    AbstractPositionIterator(@IntRange(from = 0) int itemCount) {
-        if (itemCount < 0) throw new IllegalArgumentException("item count couldn't be negative");
-        this.itemCount = itemCount;
-    }
-
-    public void move(@IntRange(from = 0) int pos) {
-        if (pos >= itemCount) throw new IllegalArgumentException("you can't move above of maxItemCount");
-        if (pos < 0) throw new IllegalArgumentException("can't move to negative position");
-        this.pos = pos;
-    }
-
-    @Override
-    public void remove() {
-        throw new UnsupportedOperationException("removing not supported in position iterator");
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/ColumnSquare.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/ColumnSquare.java
deleted file mode 100644
index 3b7cd92..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/ColumnSquare.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-
-import androidx.recyclerview.widget.RecyclerView;
-
-class ColumnSquare extends Square {
-
-    ColumnSquare(RecyclerView.LayoutManager lm) {
-        super(lm);
-    }
-
-    public final int getCanvasRightBorder() {
-        return lm.getWidth();
-    }
-
-    public final int getCanvasBottomBorder() {
-        return lm.getHeight() - lm.getPaddingBottom();
-    }
-
-    public final int getCanvasLeftBorder() {
-        return 0;
-    }
-
-    public final int getCanvasTopBorder() {
-        return lm.getPaddingTop();
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/ColumnsCreator.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/ColumnsCreator.java
deleted file mode 100644
index 83a42b1..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/ColumnsCreator.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-import android.graphics.Rect;
-
-import androidx.annotation.NonNull;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.beloo.widget.chipslayoutmanager.anchor.AnchorViewState;
-
-class ColumnsCreator implements ILayouterCreator {
-
-    private RecyclerView.LayoutManager layoutManager;
-
-    ColumnsCreator(RecyclerView.LayoutManager layoutManager) {
-        this.layoutManager = layoutManager;
-    }
-
-    @Override
-    public AbstractLayouter.Builder createBackwardBuilder() {
-        return LeftLayouter.newBuilder();
-    }
-
-    @Override
-    public AbstractLayouter.Builder createForwardBuilder() {
-        return RightLayouter.newBuilder();
-    }
-
-    @Override
-    public Rect createOffsetRectForBackwardLayouter(@NonNull AnchorViewState anchor) {
-        Rect anchorRect = anchor.getAnchorViewRect();
-
-        return new Rect(
-                anchorRect == null ? 0 : anchorRect.left,
-                0,
-                anchorRect == null ? 0 : anchorRect.right,
-                //we shouldn't include anchor view here, so anchorTop is a bottomOffset
-                anchorRect == null ? 0 : anchorRect.top);
-    }
-
-    @Override
-    public Rect createOffsetRectForForwardLayouter(@NonNull AnchorViewState anchor) {
-        Rect anchorRect = anchor.getAnchorViewRect();
-
-        return new Rect(
-                anchorRect == null ? anchor.getPosition() == 0 ? layoutManager.getPaddingLeft() : 0 : anchorRect.left,
-                //we should include anchor view here, so anchorTop is a topOffset
-                anchorRect == null ? layoutManager.getPaddingTop() : anchorRect.top,
-                anchorRect == null ? anchor.getPosition() == 0 ? layoutManager.getPaddingRight() : 0 : anchorRect.right,
-                0);
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/ColumnsStateFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/ColumnsStateFactory.java
deleted file mode 100644
index fbdd9b4..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/ColumnsStateFactory.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-import android.view.View;
-
-import com.beloo.widget.chipslayoutmanager.ChipsLayoutManager;
-import com.beloo.widget.chipslayoutmanager.IScrollingController;
-import com.beloo.widget.chipslayoutmanager.anchor.AnchorViewState;
-import com.beloo.widget.chipslayoutmanager.anchor.ColumnsAnchorFactory;
-import com.beloo.widget.chipslayoutmanager.anchor.IAnchorFactory;
-import com.beloo.widget.chipslayoutmanager.cache.IViewCacheStorage;
-import com.beloo.widget.chipslayoutmanager.gravity.ColumnGravityModifiersFactory;
-import com.beloo.widget.chipslayoutmanager.gravity.ColumnStrategyFactory;
-import com.beloo.widget.chipslayoutmanager.gravity.IRowStrategyFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.breaker.DecoratorBreakerFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.breaker.ColumnBreakerFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.criteria.AbstractCriteriaFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.criteria.ColumnsCriteriaFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.criteria.ICriteriaFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.criteria.InfiniteCriteriaFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.placer.IPlacerFactory;
-import com.beloo.widget.chipslayoutmanager.util.StateHelper;
-
-public class ColumnsStateFactory implements IStateFactory {
-
-    private ChipsLayoutManager lm;
-    private IRowStrategyFactory rowStrategyFactory;
-
-    public ColumnsStateFactory(ChipsLayoutManager lm) {
-        this.lm = lm;
-        rowStrategyFactory = new ColumnStrategyFactory();
-    }
-
-    @Override
-    public LayouterFactory createLayouterFactory(ICriteriaFactory criteriaFactory, IPlacerFactory placerFactory) {
-        IViewCacheStorage cacheStorage = lm.getViewPositionsStorage();
-
-        return createColumnLayouterFactory(criteriaFactory, placerFactory, cacheStorage);
-    }
-
-    private LayouterFactory createColumnLayouterFactory(ICriteriaFactory criteriaFactory, IPlacerFactory placerFactory, IViewCacheStorage cacheStorage) {
-         return new LayouterFactory(lm,
-                 new ColumnsCreator(lm),
-                 new DecoratorBreakerFactory(cacheStorage, lm.getRowBreaker(), lm.getMaxViewsInRow(), new ColumnBreakerFactory()),
-                 criteriaFactory,
-                 placerFactory,
-                 new ColumnGravityModifiersFactory(),
-                 rowStrategyFactory.createRowStrategy(lm.getRowStrategyType()));
-    }
-
-    @Override
-    public AbstractCriteriaFactory createDefaultFinishingCriteriaFactory() {
-        return StateHelper.isInfinite(this)? new InfiniteCriteriaFactory() : new ColumnsCriteriaFactory();
-    }
-
-    @Override
-    public IAnchorFactory anchorFactory() {
-        return new ColumnsAnchorFactory(lm, lm.getCanvas());
-    }
-
-    @Override
-    public IScrollingController scrollingController() {
-        return lm.horizontalScrollingController();
-    }
-
-    @Override
-    public ICanvas createCanvas() {
-        return new ColumnSquare(lm);
-    }
-
-    @Override
-    public int getSizeMode() {
-        return lm.getWidthMode();
-    }
-
-    @Override
-    public int getStart() {
-        return 0;
-    }
-
-    @Override
-    public int getStart(View view) {
-        return lm.getDecoratedLeft(view);
-    }
-
-    @Override
-    public int getStart(AnchorViewState anchor) {
-        return anchor.getAnchorViewRect().left;
-    }
-
-    @Override
-    public int getEnd() {
-        return lm.getWidth();
-    }
-
-    @Override
-    public int getEnd(View view) {
-        return lm.getDecoratedRight(view);
-    }
-
-    @Override
-    public int getEnd(AnchorViewState anchor) {
-        return anchor.getAnchorViewRect().right;
-    }
-
-    @Override
-    public int getEndViewPosition() {
-        return lm.getPosition(lm.getCanvas().getBottomView());
-    }
-
-    @Override
-    public int getStartAfterPadding() {
-        return lm.getPaddingLeft();
-    }
-
-    @Override
-    public int getStartViewPosition() {
-        return lm.getPosition(lm.getCanvas().getTopView());
-    }
-
-    @Override
-    public int getEndAfterPadding() {
-        return lm.getWidth() - lm.getPaddingRight();
-    }
-
-    @Override
-    public int getStartViewBound() {
-        return getStart(lm.getCanvas().getLeftView());
-    }
-
-    @Override
-    public int getEndViewBound() {
-        return getEnd(lm.getCanvas().getRightView());
-    }
-
-    @Override
-    public int getTotalSpace() {
-        return lm.getWidth() - lm.getPaddingLeft()
-                - lm.getPaddingRight();
-    }
-
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/DecrementalPositionIterator.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/DecrementalPositionIterator.java
deleted file mode 100644
index 79b4a10..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/DecrementalPositionIterator.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-
-import androidx.annotation.IntRange;
-
-class DecrementalPositionIterator extends AbstractPositionIterator {
-
-    DecrementalPositionIterator(@IntRange(from = 0) int itemCount) {
-        super(itemCount);
-    }
-
-    @Override
-    public boolean hasNext() {
-        return pos >= 0;
-    }
-
-    @Override
-    public Integer next() {
-        if (!hasNext()) throw new IllegalStateException("position out of bounds reached");
-        return pos--;
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/ICanvas.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/ICanvas.java
deleted file mode 100644
index 8f74042..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/ICanvas.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-import android.graphics.Rect;
-import android.view.View;
-
-import com.beloo.widget.chipslayoutmanager.IBorder;
-
-public interface ICanvas extends IBorder {
-    Rect getCanvasRect();
-
-    Rect getViewRect(View view);
-
-    boolean isInside(Rect rectCandidate);
-
-    boolean isInside(View viewCandidate);
-
-    boolean isFullyVisible(View view);
-
-    boolean isFullyVisible(Rect rect);
-
-    /** calculate border state of layout manager after filling children*/
-    void findBorderViews();
-
-    View getTopView();
-
-    View getBottomView();
-
-    View getLeftView();
-
-    View getRightView();
-
-    Integer getMinPositionOnScreen();
-
-    Integer getMaxPositionOnScreen();
-
-    boolean isFirstItemAdded();
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/ILayouter.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/ILayouter.java
deleted file mode 100644
index 9e7ff95..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/ILayouter.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-import android.graphics.Rect;
-import android.view.View;
-
-import java.util.List;
-
-public interface ILayouter {
-    /** add views from current row to layout*/
-    void layoutRow();
-    /** calculate view positions, view won't be actually added to layout when calling this method
-     * @return true if view successfully placed, false if view can't be placed because out of space on screen and have to be recycled */
-    boolean placeView(View view);
-    /** Read layouter state from current attached view. We need only last of it, but we can't determine here which is last.
-     * Based on characteristics of last attached view, layouter algorithm will be able to continue placing from it.
-     * This method have to be called on attaching view
-     * @return * @return true if view successfully attached, false if view can't be attached because out of space on screen */
-    boolean onAttachView(View view);
-
-    /** @return size of current row*/
-    int getRowSize();
-
-    /** @return top of current row*/
-    int getViewTop();
-
-    /** @return bottom of current row */
-    int getViewBottom();
-
-    /** @return size of previous row*/
-    int getPreviousRowSize();
-
-    List<Item> getCurrentRowItems();
-
-    Rect getRowRect();
-
-    void addLayouterListener(ILayouterListener layouterListener);
-
-    void removeLayouterListener(ILayouterListener layouterListener);
-
-    AbstractPositionIterator positionIterator();
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/ILayouterCreator.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/ILayouterCreator.java
deleted file mode 100644
index 2cc0560..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/ILayouterCreator.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-import android.graphics.Rect;
-
-import androidx.annotation.NonNull;
-
-import com.beloo.widget.chipslayoutmanager.anchor.AnchorViewState;
-
-interface ILayouterCreator {
-    //---- up layouter below
-    Rect createOffsetRectForBackwardLayouter(@NonNull AnchorViewState anchorRect);
-
-    AbstractLayouter.Builder createBackwardBuilder();
-
-    AbstractLayouter.Builder createForwardBuilder();
-
-    Rect createOffsetRectForForwardLayouter(AnchorViewState anchorRect);
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/ILayouterListener.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/ILayouterListener.java
deleted file mode 100644
index ad55573..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/ILayouterListener.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-public interface ILayouterListener {
-    void onLayoutRow(ILayouter layouter);
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/IMeasureSupporter.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/IMeasureSupporter.java
deleted file mode 100644
index b3d8f79..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/IMeasureSupporter.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-
-import androidx.recyclerview.widget.RecyclerView;
-
-public interface IMeasureSupporter {
-    void onItemsRemoved(RecyclerView recyclerView);
-
-    void onSizeChanged();
-
-    void measure(int autoWidth, int autoHeight);
-
-    int getMeasuredWidth();
-
-    int getMeasuredHeight();
-
-    boolean isRegistered();
-
-    void setRegistered(boolean isRegistered);
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/IOrientationStateFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/IOrientationStateFactory.java
deleted file mode 100644
index b10d1e6..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/IOrientationStateFactory.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.beloo.widget.chipslayoutmanager.gravity.IRowStrategyFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.breaker.IBreakerFactory;
-
-interface IOrientationStateFactory {
-    ILayouterCreator createLayouterCreator(RecyclerView.LayoutManager lm);
-    IRowStrategyFactory createRowStrategyFactory();
-    IBreakerFactory createDefaultBreaker();
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/IStateFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/IStateFactory.java
deleted file mode 100644
index c85fab2..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/IStateFactory.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-import android.view.View;
-
-import com.beloo.widget.chipslayoutmanager.IScrollingController;
-import com.beloo.widget.chipslayoutmanager.anchor.AnchorViewState;
-import com.beloo.widget.chipslayoutmanager.anchor.IAnchorFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.criteria.AbstractCriteriaFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.criteria.ICriteriaFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.placer.IPlacerFactory;
-
-public interface IStateFactory {
-    @SuppressWarnings("UnnecessaryLocalVariable")
-    LayouterFactory createLayouterFactory(ICriteriaFactory criteriaFactory, IPlacerFactory placerFactory);
-
-    AbstractCriteriaFactory createDefaultFinishingCriteriaFactory();
-
-    IAnchorFactory anchorFactory();
-
-    IScrollingController scrollingController();
-
-    ICanvas createCanvas();
-
-    int getSizeMode();
-
-    int getStart();
-
-    int getStart(View view);
-
-    int getStart(AnchorViewState anchor);
-
-    int getStartAfterPadding();
-
-    int getStartViewPosition();
-
-    int getStartViewBound();
-
-    int getEnd();
-
-    int getEnd(View view);
-
-    int getEndAfterPadding();
-
-    int getEnd(AnchorViewState anchor);
-
-    int getEndViewPosition();
-
-    int getEndViewBound();
-
-    int getTotalSpace();
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/IncrementalPositionIterator.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/IncrementalPositionIterator.java
deleted file mode 100644
index b7a7ff5..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/IncrementalPositionIterator.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-
-import androidx.annotation.IntRange;
-
-class IncrementalPositionIterator extends AbstractPositionIterator {
-
-    IncrementalPositionIterator(@IntRange(from = 0) int itemCount) {
-        super(itemCount);
-    }
-
-    @Override
-    public boolean hasNext() {
-        return pos < itemCount;
-    }
-
-    @Override
-    public Integer next() {
-        if (!hasNext()) throw new IllegalStateException("position out of bounds reached");
-        return pos++;
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/Item.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/Item.java
deleted file mode 100644
index baf5a80..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/Item.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-import android.graphics.Rect;
-
-public class Item {
-    private Rect viewRect;
-    private int viewPosition;
-
-    public Item(Rect viewRect, int viewPosition) {
-        this.viewRect = viewRect;
-        this.viewPosition = viewPosition;
-    }
-
-    public Rect getViewRect() {
-        return viewRect;
-    }
-
-    public int getViewPosition() {
-        return viewPosition;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        Item item = (Item) o;
-
-        return viewPosition == item.viewPosition;
-
-    }
-
-    @Override
-    public int hashCode() {
-        return viewPosition;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/LTRDownLayouter.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/LTRDownLayouter.java
deleted file mode 100644
index f659c65..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/LTRDownLayouter.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-import android.graphics.Rect;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-
-class LTRDownLayouter extends AbstractLayouter {
-
-    private boolean isPurged;
-
-    private LTRDownLayouter(Builder builder) {
-        super(builder);
-    }
-
-    public static Builder newBuilder() {
-        return new Builder();
-    }
-
-    @Override
-    Rect createViewRect(View view) {
-        Rect viewRect = new Rect(viewLeft, viewTop, viewLeft + getCurrentViewWidth(), viewTop + getCurrentViewHeight());
-
-        viewLeft = viewRect.right;
-        viewBottom = Math.max(viewBottom, viewRect.bottom);
-        return viewRect;
-    }
-
-    @Override
-    boolean isReverseOrder() {
-        return false;
-    }
-
-
-    @Override
-    void onPreLayout() {
-        if (!rowViews.isEmpty()) {
-            //todo this isn't great place for that. Should be refactored somehow
-            if (!isPurged) {
-                isPurged = true;
-                getCacheStorage().purgeCacheFromPosition(getLayoutManager().getPosition(rowViews.get(0).second));
-            }
-
-            //cache only when go down
-            getCacheStorage().storeRow(rowViews);
-        }
-    }
-
-    @Override
-    void onAfterLayout() {
-        //go to next row, increase top coordinate, reset left
-        viewLeft = getCanvasLeftBorder();
-        viewTop = viewBottom;
-    }
-
-    @Override
-    boolean isAttachedViewFromNewRow(View view) {
-
-        int topOfCurrentView = getLayoutManager().getDecoratedTop(view);
-        int leftOfCurrentView = getLayoutManager().getDecoratedLeft(view);
-
-        return viewBottom <= topOfCurrentView
-                && leftOfCurrentView < viewLeft;
-
-    }
-
-    @Override
-    public void onInterceptAttachView(View view) {
-        viewTop = getLayoutManager().getDecoratedTop(view);
-        viewLeft = getLayoutManager().getDecoratedRight(view);
-        viewBottom = Math.max(viewBottom, getLayoutManager().getDecoratedBottom(view));
-    }
-
-    @Override
-    public int getStartRowBorder() {
-        return getViewTop();
-    }
-
-    @Override
-    public int getEndRowBorder() {
-        return getViewBottom();
-    }
-
-    @Override
-    public int getRowLength() {
-        return viewLeft - getCanvasLeftBorder();
-    }
-
-    public static final class Builder extends AbstractLayouter.Builder {
-        private Builder() {
-        }
-
-        @NonNull
-        public LTRDownLayouter createLayouter() {
-            return new LTRDownLayouter(this);
-        }
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/LTRRowsCreator.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/LTRRowsCreator.java
deleted file mode 100644
index 9692fa1..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/LTRRowsCreator.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-import android.graphics.Rect;
-
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.beloo.widget.chipslayoutmanager.ChipsLayoutManager;
-import com.beloo.widget.chipslayoutmanager.anchor.AnchorViewState;
-import com.beloo.widget.chipslayoutmanager.gravity.IGravityModifiersFactory;
-import com.beloo.widget.chipslayoutmanager.gravity.IRowStrategy;
-import com.beloo.widget.chipslayoutmanager.layouter.breaker.IBreakerFactory;
-import com.beloo.widget.chipslayoutmanager.cache.IViewCacheStorage;
-import com.beloo.widget.chipslayoutmanager.layouter.criteria.ICriteriaFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.placer.IPlacerFactory;
-
-class LTRRowsCreator implements ILayouterCreator {
-
-    private RecyclerView.LayoutManager layoutManager;
-
-    LTRRowsCreator(RecyclerView.LayoutManager layoutManager) {
-        this.layoutManager = layoutManager;
-    }
-
-    @Override
-    public Rect createOffsetRectForBackwardLayouter(AnchorViewState anchor) {
-        Rect anchorRect = anchor.getAnchorViewRect();
-
-        return new Rect(
-                0,
-                anchorRect == null ? 0 : anchorRect.top,
-                //we shouldn't include anchor view here, so anchorLeft is a rightOffset
-                anchorRect == null ? 0 : anchorRect.left,
-                anchorRect == null ? 0 : anchorRect.bottom);
-    }
-
-    @Override
-    public Rect createOffsetRectForForwardLayouter(AnchorViewState anchor) {
-        Rect anchorRect = anchor.getAnchorViewRect();
-
-        return new Rect(
-                //we should include anchor view here, so anchorLeft is a leftOffset
-                anchorRect == null ? layoutManager.getPaddingLeft() : anchorRect.left,
-                anchorRect == null ? anchor.getPosition() == 0 ? layoutManager.getPaddingTop() : 0 : anchorRect.top,
-                0,
-                anchorRect == null ? anchor.getPosition() == 0 ? layoutManager.getPaddingBottom() : 0 : anchorRect.bottom);
-    }
-
-    @Override
-    public AbstractLayouter.Builder createBackwardBuilder() {
-        return LTRUpLayouter.newBuilder();
-    }
-
-    @Override
-    public AbstractLayouter.Builder createForwardBuilder() {
-        return LTRDownLayouter.newBuilder();
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/LTRRowsOrientationStateFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/LTRRowsOrientationStateFactory.java
deleted file mode 100644
index 4967352..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/LTRRowsOrientationStateFactory.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.beloo.widget.chipslayoutmanager.gravity.IRowStrategyFactory;
-import com.beloo.widget.chipslayoutmanager.gravity.LTRRowStrategyFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.breaker.IBreakerFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.breaker.LTRRowBreakerFactory;
-
-class LTRRowsOrientationStateFactory implements IOrientationStateFactory {
-
-    @Override
-    public ILayouterCreator createLayouterCreator(RecyclerView.LayoutManager lm) {
-        return new LTRRowsCreator(lm);
-    }
-
-    @Override
-    public IRowStrategyFactory createRowStrategyFactory() {
-        return new LTRRowStrategyFactory();
-    }
-
-    @Override
-    public IBreakerFactory createDefaultBreaker() {
-        return new LTRRowBreakerFactory();
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/LTRUpLayouter.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/LTRUpLayouter.java
deleted file mode 100644
index a229155..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/LTRUpLayouter.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-import android.graphics.Rect;
-import android.util.Pair;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-
-import java.util.Collections;
-
-class LTRUpLayouter extends AbstractLayouter implements ILayouter {
-
-    private LTRUpLayouter(Builder builder) {
-        super(builder);
-    }
-
-    public static Builder newBuilder() {
-        return new Builder();
-    }
-
-    @Override
-    Rect createViewRect(View view) {
-        int left = viewRight - getCurrentViewWidth();
-        int viewTop = viewBottom - getCurrentViewHeight();
-
-        Rect viewRect = new Rect(left, viewTop, viewRight, viewBottom);
-        viewRight = viewRect.left;
-        return viewRect;
-    }
-
-    @Override
-    boolean isReverseOrder() {
-        return true;
-    }
-
-    @Override
-    void onPreLayout() {
-        int leftOffsetOfRow = viewRight - getCanvasLeftBorder();
-        viewLeft = 0;
-
-        for (Pair<Rect, View> rowViewRectPair : rowViews) {
-            Rect viewRect = rowViewRectPair.first;
-
-            viewRect.left = viewRect.left - leftOffsetOfRow;
-            viewRect.right = viewRect.right - leftOffsetOfRow;
-
-            viewLeft = Math.max(viewRect.right, viewLeft);
-            viewTop = Math.min(viewTop, viewRect.top);
-            viewBottom = Math.max(viewBottom, viewRect.bottom);
-        }
-    }
-
-    @Override
-    void onAfterLayout() {
-        //go to next row, increase top coordinate, reset left
-        viewRight = getCanvasRightBorder();
-        viewBottom = viewTop;
-    }
-
-    @Override
-    boolean isAttachedViewFromNewRow(View view) {
-        int bottomOfCurrentView = getLayoutManager().getDecoratedBottom(view);
-        int rightOfCurrentView = getLayoutManager().getDecoratedRight(view);
-
-        return viewTop >= bottomOfCurrentView
-                && rightOfCurrentView > viewRight;
-    }
-
-    @Override
-    public void onInterceptAttachView(View view) {
-        if (viewRight != getCanvasRightBorder() && viewRight - getCurrentViewWidth() < getCanvasLeftBorder()) {
-            //new row
-            viewRight = getCanvasRightBorder();
-            viewBottom = viewTop;
-        } else {
-            viewRight = getLayoutManager().getDecoratedLeft(view);
-        }
-
-        viewTop = Math.min(viewTop, getLayoutManager().getDecoratedTop(view));
-    }
-
-    @Override
-    public int getStartRowBorder() {
-        return getViewTop();
-    }
-
-    @Override
-    public int getEndRowBorder() {
-        return getViewBottom();
-    }
-
-    @Override
-    public int getRowLength() {
-        return getCanvasRightBorder() - viewRight;
-    }
-
-    public static final class Builder extends AbstractLayouter.Builder {
-        private Builder() {
-        }
-
-        @NonNull
-        public LTRUpLayouter createLayouter() {
-            return new LTRUpLayouter(this);
-        }
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/LayouterFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/LayouterFactory.java
deleted file mode 100644
index 8c5cdb9..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/LayouterFactory.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-import android.graphics.Rect;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import com.beloo.widget.chipslayoutmanager.ChipsLayoutManager;
-import com.beloo.widget.chipslayoutmanager.anchor.AnchorViewState;
-import com.beloo.widget.chipslayoutmanager.gravity.IGravityModifiersFactory;
-import com.beloo.widget.chipslayoutmanager.gravity.IRowStrategy;
-import com.beloo.widget.chipslayoutmanager.gravity.SkipLastRowStrategy;
-import com.beloo.widget.chipslayoutmanager.layouter.breaker.IBreakerFactory;
-import com.beloo.widget.chipslayoutmanager.cache.IViewCacheStorage;
-import com.beloo.widget.chipslayoutmanager.layouter.criteria.ICriteriaFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.placer.IPlacerFactory;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class LayouterFactory {
-    private ChipsLayoutManager layoutManager;
-    private IViewCacheStorage cacheStorage;
-
-    private List<ILayouterListener> layouterListeners = new ArrayList<>();
-
-    private IBreakerFactory breakerFactory;
-    private ICriteriaFactory criteriaFactory;
-    private IPlacerFactory placerFactory;
-    private IGravityModifiersFactory gravityModifiersFactory;
-    private IRowStrategy rowStrategy;
-    private ILayouterCreator layouterCreator;
-
-    LayouterFactory(ChipsLayoutManager layoutManager,
-                    ILayouterCreator layouterCreator,
-                    IBreakerFactory breakerFactory,
-                    ICriteriaFactory criteriaFactory,
-                    IPlacerFactory placerFactory,
-                    IGravityModifiersFactory gravityModifiersFactory,
-                    IRowStrategy rowStrategy) {
-        this.layouterCreator = layouterCreator;
-        this.cacheStorage = layoutManager.getViewPositionsStorage();
-        this.layoutManager = layoutManager;
-        this.breakerFactory = breakerFactory;
-        this.criteriaFactory = criteriaFactory;
-        this.placerFactory = placerFactory;
-        this.gravityModifiersFactory = gravityModifiersFactory;
-        this.rowStrategy = rowStrategy;
-    }
-
-    public void addLayouterListener(@Nullable ILayouterListener layouterListener) {
-        if (layouterListener != null) {
-            layouterListeners.add(layouterListener);
-        }
-    }
-
-    private AbstractLayouter.Builder createBackwardBuilder() {
-        return layouterCreator.createBackwardBuilder();
-    }
-
-    private AbstractLayouter.Builder createForwardBuilder() {
-        return layouterCreator.createForwardBuilder();
-    }
-    private Rect createOffsetRectForBackwardLayouter(@NonNull AnchorViewState anchorRect) {
-        return layouterCreator.createOffsetRectForBackwardLayouter(anchorRect);
-    }
-    private Rect createOffsetRectForForwardLayouter(AnchorViewState anchorRect) {
-        return layouterCreator.createOffsetRectForForwardLayouter(anchorRect);
-    }
-    private ICanvas createCanvas() {
-        return layoutManager.getCanvas();
-    }
-
-    @NonNull
-    private AbstractLayouter.Builder fillBasicBuilder(AbstractLayouter.Builder builder) {
-        return builder.layoutManager(layoutManager)
-                .canvas(createCanvas())
-                .childGravityResolver(layoutManager.getChildGravityResolver())
-                .cacheStorage(cacheStorage)
-                .gravityModifiersFactory(gravityModifiersFactory)
-                .addLayouterListeners(layouterListeners);
-    }
-
-    @Nullable
-    public final ILayouter getBackwardLayouter(@NonNull AnchorViewState anchorRect) {
-        return fillBasicBuilder(createBackwardBuilder())
-                .offsetRect(createOffsetRectForBackwardLayouter(anchorRect))
-                .breaker(breakerFactory.createBackwardRowBreaker())
-                .finishingCriteria(criteriaFactory.getBackwardFinishingCriteria())
-                .rowStrategy(rowStrategy)
-                .placer(placerFactory.getAtStartPlacer())
-                .positionIterator(new DecrementalPositionIterator(layoutManager.getItemCount()))
-                .build();
-    }
-
-    @NonNull
-    public final ILayouter getForwardLayouter(@NonNull AnchorViewState anchorRect) {
-        return fillBasicBuilder(createForwardBuilder())
-                .offsetRect(createOffsetRectForForwardLayouter(anchorRect))
-                .breaker(breakerFactory.createForwardRowBreaker())
-                .finishingCriteria(criteriaFactory.getForwardFinishingCriteria())
-                .rowStrategy(new SkipLastRowStrategy(rowStrategy, !layoutManager.isStrategyAppliedWithLastRow()))
-                .placer(placerFactory.getAtEndPlacer())
-                .positionIterator(new IncrementalPositionIterator(layoutManager.getItemCount()))
-                .build();
-    }
-
-    @NonNull
-    public final ILayouter buildForwardLayouter(@NonNull ILayouter layouter) {
-        AbstractLayouter abstractLayouter = (AbstractLayouter) layouter;
-        abstractLayouter.setFinishingCriteria(criteriaFactory.getForwardFinishingCriteria());
-        abstractLayouter.setPlacer(placerFactory.getAtEndPlacer());
-
-        return abstractLayouter;
-    }
-
-    @NonNull
-    public final ILayouter buildBackwardLayouter(@NonNull ILayouter layouter) {
-        AbstractLayouter abstractLayouter = (AbstractLayouter) layouter;
-        abstractLayouter.setFinishingCriteria(criteriaFactory.getBackwardFinishingCriteria());
-        abstractLayouter.setPlacer(placerFactory.getAtStartPlacer());
-
-        return abstractLayouter;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/LeftLayouter.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/LeftLayouter.java
deleted file mode 100644
index 0fb8141..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/LeftLayouter.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-import android.graphics.Rect;
-import android.util.Pair;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-
-import java.util.Collections;
-
-class LeftLayouter extends AbstractLayouter {
-
-    private LeftLayouter(Builder builder) {
-        super(builder);
-    }
-
-    public static Builder newBuilder() {
-        return new Builder();
-    }
-
-    @Override
-    Rect createViewRect(View view) {
-
-        int left = viewRight - getCurrentViewWidth();
-        int viewTop = viewBottom - getCurrentViewHeight();
-
-        Rect viewRect = new Rect(left, viewTop, viewRight, viewBottom);
-
-        viewBottom = viewRect.top;
-
-        return viewRect;
-    }
-
-    @Override
-    boolean isReverseOrder() {
-        return true;
-    }
-
-    @Override
-    void onPreLayout() {
-        int topOffsetOfRow = viewBottom - getCanvasTopBorder();
-        viewBottom = 0;
-
-        for (Pair<Rect, View> columnViewRectPair : rowViews) {
-            Rect viewRect = columnViewRectPair.first;
-
-            viewRect.top = viewRect.top - topOffsetOfRow;
-            viewRect.bottom = viewRect.bottom - topOffsetOfRow;
-
-            viewBottom = Math.max(viewBottom, viewRect.bottom);
-            viewLeft = Math.min(viewLeft, viewRect.left);
-            viewRight = Math.max(viewRight, viewRect.right);
-        }
-    }
-
-    @Override
-    void onAfterLayout() {
-        viewBottom = getCanvasBottomBorder();
-        viewRight = viewLeft;
-    }
-
-    @Override
-    boolean isAttachedViewFromNewRow(View view) {
-        int bottomOfCurrentView = getLayoutManager().getDecoratedBottom(view);
-        int rightOfCurrentView = getLayoutManager().getDecoratedRight(view);
-
-        return viewLeft >= rightOfCurrentView
-                && bottomOfCurrentView > viewBottom;
-    }
-
-    @Override
-    void onInterceptAttachView(View view) {
-        if (viewBottom != getCanvasBottomBorder() && viewBottom - getCurrentViewHeight() < getCanvasTopBorder()) {
-            //new column
-            viewBottom = getCanvasBottomBorder();
-            viewRight = viewLeft;
-        } else {
-            viewBottom = getLayoutManager().getDecoratedTop(view);
-        }
-
-        viewLeft = Math.min(viewLeft, getLayoutManager().getDecoratedLeft(view));
-    }
-
-    @Override
-    public int getStartRowBorder() {
-        return getViewLeft();
-    }
-
-    @Override
-    public int getEndRowBorder() {
-        return getViewRight();
-    }
-
-    @Override
-    public int getRowLength() {
-        return viewBottom - getCanvasTopBorder();
-    }
-
-    public static final class Builder extends AbstractLayouter.Builder {
-        private Builder() {
-        }
-
-        @NonNull
-        public LeftLayouter createLayouter() {
-            return new LeftLayouter(this);
-        }
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/MeasureSupporter.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/MeasureSupporter.java
deleted file mode 100644
index 09b9416..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/MeasureSupporter.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-
-import androidx.annotation.CallSuper;
-import androidx.recyclerview.widget.RecyclerView;
-
-public class MeasureSupporter extends RecyclerView.AdapterDataObserver implements IMeasureSupporter {
-
-    private RecyclerView.LayoutManager lm;
-    private boolean isAfterRemoving;
-
-    private int measuredWidth;
-    private int measuredHeight;
-
-    private boolean isRegistered;
-
-    /**
-     * width of RecyclerView before removing item
-     */
-    private Integer beforeRemovingWidth = null;
-
-    /**
-     * width which we receive after {@link RecyclerView.LayoutManager#onLayoutChildren} method finished.
-     * Contains correct width after auto-measuring
-     */
-    private int autoMeasureWidth = 0;
-
-    /**
-     * height of RecyclerView before removing item
-     */
-    private Integer beforeRemovingHeight = null;
-
-    /**
-     * height which we receive after {@link RecyclerView.LayoutManager#onLayoutChildren} method finished.
-     * Contains correct height after auto-measuring
-     */
-    private int autoMeasureHeight = 0;
-
-    public MeasureSupporter(RecyclerView.LayoutManager lm) {
-        this.lm = lm;
-    }
-
-    @Override
-    public void onSizeChanged() {
-        autoMeasureWidth = lm.getWidth();
-        autoMeasureHeight = lm.getHeight();
-    }
-
-    boolean isAfterRemoving() {
-        return isAfterRemoving;
-    }
-
-    @Override
-    public int getMeasuredWidth() {
-        return measuredWidth;
-    }
-
-    private void setMeasuredWidth(int measuredWidth) {
-        this.measuredWidth = measuredWidth;
-    }
-
-    @Override
-    public int getMeasuredHeight() {
-        return measuredHeight;
-    }
-
-    @Override
-    public boolean isRegistered() {
-        return isRegistered;
-    }
-
-    @Override
-    public void setRegistered(boolean isRegistered) {
-        this.isRegistered = isRegistered;
-    }
-
-    private void setMeasuredHeight(int measuredHeight) {
-        this.measuredHeight = measuredHeight;
-    }
-
-    @Override
-    @CallSuper
-    public void measure(int autoWidth, int autoHeight) {
-        if (isAfterRemoving()) {
-            setMeasuredWidth(Math.max(autoWidth, beforeRemovingWidth));
-            setMeasuredHeight(Math.max(autoHeight, beforeRemovingHeight));
-        } else {
-            setMeasuredWidth(autoWidth);
-            setMeasuredHeight(autoHeight);
-        }
-    }
-
-    @Override
-    public void onItemsRemoved(final RecyclerView recyclerView){
-        //subscribe to next animations tick
-        lm.postOnAnimation(new Runnable() {
-
-            private void onFinished() {
-                //when removing animation finished return auto-measuring back
-                isAfterRemoving = false;
-                // and process measure again
-                lm.requestLayout();
-            }
-
-            @Override
-            public void run() {
-                if (recyclerView.getItemAnimator() != null) {
-                    //listen removing animation
-                    recyclerView.getItemAnimator().isRunning(new RecyclerView.ItemAnimator.ItemAnimatorFinishedListener() {
-                        @Override
-                        public void onAnimationsFinished() {
-                            onFinished();
-                        }
-                    });
-                } else {
-                    onFinished();
-                }
-            }
-        });
-    }
-
-    @Override
-    @CallSuper
-    public void onItemRangeRemoved(int positionStart, int itemCount) {
-        super.onItemRangeRemoved(positionStart, itemCount);
-        /** we detected removing event, so should process measuring manually
-         * @see <a href="http://stackoverflow.com/questions/40242011/custom-recyclerviews-layoutmanager-automeasuring-after-animation-finished-on-i">Stack Overflow issue</a>
-         */
-        isAfterRemoving = true;
-
-        beforeRemovingWidth = autoMeasureWidth;
-        beforeRemovingHeight = autoMeasureHeight;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/RTLDownLayouter.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/RTLDownLayouter.java
deleted file mode 100644
index 4a1aad4..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/RTLDownLayouter.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-import android.graphics.Rect;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-
-class RTLDownLayouter extends AbstractLayouter {
-
-    private boolean isPurged;
-
-    private RTLDownLayouter(Builder builder) {
-        super(builder);
-    }
-
-    public static Builder newBuilder() {
-        return new Builder();
-    }
-
-    @Override
-    void onPreLayout() {
-        if (!rowViews.isEmpty()) {
-            //todo this isn't great place for that. Should be refactored somehow
-            if (!isPurged) {
-                isPurged = true;
-                getCacheStorage().purgeCacheFromPosition(getLayoutManager().getPosition(rowViews.get(0).second));
-            }
-
-            getCacheStorage().storeRow(rowViews);
-        }
-    }
-
-    @Override
-    void onAfterLayout() {
-        //go to next row, increase top coordinate, reset left
-        viewRight = getCanvasRightBorder();
-        viewTop = viewBottom;
-    }
-
-    @Override
-    boolean isAttachedViewFromNewRow(View view) {
-
-        int topOfCurrentView = getLayoutManager().getDecoratedTop(view);
-        int rightOfCurrentVIew = getLayoutManager().getDecoratedRight(view);
-
-        return viewBottom <= topOfCurrentView
-                && rightOfCurrentVIew > viewRight;
-    }
-
-    @Override
-    Rect createViewRect(View view) {
-        Rect viewRect = new Rect(viewRight - getCurrentViewWidth(), viewTop, viewRight, viewTop + getCurrentViewHeight());
-        viewRight = viewRect.left;
-        viewBottom = Math.max(viewBottom, viewRect.bottom);
-        return viewRect;
-    }
-
-    @Override
-    boolean isReverseOrder() {
-        return false;
-    }
-
-    @Override
-    public void onInterceptAttachView(View view) {
-        viewTop = getLayoutManager().getDecoratedTop(view);
-        viewRight = getLayoutManager().getDecoratedLeft(view);
-
-        viewBottom = Math.max(viewBottom, getLayoutManager().getDecoratedBottom(view));
-    }
-
-    @Override
-    public int getStartRowBorder() {
-        return getViewTop();
-    }
-
-    @Override
-    public int getEndRowBorder() {
-        return getViewBottom();
-    }
-
-    @Override
-    public int getRowLength() {
-        return getCanvasRightBorder() - viewRight;
-    }
-
-
-    public static final class Builder extends AbstractLayouter.Builder {
-        private Builder() {
-        }
-
-        @NonNull
-        public RTLDownLayouter createLayouter() {
-            return new RTLDownLayouter(this);
-        }
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/RTLRowsCreator.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/RTLRowsCreator.java
deleted file mode 100644
index bd85fd5..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/RTLRowsCreator.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-import android.graphics.Rect;
-
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.beloo.widget.chipslayoutmanager.ChipsLayoutManager;
-import com.beloo.widget.chipslayoutmanager.anchor.AnchorViewState;
-import com.beloo.widget.chipslayoutmanager.gravity.IGravityModifiersFactory;
-import com.beloo.widget.chipslayoutmanager.gravity.IRowStrategy;
-import com.beloo.widget.chipslayoutmanager.layouter.breaker.IBreakerFactory;
-import com.beloo.widget.chipslayoutmanager.cache.IViewCacheStorage;
-import com.beloo.widget.chipslayoutmanager.layouter.criteria.ICriteriaFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.placer.IPlacerFactory;
-
-class RTLRowsCreator implements ILayouterCreator {
-
-    private RecyclerView.LayoutManager layoutManager;
-
-    RTLRowsCreator(RecyclerView.LayoutManager layoutManager) {
-        this.layoutManager = layoutManager;
-    }
-
-    //---- up layouter below
-    @Override
-    public Rect createOffsetRectForBackwardLayouter(AnchorViewState anchor) {
-        Rect anchorRect = anchor.getAnchorViewRect();
-
-        return new Rect(
-                //we shouldn't include anchor view here, so anchorLeft is a rightOffset
-                anchorRect == null ? 0 : anchorRect.right,
-                anchorRect == null ? 0 : anchorRect.top,
-                0,
-                anchorRect == null ? 0 : anchorRect.bottom);
-    }
-
-    @Override
-    public AbstractLayouter.Builder createBackwardBuilder() {
-        return RTLUpLayouter.newBuilder();
-    }
-
-    //---- down layouter below
-
-    @Override
-    public AbstractLayouter.Builder createForwardBuilder() {
-        return RTLDownLayouter.newBuilder();
-    }
-
-    @Override
-    public Rect createOffsetRectForForwardLayouter(AnchorViewState anchor) {
-        Rect anchorRect = anchor.getAnchorViewRect();
-
-        return new Rect(
-                0,
-                anchorRect == null ? anchor.getPosition() == 0 ? layoutManager.getPaddingTop() : 0 : anchorRect.top,
-                anchorRect == null ? layoutManager.getPaddingRight() : anchorRect.right,
-                anchorRect == null ? anchor.getPosition() == 0 ? layoutManager.getPaddingBottom() : 0 : anchorRect.bottom);
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/RTLRowsOrientationStateFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/RTLRowsOrientationStateFactory.java
deleted file mode 100644
index bdf8545..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/RTLRowsOrientationStateFactory.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.beloo.widget.chipslayoutmanager.gravity.IRowStrategyFactory;
-import com.beloo.widget.chipslayoutmanager.gravity.RTLRowStrategyFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.breaker.IBreakerFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.breaker.RTLRowBreakerFactory;
-
-class RTLRowsOrientationStateFactory implements IOrientationStateFactory {
-
-    @Override
-    public ILayouterCreator createLayouterCreator(RecyclerView.LayoutManager lm) {
-        return new RTLRowsCreator(lm);
-    }
-
-    @Override
-    public IRowStrategyFactory createRowStrategyFactory() {
-        return new RTLRowStrategyFactory();
-    }
-
-    @Override
-    public IBreakerFactory createDefaultBreaker() {
-        return new RTLRowBreakerFactory();
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/RTLUpLayouter.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/RTLUpLayouter.java
deleted file mode 100644
index 1a249a3..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/RTLUpLayouter.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-import android.graphics.Rect;
-import android.util.Pair;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-
-import java.util.Collections;
-
-class RTLUpLayouter extends AbstractLayouter implements ILayouter {
-    private static final String TAG = RTLUpLayouter.class.getSimpleName();
-
-    private RTLUpLayouter(Builder builder) {
-        super(builder);
-    }
-
-    public static Builder newBuilder() {
-        return new Builder();
-    }
-
-    @Override
-    void onPreLayout() {
-        int leftOffsetOfRow = -(getCanvasRightBorder() - viewLeft);
-
-        viewLeft = rowViews.size() > 0 ? Integer.MAX_VALUE : 0;
-
-        for (Pair<Rect, View> rowViewRectPair : rowViews) {
-            Rect viewRect = rowViewRectPair.first;
-
-            viewRect.left = viewRect.left - leftOffsetOfRow;
-            viewRect.right = viewRect.right - leftOffsetOfRow;
-
-            viewLeft = Math.min(viewLeft, viewRect.left);
-            viewTop = Math.min(viewTop, viewRect.top);
-            viewBottom = Math.max(viewBottom, viewRect.bottom);
-        }
-    }
-
-    @Override
-    void onAfterLayout() {
-        //go to next row, increase top coordinate, reset left
-        viewLeft = getCanvasLeftBorder();
-        viewBottom = viewTop;
-    }
-
-    @Override
-    boolean isAttachedViewFromNewRow(View view) {
-        int bottomOfCurrentView = getLayoutManager().getDecoratedBottom(view);
-        int leftOfCurrentView = getLayoutManager().getDecoratedLeft(view);
-
-        return viewTop >= bottomOfCurrentView
-                && leftOfCurrentView < viewLeft;
-    }
-
-    @Override
-    Rect createViewRect(View view) {
-        int right = viewLeft + getCurrentViewWidth();
-        int viewTop = viewBottom - getCurrentViewHeight();
-        Rect viewRect = new Rect(viewLeft, viewTop, right, viewBottom);
-        viewLeft = viewRect.right;
-        return viewRect;
-    }
-
-    @Override
-    boolean isReverseOrder() {
-        return true;
-    }
-
-    @Override
-    public void onInterceptAttachView(View view) {
-        if (viewLeft != getCanvasLeftBorder() && viewLeft + getCurrentViewWidth() > getCanvasRightBorder()) {
-            viewLeft = getCanvasLeftBorder();
-            viewBottom = viewTop;
-        } else {
-            viewLeft = getLayoutManager().getDecoratedRight(view);
-        }
-
-        viewTop = Math.min(viewTop, getLayoutManager().getDecoratedTop(view));
-    }
-
-    @Override
-    public int getStartRowBorder() {
-        return getViewTop();
-    }
-
-    @Override
-    public int getEndRowBorder() {
-        return getViewBottom();
-    }
-
-    @Override
-    public int getRowLength() {
-        return getCanvasRightBorder() - viewLeft;
-    }
-
-    public static final class Builder extends AbstractLayouter.Builder {
-        private Builder() {
-        }
-
-        @NonNull
-        public RTLUpLayouter createLayouter() {
-            return new RTLUpLayouter(this);
-        }
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/RightLayouter.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/RightLayouter.java
deleted file mode 100644
index 4a6abf0..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/RightLayouter.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-import android.graphics.Rect;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-
-class RightLayouter extends AbstractLayouter {
-
-    private boolean isPurged;
-
-    private RightLayouter(Builder builder) {
-        super(builder);
-    }
-
-    public static Builder newBuilder() {
-        return new Builder();
-    }
-
-    @Override
-    Rect createViewRect(View view) {
-        Rect viewRect = new Rect(viewLeft, viewTop, viewLeft + getCurrentViewWidth(), viewTop + getCurrentViewHeight());
-
-        viewBottom = viewRect.bottom;
-        viewTop = viewBottom;
-        viewRight = Math.max(viewRight, viewRect.right);
-        return viewRect;
-    }
-
-    @Override
-    boolean isReverseOrder() {
-        return false;
-    }
-
-    @Override
-    void onPreLayout() {
-        if (!rowViews.isEmpty()) {
-            //todo this isn't great place for that. Should be refactored somehow
-            if (!isPurged) {
-                isPurged = true;
-                getCacheStorage().purgeCacheFromPosition(getLayoutManager().getPosition(rowViews.get(0).second));
-            }
-
-            //cache only when go down
-            getCacheStorage().storeRow(rowViews);
-        }
-    }
-
-    @Override
-    void onAfterLayout() {
-        //go to next column, increase left coordinate, reset top
-        viewLeft = getViewRight();
-        viewTop = getCanvasTopBorder();
-    }
-
-    @Override
-    boolean isAttachedViewFromNewRow(View view) {
-        int leftOfCurrentView = getLayoutManager().getDecoratedLeft(view);
-        int topOfCurrentView = getLayoutManager().getDecoratedTop(view);
-
-        return viewRight <= leftOfCurrentView
-                && topOfCurrentView < viewTop;
-    }
-
-    @Override
-    void onInterceptAttachView(View view) {
-        viewTop = getLayoutManager().getDecoratedBottom(view);
-        viewLeft = getLayoutManager().getDecoratedLeft(view);
-        viewRight = Math.max(viewRight, getLayoutManager().getDecoratedRight(view));
-    }
-
-    @Override
-    public int getStartRowBorder() {
-        return getViewLeft();
-    }
-
-    @Override
-    public int getEndRowBorder() {
-        return getViewRight();
-    }
-
-    @Override
-    public int getRowLength() {
-        return viewTop - getCanvasTopBorder();
-    }
-
-    public static final class Builder extends AbstractLayouter.Builder {
-        private Builder() {
-        }
-
-        @NonNull
-        public RightLayouter createLayouter() {
-            return new RightLayouter(this);
-        }
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/RowSquare.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/RowSquare.java
deleted file mode 100644
index ed8e602..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/RowSquare.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-
-import androidx.recyclerview.widget.RecyclerView;
-
-class RowSquare extends Square {
-
-    RowSquare(RecyclerView.LayoutManager lm) {
-        super(lm);
-    }
-
-    public final int getCanvasRightBorder() {
-        return lm.getWidth() - lm.getPaddingRight();
-    }
-
-    /** get bottom border. Controlled by clipToPadding property*/
-    public final int getCanvasBottomBorder() {
-        return lm.getHeight();
-    }
-
-    public final int getCanvasLeftBorder() {
-        return lm.getPaddingLeft();
-    }
-
-    /** get bottom border. Controlled by clipToPadding property*/
-    public final int getCanvasTopBorder() {
-        return 0;
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/RowsStateFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/RowsStateFactory.java
deleted file mode 100644
index a90497e..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/RowsStateFactory.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-import android.view.View;
-
-import com.beloo.widget.chipslayoutmanager.ChipsLayoutManager;
-import com.beloo.widget.chipslayoutmanager.IScrollingController;
-import com.beloo.widget.chipslayoutmanager.anchor.AnchorViewState;
-import com.beloo.widget.chipslayoutmanager.anchor.IAnchorFactory;
-import com.beloo.widget.chipslayoutmanager.anchor.RowsAnchorFactory;
-import com.beloo.widget.chipslayoutmanager.gravity.RowGravityModifiersFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.breaker.DecoratorBreakerFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.criteria.AbstractCriteriaFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.criteria.ICriteriaFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.criteria.InfiniteCriteriaFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.criteria.RowsCriteriaFactory;
-import com.beloo.widget.chipslayoutmanager.layouter.placer.IPlacerFactory;
-import com.beloo.widget.chipslayoutmanager.util.StateHelper;
-
-public class RowsStateFactory implements IStateFactory {
-
-    private ChipsLayoutManager lm;
-
-    public RowsStateFactory(ChipsLayoutManager lm) {
-        this.lm = lm;
-    }
-
-    private IOrientationStateFactory createOrientationStateFactory() {
-        return lm.isLayoutRTL() ? new RTLRowsOrientationStateFactory() : new LTRRowsOrientationStateFactory();
-    }
-
-    @Override
-    public LayouterFactory createLayouterFactory(ICriteriaFactory criteriaFactory, IPlacerFactory placerFactory) {
-        IOrientationStateFactory orientationStateFactory = createOrientationStateFactory();
-
-        return new LayouterFactory(lm,
-                orientationStateFactory.createLayouterCreator(lm),
-                new DecoratorBreakerFactory(
-                        lm.getViewPositionsStorage(),
-                        lm.getRowBreaker(),
-                        lm.getMaxViewsInRow(),
-                        orientationStateFactory.createDefaultBreaker()),
-                criteriaFactory,
-                placerFactory,
-                new RowGravityModifiersFactory(),
-                orientationStateFactory.createRowStrategyFactory().createRowStrategy(lm.getRowStrategyType()));
-    }
-
-    @Override
-    public AbstractCriteriaFactory createDefaultFinishingCriteriaFactory() {
-        return StateHelper.isInfinite(this)? new InfiniteCriteriaFactory() : new RowsCriteriaFactory();
-    }
-
-    @Override
-    public IAnchorFactory anchorFactory() {
-        return new RowsAnchorFactory(lm, lm.getCanvas());
-    }
-
-    @Override
-    public IScrollingController scrollingController() {
-        return lm.verticalScrollingController();
-    }
-
-    @Override
-    public ICanvas createCanvas() {
-        return new RowSquare(lm);
-    }
-
-    @Override
-    public int getSizeMode() {
-        return lm.getHeightMode();
-    }
-
-    @Override
-    public int getStart() {
-        return 0;
-    }
-
-    @Override
-    public int getStart(View view) {
-        return lm.getDecoratedTop(view);
-    }
-
-    @Override
-    public int getStart(AnchorViewState anchor) {
-        return anchor.getAnchorViewRect().top;
-    }
-
-    @Override
-    public int getEnd() {
-        return lm.getHeight();
-    }
-
-    @Override
-    public int getEnd(View view) {
-        return lm.getDecoratedBottom(view);
-    }
-
-    @Override
-    public int getEnd(AnchorViewState anchor) {
-        return anchor.getAnchorViewRect().bottom;
-    }
-
-    @Override
-    public int getEndViewPosition() {
-        return lm.getPosition(lm.getCanvas().getRightView());
-    }
-
-    @Override
-    public int getStartAfterPadding() {
-        return lm.getPaddingTop();
-    }
-
-    @Override
-    public int getStartViewPosition() {
-        return lm.getPosition(lm.getCanvas().getLeftView());
-    }
-
-    @Override
-    public int getEndAfterPadding() {
-        return lm.getHeight() - lm.getPaddingBottom();
-    }
-
-    @Override
-    public int getStartViewBound() {
-        return getStart(lm.getCanvas().getTopView());
-    }
-
-    @Override
-    public int getEndViewBound() {
-        return getEnd(lm.getCanvas().getBottomView());
-    }
-
-    @Override
-    public int getTotalSpace() {
-        return lm.getHeight() - lm.getPaddingTop()
-                - lm.getPaddingBottom();
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/Square.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/Square.java
deleted file mode 100644
index 1f76ec6..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/Square.java
+++ /dev/null
@@ -1,175 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-import android.graphics.Rect;
-import android.view.View;
-
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.beloo.widget.chipslayoutmanager.ChildViewsIterable;
-import com.beloo.widget.chipslayoutmanager.ChipsLayoutManager;
-
-abstract class Square implements ICanvas {
-
-    RecyclerView.LayoutManager lm;
-    private ChildViewsIterable childViews;
-
-    /**
-     * highest view in layout. Have always actual value, because it set in {@link ChipsLayoutManager#onLayoutChildren}
-     */
-    private View topView;
-    /**
-     * lowest view in layout. Have always actual value, because it set in {@link ChipsLayoutManager#onLayoutChildren}
-     */
-    private View bottomView;
-
-    /**
-     * The view have placed in the closest to the left border. Have always actual value, because it set in {@link ChipsLayoutManager#onLayoutChildren}
-     */
-    private View leftView;
-
-    /** The view have placed in the closest to the right border. Have always actual value, because it set in {@link ChipsLayoutManager#onLayoutChildren} */
-    private View rightView;
-
-    /** minimal position visible on screen*/
-    private Integer minPositionOnScreen;
-    private Integer maxPositionOnScreen;
-
-    private boolean isFirstItemAdded;
-
-    Square(RecyclerView.LayoutManager lm) {
-        this.lm = lm;
-        childViews = new ChildViewsIterable(lm);
-    }
-
-    @Override
-    public Rect getCanvasRect() {
-        return new Rect(getCanvasLeftBorder(), getCanvasTopBorder(), getCanvasRightBorder(), getCanvasBottomBorder());
-    }
-
-    @Override
-    public Rect getViewRect(View view) {
-        int left = lm.getDecoratedLeft(view);
-        int top = lm.getDecoratedTop(view);
-        int right = lm.getDecoratedRight(view);
-        int bottom = lm.getDecoratedBottom(view);
-        return new Rect(left, top, right, bottom);
-    }
-
-    @Override
-    public boolean isInside(Rect rectCandidate) {
-        //intersection changes rect!!!
-        Rect intersect = new Rect(rectCandidate);
-        return getCanvasRect().intersect(intersect);
-    }
-
-    @Override
-    public boolean isInside(View viewCandidate) {
-        return isInside(getViewRect(viewCandidate));
-    }
-
-    @Override
-    public boolean isFullyVisible(View view) {
-        Rect rect = getViewRect(view);
-        return isFullyVisible(rect);
-    }
-
-    @Override
-    public boolean isFullyVisible(Rect rect) {
-        return rect.top >= getCanvasTopBorder()
-                && rect.bottom <= getCanvasBottomBorder()
-                && rect.left >= getCanvasLeftBorder()
-                && rect.right <= getCanvasRightBorder();
-    }
-
-    /**
-     * find highest & lowest views among visible attached views
-     */
-    @Override
-    public void findBorderViews() {
-        topView = null;
-        bottomView = null;
-        leftView = null;
-        rightView = null;
-        minPositionOnScreen = RecyclerView.NO_POSITION;
-        maxPositionOnScreen = RecyclerView.NO_POSITION;
-
-        isFirstItemAdded = false;
-
-        if (lm.getChildCount() > 0) {
-            View initView = lm.getChildAt(0);
-            topView = initView;
-            bottomView = initView;
-            leftView = initView;
-            rightView = initView;
-
-            for (View view : childViews) {
-                int position = lm.getPosition(view);
-
-                if (!isInside(view)) continue;
-
-                if (lm.getDecoratedTop(view) < lm.getDecoratedTop(topView)) {
-                    topView = view;
-                }
-
-                if (lm.getDecoratedBottom(view) > lm.getDecoratedBottom(bottomView)) {
-                    bottomView = view;
-                }
-
-                if (lm.getDecoratedLeft(view) < lm.getDecoratedLeft(leftView)) {
-                    leftView = view;
-                }
-
-                if (lm.getDecoratedRight(view) > lm.getDecoratedRight(rightView)) {
-                    rightView = view;
-                }
-
-                if (minPositionOnScreen == RecyclerView.NO_POSITION || position < minPositionOnScreen) {
-                    minPositionOnScreen = position;
-                }
-
-                if (maxPositionOnScreen == RecyclerView.NO_POSITION || position > maxPositionOnScreen) {
-                    maxPositionOnScreen = position;
-                }
-
-                if (position == 0) {
-                    isFirstItemAdded = true;
-                }
-            }
-        }
-    }
-
-    @Override
-    public View getTopView() {
-        return topView;
-    }
-
-    @Override
-    public View getBottomView() {
-        return bottomView;
-    }
-
-    @Override
-    public View getLeftView() {
-        return leftView;
-    }
-
-    @Override
-    public View getRightView() {
-        return rightView;
-    }
-
-    @Override
-    public Integer getMinPositionOnScreen() {
-        return minPositionOnScreen;
-    }
-
-    @Override
-    public Integer getMaxPositionOnScreen() {
-        return maxPositionOnScreen;
-    }
-
-    @Override
-    public boolean isFirstItemAdded() {
-        return isFirstItemAdded;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/BackwardBreakerContract.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/BackwardBreakerContract.java
deleted file mode 100644
index 150cd8b..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/BackwardBreakerContract.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.breaker;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-class BackwardBreakerContract extends RowBreakerDecorator{
-
-    private IRowBreaker breaker;
-
-    BackwardBreakerContract(IRowBreaker breaker, ILayoutRowBreaker decorate) {
-        super(decorate);
-        this.breaker = breaker;
-    }
-
-    @Override
-    public boolean isRowBroke(AbstractLayouter al) {
-        return super.isRowBroke(al) ||
-                breaker.isItemBreakRow(al.getCurrentViewPosition());
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/CacheRowBreaker.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/CacheRowBreaker.java
deleted file mode 100644
index 3d9e1f1..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/CacheRowBreaker.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.breaker;
-
-import com.beloo.widget.chipslayoutmanager.cache.IViewCacheStorage;
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-class CacheRowBreaker extends RowBreakerDecorator {
-
-    private IViewCacheStorage cacheStorage;
-
-    CacheRowBreaker(IViewCacheStorage cacheStorage, ILayoutRowBreaker decorate) {
-        super(decorate);
-        this.cacheStorage = cacheStorage;
-    }
-
-    @Override
-    public boolean isRowBroke(AbstractLayouter al) {
-        boolean stopDueToCache = cacheStorage.isPositionEndsRow(al.getCurrentViewPosition());
-        return super.isRowBroke(al) || stopDueToCache;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/ColumnBreakerFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/ColumnBreakerFactory.java
deleted file mode 100644
index d8c5172..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/ColumnBreakerFactory.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.breaker;
-
-public class ColumnBreakerFactory implements IBreakerFactory {
-    @Override
-    public ILayoutRowBreaker createBackwardRowBreaker() {
-        return new LTRBackwardColumnBreaker();
-    }
-
-    @Override
-    public ILayoutRowBreaker createForwardRowBreaker() {
-        return new LTRForwardColumnBreaker();
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/DecoratorBreakerFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/DecoratorBreakerFactory.java
deleted file mode 100644
index 804a5fe..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/DecoratorBreakerFactory.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.breaker;
-
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import com.beloo.widget.chipslayoutmanager.cache.IViewCacheStorage;
-
-public class DecoratorBreakerFactory implements IBreakerFactory {
-
-    private IBreakerFactory breakerFactory;
-    private IViewCacheStorage cacheStorage;
-    private IRowBreaker rowBreaker;
-
-    /** Max items in row restriction. Layout of row should be stopped when this count of views reached*/
-    @Nullable
-    private Integer maxViewsInRow;
-
-    public DecoratorBreakerFactory(@NonNull IViewCacheStorage cacheStorage,
-                                   @NonNull IRowBreaker rowBreaker,
-                                   @Nullable Integer maxViewsInRow,
-                                   @NonNull IBreakerFactory breakerFactory) {
-        this.cacheStorage = cacheStorage;
-        this.rowBreaker = rowBreaker;
-        this.maxViewsInRow = maxViewsInRow;
-        this.breakerFactory = breakerFactory;
-    }
-
-    @Override
-    public ILayoutRowBreaker createBackwardRowBreaker() {
-        ILayoutRowBreaker breaker = breakerFactory.createBackwardRowBreaker();
-        breaker = new BackwardBreakerContract(rowBreaker, new CacheRowBreaker(cacheStorage, breaker));
-        if (maxViewsInRow != null) {
-            breaker = new MaxViewsBreaker(maxViewsInRow, breaker);
-        }
-        return breaker;
-    }
-
-    @Override
-    public ILayoutRowBreaker createForwardRowBreaker() {
-        ILayoutRowBreaker breaker = breakerFactory.createForwardRowBreaker();
-        breaker = new ForwardBreakerContract(rowBreaker, breaker);
-        if (maxViewsInRow != null) {
-            breaker = new MaxViewsBreaker(maxViewsInRow, breaker);
-        }
-        return breaker;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/EmptyRowBreaker.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/EmptyRowBreaker.java
deleted file mode 100644
index c77901e..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/EmptyRowBreaker.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.breaker;
-
-public class EmptyRowBreaker implements IRowBreaker {
-    @Override
-    public boolean isItemBreakRow(int position) {
-        return false;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/ForwardBreakerContract.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/ForwardBreakerContract.java
deleted file mode 100644
index f2ebf3b..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/ForwardBreakerContract.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.breaker;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-class ForwardBreakerContract extends RowBreakerDecorator {
-
-    private IRowBreaker breaker;
-
-    ForwardBreakerContract(IRowBreaker breaker, ILayoutRowBreaker decorate) {
-        super(decorate);
-        this.breaker = breaker;
-    }
-
-    @Override
-    public boolean isRowBroke(AbstractLayouter al) {
-        return super.isRowBroke(al) ||
-                (al.getCurrentViewPosition() != 0 && breaker.isItemBreakRow(al.getCurrentViewPosition() - 1));
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/IBreakerFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/IBreakerFactory.java
deleted file mode 100644
index 693e585..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/IBreakerFactory.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.breaker;
-
-public interface IBreakerFactory {
-    ILayoutRowBreaker createBackwardRowBreaker();
-
-    ILayoutRowBreaker createForwardRowBreaker();
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/ILayoutRowBreaker.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/ILayoutRowBreaker.java
deleted file mode 100644
index 47647f0..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/ILayoutRowBreaker.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.breaker;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-public interface ILayoutRowBreaker {
-    boolean isRowBroke(AbstractLayouter al);
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/IRowBreaker.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/IRowBreaker.java
deleted file mode 100644
index 0dff56e..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/IRowBreaker.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.breaker;
-
-
-import androidx.annotation.IntRange;
-
-/** determines whether LM should break row from view position  */
-public interface IRowBreaker {
-    /** @return `true` means that it is the last view in the row.
-     * `false` means that breaking behaviour about current view will be based on another conditions  */
-    boolean isItemBreakRow(@IntRange(from = 0) int position);
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/LTRBackwardColumnBreaker.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/LTRBackwardColumnBreaker.java
deleted file mode 100644
index ee0510d..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/LTRBackwardColumnBreaker.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.breaker;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-public class LTRBackwardColumnBreaker implements ILayoutRowBreaker {
-
-    @Override
-    public boolean isRowBroke(AbstractLayouter al) {
-        return al.getViewBottom() - al.getCurrentViewHeight() < al.getCanvasTopBorder()
-                && al.getViewBottom() < al.getCanvasBottomBorder();
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/LTRBackwardRowBreaker.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/LTRBackwardRowBreaker.java
deleted file mode 100644
index 97eaf25..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/LTRBackwardRowBreaker.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.breaker;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-/** this is basis row breaker for {@link com.beloo.widget.chipslayoutmanager.layouter.LTRUpLayouter} */
-class LTRBackwardRowBreaker implements ILayoutRowBreaker {
-    @Override
-    public boolean isRowBroke(AbstractLayouter al) {
-        return al.getViewRight() - al.getCurrentViewWidth() < al.getCanvasLeftBorder()
-                && al.getViewRight() < al.getCanvasRightBorder();
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/LTRForwardColumnBreaker.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/LTRForwardColumnBreaker.java
deleted file mode 100644
index 455c4f7..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/LTRForwardColumnBreaker.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.breaker;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-public class LTRForwardColumnBreaker implements ILayoutRowBreaker {
-
-    @Override
-    public boolean isRowBroke(AbstractLayouter al) {
-        return al.getViewTop() > al.getCanvasTopBorder()
-                && al.getViewTop() + al.getCurrentViewHeight() > al.getCanvasBottomBorder();
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/LTRForwardRowBreaker.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/LTRForwardRowBreaker.java
deleted file mode 100644
index 903dee4..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/LTRForwardRowBreaker.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.breaker;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-/** this is basis row breaker for {@link com.beloo.widget.chipslayoutmanager.layouter.LTRDownLayouter} */
-class LTRForwardRowBreaker implements ILayoutRowBreaker {
-
-    @Override
-    public boolean isRowBroke(AbstractLayouter al) {
-        return al.getViewLeft() > al.getCanvasLeftBorder()
-                && al.getViewLeft() + al.getCurrentViewWidth() > al.getCanvasRightBorder();
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/LTRRowBreakerFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/LTRRowBreakerFactory.java
deleted file mode 100644
index a06622e..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/LTRRowBreakerFactory.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.breaker;
-
-public class LTRRowBreakerFactory implements IBreakerFactory {
-    @Override
-    public ILayoutRowBreaker createBackwardRowBreaker() {
-        return new LTRBackwardRowBreaker();
-    }
-
-    @Override
-    public ILayoutRowBreaker createForwardRowBreaker() {
-        return new LTRForwardRowBreaker();
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/MaxViewsBreaker.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/MaxViewsBreaker.java
deleted file mode 100644
index c628c44..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/MaxViewsBreaker.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.breaker;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-/** brakes the row in case max views size in row reached */
-public class MaxViewsBreaker extends RowBreakerDecorator {
-
-    private int maxViewsInRow;
-
-    MaxViewsBreaker(int maxViewsInRow, ILayoutRowBreaker decorate) {
-        super(decorate);
-        this.maxViewsInRow = maxViewsInRow;
-    }
-
-    @Override
-    public boolean isRowBroke(AbstractLayouter al) {
-        return super.isRowBroke(al)
-                || al.getRowSize() >= maxViewsInRow;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/RTLBackwardRowBreaker.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/RTLBackwardRowBreaker.java
deleted file mode 100644
index ab99b7d..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/RTLBackwardRowBreaker.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.breaker;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-/** this is basis row breaker for {@link com.beloo.widget.chipslayoutmanager.layouter.RTLUpLayouter} */
-class RTLBackwardRowBreaker implements ILayoutRowBreaker {
-
-    @Override
-    public boolean isRowBroke(AbstractLayouter al) {
-        return al.getViewLeft() + al.getCurrentViewWidth() > al.getCanvasRightBorder()
-                && al.getViewLeft() > al.getCanvasLeftBorder();
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/RTLForwardRowBreaker.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/RTLForwardRowBreaker.java
deleted file mode 100644
index 7dc130b..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/RTLForwardRowBreaker.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.breaker;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-/** this is basis row breaker for {@link com.beloo.widget.chipslayoutmanager.layouter.RTLDownLayouter} */
-class RTLForwardRowBreaker implements ILayoutRowBreaker {
-
-    @Override
-    public boolean isRowBroke(AbstractLayouter al) {
-        return al.getViewRight() < al.getCanvasRightBorder()
-                && al.getViewRight() - al.getCurrentViewWidth() < al.getCanvasLeftBorder();
-
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/RTLRowBreakerFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/RTLRowBreakerFactory.java
deleted file mode 100644
index 9e772a3..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/RTLRowBreakerFactory.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.breaker;
-
-public class RTLRowBreakerFactory implements IBreakerFactory {
-    @Override
-    public ILayoutRowBreaker createBackwardRowBreaker() {
-        return new RTLBackwardRowBreaker();
-    }
-
-    @Override
-    public ILayoutRowBreaker createForwardRowBreaker() {
-        return new RTLForwardRowBreaker();
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/RowBreakerDecorator.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/RowBreakerDecorator.java
deleted file mode 100644
index bfe7552..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/breaker/RowBreakerDecorator.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.breaker;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-class RowBreakerDecorator implements ILayoutRowBreaker {
-
-    private ILayoutRowBreaker decorate;
-
-    RowBreakerDecorator(ILayoutRowBreaker decorate) {
-        this.decorate = decorate;
-    }
-
-    @Override
-    public boolean isRowBroke(AbstractLayouter al) {
-        return decorate.isRowBroke(al);
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/AbstractCriteriaFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/AbstractCriteriaFactory.java
deleted file mode 100644
index 25e1356..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/AbstractCriteriaFactory.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.criteria;
-
-
-import androidx.annotation.IntRange;
-
-public abstract class AbstractCriteriaFactory implements ICriteriaFactory {
-    int additionalLength;
-    int additionalRowCount;
-
-    public void setAdditionalLength(@IntRange(from = 0) int additionalHeight) {
-        if (additionalHeight < 0) throw new IllegalArgumentException("additional height can't be negative");
-        this.additionalLength = additionalHeight;
-    }
-
-    public void setAdditionalRowsCount(int additionalRowCount) {
-        this.additionalRowCount = additionalRowCount;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/ColumnsCriteriaFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/ColumnsCriteriaFactory.java
deleted file mode 100644
index c82ea8e..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/ColumnsCriteriaFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.criteria;
-
-
-import androidx.annotation.NonNull;
-
-public class ColumnsCriteriaFactory extends AbstractCriteriaFactory {
-
-    @SuppressWarnings("UnnecessaryLocalVariable")
-    @NonNull
-    @Override
-    public IFinishingCriteria getBackwardFinishingCriteria() {
-        IFinishingCriteria criteria = new CriteriaLeftLayouterFinished();
-        if (additionalLength != 0) {
-            criteria = new CriteriaLeftAdditionalWidth(criteria, additionalLength);
-        }
-        return criteria;
-    }
-
-    @NonNull
-    @Override
-    public IFinishingCriteria getForwardFinishingCriteria() {
-        IFinishingCriteria criteria = new CriteriaRightLayouterFinished();
-        if (additionalLength != 0) {
-            criteria = new CriteriaRightAdditionalWidth(criteria, additionalLength);
-        }
-        if (additionalRowCount != 0) {
-            criteria = new CriteriaAdditionalRow(criteria, additionalRowCount);
-        }
-        return criteria;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaAdditionalRow.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaAdditionalRow.java
deleted file mode 100644
index b650b4d..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaAdditionalRow.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.criteria;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-import com.beloo.widget.chipslayoutmanager.layouter.ILayouter;
-import com.beloo.widget.chipslayoutmanager.layouter.ILayouterListener;
-
-class CriteriaAdditionalRow extends FinishingCriteriaDecorator implements IFinishingCriteria, ILayouterListener {
-
-    private int requiredRowsCount;
-
-    private int additionalRowsCount;
-
-    CriteriaAdditionalRow(IFinishingCriteria finishingCriteria, int requiredRowsCount) {
-        super(finishingCriteria);
-        this.requiredRowsCount = requiredRowsCount;
-    }
-
-    @Override
-    public boolean isFinishedLayouting(AbstractLayouter abstractLayouter) {
-        abstractLayouter.addLayouterListener(this);
-        return super.isFinishedLayouting(abstractLayouter) && additionalRowsCount >= requiredRowsCount;
-    }
-
-    @Override
-    public void onLayoutRow(ILayouter layouter) {
-        if (super.isFinishedLayouting((AbstractLayouter) layouter)) {
-            additionalRowsCount++;
-        }
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaDownAdditionalHeight.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaDownAdditionalHeight.java
deleted file mode 100644
index 992d919..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaDownAdditionalHeight.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.criteria;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-class CriteriaDownAdditionalHeight extends FinishingCriteriaDecorator {
-
-    private int additionalHeight;
-
-    CriteriaDownAdditionalHeight(IFinishingCriteria finishingCriteria, int additionalHeight) {
-        super(finishingCriteria);
-        this.additionalHeight = additionalHeight;
-    }
-
-    @Override
-    public boolean isFinishedLayouting(AbstractLayouter abstractLayouter) {
-        int bottomBorder = abstractLayouter.getCanvasBottomBorder();
-        return super.isFinishedLayouting(abstractLayouter) &&
-                //if additional height filled
-                abstractLayouter.getViewTop() > bottomBorder + additionalHeight;
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaDownLayouterFinished.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaDownLayouterFinished.java
deleted file mode 100644
index edca31d..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaDownLayouterFinished.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.criteria;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-class CriteriaDownLayouterFinished implements IFinishingCriteria {
-
-    private boolean isFinished;
-
-    @Override
-    public boolean isFinishedLayouting(AbstractLayouter abstractLayouter) {
-        isFinished = isFinished || abstractLayouter.getViewTop() >= abstractLayouter.getCanvasBottomBorder();
-        return isFinished;
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaLeftAdditionalWidth.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaLeftAdditionalWidth.java
deleted file mode 100644
index b2a5460..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaLeftAdditionalWidth.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.criteria;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-class CriteriaLeftAdditionalWidth extends FinishingCriteriaDecorator {
-
-    private int additionalWidth;
-
-    CriteriaLeftAdditionalWidth(IFinishingCriteria finishingCriteria, int additionalWidth) {
-        super(finishingCriteria);
-        this.additionalWidth = additionalWidth;
-    }
-
-    @Override
-    public boolean isFinishedLayouting(AbstractLayouter abstractLayouter) {
-        int leftBorder = abstractLayouter.getCanvasLeftBorder();
-        return super.isFinishedLayouting(abstractLayouter) &&
-                //if additional height filled
-                abstractLayouter.getViewRight() < leftBorder - additionalWidth;
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaLeftLayouterFinished.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaLeftLayouterFinished.java
deleted file mode 100644
index 56cfd9c..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaLeftLayouterFinished.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.criteria;
-
-import android.util.Log;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-class CriteriaLeftLayouterFinished implements IFinishingCriteria {
-    @Override
-    public boolean isFinishedLayouting(AbstractLayouter abstractLayouter) {
-        return abstractLayouter.getViewRight() <= abstractLayouter.getCanvasLeftBorder();
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaPolitePositionReached.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaPolitePositionReached.java
deleted file mode 100644
index cc4f32e..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaPolitePositionReached.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.criteria;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-import com.beloo.widget.chipslayoutmanager.layouter.ILayouter;
-import com.beloo.widget.chipslayoutmanager.layouter.ILayouterListener;
-import com.beloo.widget.chipslayoutmanager.layouter.Item;
-
-public class CriteriaPolitePositionReached extends FinishingCriteriaDecorator implements IFinishingCriteria, ILayouterListener {
-
-    private boolean isPositionReached;
-    private int reachedPosition;
-
-    CriteriaPolitePositionReached(AbstractLayouter abstractLayouter, IFinishingCriteria finishingCriteria, int reachedPosition) {
-        super(finishingCriteria);
-        this.reachedPosition = reachedPosition;
-        abstractLayouter.addLayouterListener(this);
-    }
-
-    @Override
-    public boolean isFinishedLayouting(AbstractLayouter abstractLayouter) {
-        boolean isFinishedFlow = super.isFinishedLayouting(abstractLayouter);
-        return isFinishedFlow || isPositionReached;
-    }
-
-    @Override
-    public void onLayoutRow(ILayouter layouter) {
-        if (isPositionReached) return;
-        if (layouter.getRowSize() == 0) return;
-        for (Item item : layouter.getCurrentRowItems()) {
-            if (item.getViewPosition() == reachedPosition) {
-                isPositionReached = true;
-                return;
-            }
-        }
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaRightAdditionalWidth.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaRightAdditionalWidth.java
deleted file mode 100644
index 5bc65ae..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaRightAdditionalWidth.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.criteria;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-class CriteriaRightAdditionalWidth extends FinishingCriteriaDecorator {
-
-    private int additionalWidth;
-
-    CriteriaRightAdditionalWidth(IFinishingCriteria finishingCriteria, int additionalWidth) {
-        super(finishingCriteria);
-        this.additionalWidth = additionalWidth;
-    }
-
-    @Override
-    public boolean isFinishedLayouting(AbstractLayouter abstractLayouter) {
-        int rightBorder = abstractLayouter.getCanvasRightBorder();
-        return super.isFinishedLayouting(abstractLayouter) &&
-                //if additional height filled
-                abstractLayouter.getViewLeft() > rightBorder + additionalWidth;
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaRightLayouterFinished.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaRightLayouterFinished.java
deleted file mode 100644
index a4d1950..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaRightLayouterFinished.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.criteria;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-class CriteriaRightLayouterFinished implements IFinishingCriteria {
-
-    @Override
-    public boolean isFinishedLayouting(AbstractLayouter abstractLayouter) {
-        return abstractLayouter.getViewLeft() >= abstractLayouter.getCanvasRightBorder();
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaUpAdditionalHeight.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaUpAdditionalHeight.java
deleted file mode 100644
index 3d99d19..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaUpAdditionalHeight.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.criteria;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-class CriteriaUpAdditionalHeight extends FinishingCriteriaDecorator {
-
-    private int additionalHeight;
-
-    CriteriaUpAdditionalHeight(IFinishingCriteria finishingCriteria, int additionalHeight) {
-        super(finishingCriteria);
-        this.additionalHeight = additionalHeight;
-    }
-
-    @Override
-    public boolean isFinishedLayouting(AbstractLayouter abstractLayouter) {
-        int topBorder = abstractLayouter.getCanvasTopBorder();
-        return super.isFinishedLayouting(abstractLayouter) &&
-                //if additional height filled
-                abstractLayouter.getViewBottom() < topBorder - additionalHeight;
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaUpLayouterFinished.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaUpLayouterFinished.java
deleted file mode 100644
index 705fea9..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/CriteriaUpLayouterFinished.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.criteria;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-class CriteriaUpLayouterFinished implements IFinishingCriteria {
-
-    @Override
-    public boolean isFinishedLayouting(AbstractLayouter abstractLayouter) {
-        return abstractLayouter.getViewBottom() <= abstractLayouter.getCanvasTopBorder();
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/EmtpyCriteria.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/EmtpyCriteria.java
deleted file mode 100644
index e450a12..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/EmtpyCriteria.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.criteria;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-public class EmtpyCriteria implements IFinishingCriteria {
-    @Override
-    public boolean isFinishedLayouting(AbstractLayouter abstractLayouter) {
-        return true;
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/FinishingCriteriaDecorator.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/FinishingCriteriaDecorator.java
deleted file mode 100644
index 73d2696..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/FinishingCriteriaDecorator.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.criteria;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-abstract class FinishingCriteriaDecorator implements IFinishingCriteria {
-
-    private IFinishingCriteria finishingCriteria;
-
-    FinishingCriteriaDecorator(IFinishingCriteria finishingCriteria) {
-        this.finishingCriteria = finishingCriteria;
-    }
-
-    @Override
-    public boolean isFinishedLayouting(AbstractLayouter abstractLayouter) {
-        return finishingCriteria.isFinishedLayouting(abstractLayouter);
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/ICriteriaFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/ICriteriaFactory.java
deleted file mode 100644
index 20ad96f..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/ICriteriaFactory.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.criteria;
-
-
-import androidx.annotation.NonNull;
-
-public interface ICriteriaFactory {
-    @NonNull
-    IFinishingCriteria getBackwardFinishingCriteria();
-
-    @NonNull
-    IFinishingCriteria getForwardFinishingCriteria();
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/IFinishingCriteria.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/IFinishingCriteria.java
deleted file mode 100644
index 6b0bef6..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/IFinishingCriteria.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.criteria;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-public interface IFinishingCriteria {
-    /** check if layouting finished by criteria */
-    boolean isFinishedLayouting(AbstractLayouter abstractLayouter);
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/InfiniteCriteria.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/InfiniteCriteria.java
deleted file mode 100644
index b68b23f..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/InfiniteCriteria.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.criteria;
-
-import com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter;
-
-/** when using this criteria {@link AbstractLayouter} doesn't able to finish himself, you should only stop calling placeView outside */
-class InfiniteCriteria implements IFinishingCriteria {
-
-    @Override
-    public boolean isFinishedLayouting(AbstractLayouter abstractLayouter) {
-        return false;
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/InfiniteCriteriaFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/InfiniteCriteriaFactory.java
deleted file mode 100644
index 808898b..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/InfiniteCriteriaFactory.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.criteria;
-
-
-import androidx.annotation.NonNull;
-
-public class InfiniteCriteriaFactory extends AbstractCriteriaFactory implements ICriteriaFactory {
-    @NonNull
-    @Override
-    public IFinishingCriteria getBackwardFinishingCriteria() {
-        return new InfiniteCriteria();
-    }
-
-    @NonNull
-    @Override
-    public IFinishingCriteria getForwardFinishingCriteria() {
-        return new InfiniteCriteria();
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/PreLayoutCriteriaFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/PreLayoutCriteriaFactory.java
deleted file mode 100644
index ef18182..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/PreLayoutCriteriaFactory.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.criteria;
-
-
-import androidx.annotation.NonNull;
-
-public class PreLayoutCriteriaFactory implements ICriteriaFactory {
-
-    private int additionalHeight;
-    private int additionalRowsCount;
-
-    public PreLayoutCriteriaFactory(int additionalHeight, int additionalRowsCount) {
-        this.additionalHeight = additionalHeight;
-        this.additionalRowsCount = additionalRowsCount;
-    }
-
-    @NonNull
-    @Override
-    public IFinishingCriteria getBackwardFinishingCriteria() {
-        return new CriteriaUpAdditionalHeight(new CriteriaUpLayouterFinished(), additionalHeight);
-    }
-
-    @NonNull
-    @Override
-    public IFinishingCriteria getForwardFinishingCriteria() {
-        return new CriteriaAdditionalRow(
-                new CriteriaDownAdditionalHeight(new CriteriaDownLayouterFinished(), additionalHeight),
-                additionalRowsCount);
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/RowsCriteriaFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/RowsCriteriaFactory.java
deleted file mode 100644
index 7fc8a9d..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/criteria/RowsCriteriaFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.criteria;
-
-
-import androidx.annotation.NonNull;
-
-public class RowsCriteriaFactory extends AbstractCriteriaFactory implements ICriteriaFactory {
-
-    @NonNull
-    @Override
-    public IFinishingCriteria getBackwardFinishingCriteria() {
-        IFinishingCriteria criteria = new CriteriaUpLayouterFinished();
-        if (additionalLength != 0) {
-            criteria = new CriteriaUpAdditionalHeight(criteria, additionalLength);
-        }
-        return criteria;
-    }
-
-    @NonNull
-    @Override
-    public IFinishingCriteria getForwardFinishingCriteria() {
-        IFinishingCriteria criteria = new CriteriaDownLayouterFinished();
-        if (additionalLength != 0) {
-            criteria = new CriteriaDownAdditionalHeight(criteria, additionalLength);
-        }
-        if (additionalRowCount != 0) {
-            criteria = new CriteriaAdditionalRow(criteria, additionalRowCount);
-        }
-        return criteria;
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/AbstractPlacer.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/AbstractPlacer.java
deleted file mode 100644
index 051d85f..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/AbstractPlacer.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.placer;
-
-
-import androidx.recyclerview.widget.RecyclerView;
-
-abstract class AbstractPlacer implements IPlacer {
-
-    private RecyclerView.LayoutManager layoutManager;
-
-    AbstractPlacer(RecyclerView.LayoutManager layoutManager) {
-        this.layoutManager = layoutManager;
-    }
-
-    public RecyclerView.LayoutManager getLayoutManager() {
-        return layoutManager;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/DisappearingPlacerFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/DisappearingPlacerFactory.java
deleted file mode 100644
index b14f1cb..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/DisappearingPlacerFactory.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.placer;
-
-
-import androidx.recyclerview.widget.RecyclerView;
-
-class DisappearingPlacerFactory implements IPlacerFactory {
-
-    private RecyclerView.LayoutManager layoutManager;
-
-    DisappearingPlacerFactory(RecyclerView.LayoutManager layoutManager) {
-        this.layoutManager = layoutManager;
-    }
-
-    @Override
-    public IPlacer getAtStartPlacer() {
-        return new DisappearingViewAtStartPlacer(layoutManager);
-    }
-
-    @Override
-    public IPlacer getAtEndPlacer() {
-        return new DisappearingViewAtEndPlacer(layoutManager);
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/DisappearingViewAtEndPlacer.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/DisappearingViewAtEndPlacer.java
deleted file mode 100644
index 3aa8a7d..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/DisappearingViewAtEndPlacer.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.placer;
-
-import android.util.Log;
-import android.view.View;
-import android.widget.TextView;
-
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.beloo.widget.chipslayoutmanager.R;
-
-class DisappearingViewAtEndPlacer extends AbstractPlacer {
-
-    DisappearingViewAtEndPlacer(RecyclerView.LayoutManager layoutManager) {
-        super(layoutManager);
-    }
-
-    @Override
-    public void addView(View view) {
-        getLayoutManager().addDisappearingView(view);
-
-//        Log.i("added disappearing view, position = " + getLayoutManager().getPosition(view));
-//        Log.d("name = " + ((TextView)view.findViewById(R.id.tvName)).getText().toString());
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/DisappearingViewAtStartPlacer.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/DisappearingViewAtStartPlacer.java
deleted file mode 100644
index 70e2a07..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/DisappearingViewAtStartPlacer.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.placer;
-
-import android.util.Log;
-import android.view.View;
-import android.widget.TextView;
-
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.beloo.widget.chipslayoutmanager.R;
-
-class DisappearingViewAtStartPlacer extends AbstractPlacer {
-
-    DisappearingViewAtStartPlacer(RecyclerView.LayoutManager layoutManager) {
-        super(layoutManager);
-    }
-
-    @Override
-    public void addView(View view) {
-        getLayoutManager().addDisappearingView(view, 0);
-
-//        Log.i("added disappearing view, position = " + getLayoutManager().getPosition(view));
-//        Log.d("name = " + ((TextView)view.findViewById(R.id.tvName)).getText().toString());
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/IPlacer.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/IPlacer.java
deleted file mode 100644
index a0fb9b5..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/IPlacer.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.placer;
-
-import android.view.View;
-
-public interface IPlacer {
-    void addView(View view);
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/IPlacerFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/IPlacerFactory.java
deleted file mode 100644
index 2fd16b1..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/IPlacerFactory.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.placer;
-
-public interface IPlacerFactory {
-    IPlacer getAtStartPlacer();
-    IPlacer getAtEndPlacer();
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/PlacerFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/PlacerFactory.java
deleted file mode 100644
index 4ab4d29..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/PlacerFactory.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.placer;
-
-import com.beloo.widget.chipslayoutmanager.ChipsLayoutManager;
-
-public class PlacerFactory {
-
-    private ChipsLayoutManager lm;
-
-    public PlacerFactory(ChipsLayoutManager lm) {
-        this.lm = lm;
-    }
-
-    public IPlacerFactory createRealPlacerFactory() {
-        return new RealPlacerFactory(lm);
-    }
-
-    public IPlacerFactory createDisappearingPlacerFactory() {
-        return new DisappearingPlacerFactory(lm);
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/RealAtEndPlacer.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/RealAtEndPlacer.java
deleted file mode 100644
index cb4d575..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/RealAtEndPlacer.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.placer;
-
-import android.view.View;
-
-import androidx.recyclerview.widget.RecyclerView;
-
-class RealAtEndPlacer extends AbstractPlacer implements IPlacer {
-    RealAtEndPlacer(RecyclerView.LayoutManager layoutManager) {
-        super(layoutManager);
-    }
-
-    @Override
-    public void addView(View view) {
-        getLayoutManager().addView(view);
-
-//        Log.i("added view, position = " + getLayoutManager().getPosition(view));
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/RealAtStartPlacer.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/RealAtStartPlacer.java
deleted file mode 100644
index 43c8c80..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/RealAtStartPlacer.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.placer;
-
-import android.view.View;
-
-import androidx.recyclerview.widget.RecyclerView;
-
-class RealAtStartPlacer extends AbstractPlacer implements IPlacer {
-    RealAtStartPlacer(RecyclerView.LayoutManager layoutManager) {
-        super(layoutManager);
-    }
-
-    @Override
-    public void addView(View view) {
-        //mark that we add view at beginning of children
-        getLayoutManager().addView(view, 0);
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/RealPlacerFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/RealPlacerFactory.java
deleted file mode 100644
index 2835add..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/layouter/placer/RealPlacerFactory.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter.placer;
-
-
-import androidx.recyclerview.widget.RecyclerView;
-
-class RealPlacerFactory implements IPlacerFactory {
-
-    private RecyclerView.LayoutManager layoutManager;
-
-    RealPlacerFactory(RecyclerView.LayoutManager layoutManager) {
-        this.layoutManager = layoutManager;
-    }
-
-    @Override
-    public IPlacer getAtStartPlacer() {
-        return new RealAtStartPlacer(layoutManager);
-    }
-
-    @Override
-    public IPlacer getAtEndPlacer() {
-        return new RealAtEndPlacer(layoutManager);
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/AssertionUtils.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/AssertionUtils.java
deleted file mode 100644
index 857ce57..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/AssertionUtils.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.util;
-
-import android.text.TextUtils;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-public class AssertionUtils {
-    private AssertionUtils() {}
-
-    public static <T> void assertNotNull(@Nullable T object, @NonNull String parameterName) throws AssertionError {
-        if (object == null)
-            throw new AssertionError(parameterName + " can't be null.");
-    }
-
-    public static <T> void assertInstanceOf(@NonNull T object, @NonNull Class<?> clazz, @NonNull String parameterName) throws AssertionError {
-        check(!clazz.isInstance(object), parameterName + " is not instance of " + clazz.getName() + ".");
-    }
-
-    public static <T> void assertNotEquals(@NonNull T object, @NonNull T anotherObject, @NonNull String parameterName) throws AssertionError {
-        check(object == anotherObject || object.equals(anotherObject), parameterName + " can't be equal to " + String.valueOf(anotherObject) + ".");
-    }
-
-    public static void assertNotEmpty(String text, String parameterName) throws AssertionError {
-        check(TextUtils.isEmpty(text) || TextUtils.isEmpty(text.trim()), parameterName + " can't be empty.");
-    }
-
-    public static void check(boolean b, @NonNull String message) {
-        if (b)
-            throw new AssertionError(message);
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/LayoutManagerUtil.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/LayoutManagerUtil.java
deleted file mode 100644
index a9cd4c1..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/LayoutManagerUtil.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.util;
-
-
-import androidx.recyclerview.widget.RecyclerView;
-
-public class LayoutManagerUtil {
-
-    /**
-     * perform changing layout with playing RecyclerView animations
-     */
-    public static void requestLayoutWithAnimations(final RecyclerView.LayoutManager lm) {
-        lm.postOnAnimation(new Runnable() {
-            @Override
-            public void run() {
-                lm.requestLayout();
-                lm.requestSimpleAnimationsInNextLayout();
-            }
-        });
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/StateHelper.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/StateHelper.java
deleted file mode 100644
index b210564..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/StateHelper.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.util;
-
-import android.view.View;
-
-import com.beloo.widget.chipslayoutmanager.layouter.IStateFactory;
-
-public class StateHelper {
-    public static boolean isInfinite(IStateFactory stateFactory) {
-        return stateFactory.getSizeMode() == View.MeasureSpec.UNSPECIFIED
-                && stateFactory.getEnd() == 0;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/AndroidLog.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/AndroidLog.java
deleted file mode 100644
index ab40567..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/AndroidLog.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.util.log;
-
-import android.util.Log;
-
-class AndroidLog implements LogWrapper {
-
-    @Override
-    public int d(String tag, String msg) {
-        return Log.d(tag, msg);
-    }
-
-    @Override
-    public int v(String tag, String msg) {
-        return Log.v(tag, msg);
-    }
-
-    @Override
-    public int w(String tag, String msg) {
-        return Log.w(tag, msg);
-    }
-
-    @Override
-    public int i(String tag, String msg) {
-        return Log.i(tag, msg);
-    }
-
-    @Override
-    public int e(String tag, String msg) {
-        return Log.e(tag, msg);
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/FillLogger.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/FillLogger.java
deleted file mode 100644
index 3cc6dab..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/FillLogger.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.util.log;
-
-import android.util.SparseArray;
-import android.view.View;
-
-import com.beloo.widget.chipslayoutmanager.anchor.AnchorViewState;
-
-import java.util.Locale;
-
-class FillLogger implements IFillLogger {
-    private SparseArray<View> viewCache;
-    private int requestedItems;
-    private int recycledItems;
-    private int startCacheSize;
-    private int recycledSize;
-
-    FillLogger(SparseArray<View> viewCache) {
-        this.viewCache = viewCache;
-    }
-
-    @Override
-    public void onStartLayouter(int startPosition) {
-        requestedItems = 0;
-        recycledItems = 0;
-        startCacheSize = viewCache.size();
-
-        Log.d("fillWithLayouter", "start position = " + startPosition, LogSwitcherFactory.FILL);
-        Log.d("fillWithLayouter", "cached items = " + startCacheSize, LogSwitcherFactory.FILL);
-    }
-
-    @Override
-    public void onItemRequested() {
-        requestedItems++;
-    }
-
-    @Override
-    public void onItemRecycled() {
-        recycledItems++;
-    }
-
-    @Override
-    public void onFinishedLayouter() {
-        Log.d("fillWithLayouter",
-                String.format(Locale.getDefault(), "reattached items = %d : requested items = %d recycledItems = %d", startCacheSize - viewCache.size(), requestedItems, recycledItems),
-                LogSwitcherFactory.FILL);
-    }
-
-    @Override
-    public void onAfterLayouter() {
-        recycledSize = viewCache.size();
-    }
-
-    @Override
-    public void onRemovedAndRecycled(int position) {
-        Log.d("fillWithLayouter", " recycle position =" + viewCache.keyAt(position), LogSwitcherFactory.FILL);
-        recycledSize++;
-    }
-
-    @Override
-    public void onAfterRemovingViews() {
-        Log.d("fillWithLayouter", "recycled count = " + recycledSize, LogSwitcherFactory.FILL);
-    }
-
-    @Override
-    public void onBeforeLayouter(AnchorViewState anchorView) {
-        if (anchorView.getAnchorViewRect() != null) {
-            Log.d("fill",  "anchorPos " + anchorView.getPosition(), LogSwitcherFactory.FILL);
-            Log.d("fill", "anchorTop " + anchorView.getAnchorViewRect().top, LogSwitcherFactory.FILL);
-        }
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/IFillLogger.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/IFillLogger.java
deleted file mode 100644
index c10ec85..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/IFillLogger.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.util.log;
-
-import com.beloo.widget.chipslayoutmanager.anchor.AnchorViewState;
-
-public interface IFillLogger {
-
-    void onStartLayouter(int startPosition);
-
-    void onItemRequested();
-
-    void onItemRecycled();
-
-    void onFinishedLayouter();
-
-    void onAfterLayouter();
-
-    void onRemovedAndRecycled(int position);
-
-    void onAfterRemovingViews();
-
-    void onBeforeLayouter(AnchorViewState state);
-}
-
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/Log.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/Log.java
deleted file mode 100644
index 3e74d10..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/Log.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.util.log;
-
-import com.beloo.widget.chipslayoutmanager.BuildConfig;
-
-import java.util.HashSet;
-import java.util.Set;
-
-/** this class with static methods created only for fast replace of default android log */
-public class Log {
-
-    private static LogSwitcher logSwitcher = new LogSwitcher();
-
-    @SuppressWarnings("ConstantConditions")
-    private static LogWrapper log = BuildConfig.isLogEnabled ? new AndroidLog() : new SilentLog();
-
-    ///////////////////////////////////////////////////////////////////////////
-    // default android log delegates
-    ///////////////////////////////////////////////////////////////////////////
-
-    @SuppressWarnings("WeakerAccess")
-    public static int d (String tag, String msg) {
-        return log.d(tag, msg);
-    }
-
-    @SuppressWarnings("WeakerAccess")
-    public static int v (String tag, String msg) {
-        return log.v(tag, msg);
-    }
-
-    @SuppressWarnings("WeakerAccess")
-    public static int w (String tag, String msg) {
-        return log.w(tag, msg);
-    }
-
-    @SuppressWarnings("WeakerAccess")
-    public static int i (String tag, String msg) {
-        return log.i(tag, msg);
-    }
-
-    public static int e (String tag, String msg) {
-        return log.e(tag, msg);
-    }
-
-    ///////////////////////////////////////////////////////////////////////////
-    // android log delegates with switcher
-    ///////////////////////////////////////////////////////////////////////////
-
-    @SuppressWarnings("WeakerAccess")
-    public static int d (String tag, String msg, int logCode) {
-        return logSwitcher.isEnabled(logCode) ? d(tag, msg) : 0;
-    }
-
-    @SuppressWarnings("WeakerAccess")
-    public static int v (String tag, String msg, int logCode) {
-        return logSwitcher.isEnabled(logCode) ? v(tag, msg) : 0;
-    }
-
-    @SuppressWarnings("WeakerAccess")
-    public static int w (String tag, String msg, int logCode) {
-        return logSwitcher.isEnabled(logCode) ? w(tag, msg) : 0;
-    }
-
-    @SuppressWarnings("WeakerAccess")
-    public static int i (String tag, String msg, int logCode) {
-        return logSwitcher.isEnabled(logCode) ? i(tag, msg) : 0;
-    }
-
-    public static void with(LogSwitcher logSwitcher) {
-        Log.logSwitcher = logSwitcher;
-    }
-
-    public static class LogSwitcher {
-        private Set<Integer> enabledLogs = new HashSet<>();
-
-        boolean isEnabled(int logCode) {
-            return enabledLogs.contains(logCode);
-        }
-
-        public LogSwitcher with(int logCode) {
-            enabledLogs.add(logCode);
-            return this;
-        }
-
-        public LogSwitcher without(int logCode) {
-            enabledLogs.remove(logCode);
-            return this;
-        }
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/LogSwitcherFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/LogSwitcherFactory.java
deleted file mode 100644
index 87baa25..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/LogSwitcherFactory.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.util.log;
-
-public class LogSwitcherFactory {
-    public static final int ADAPTER_ACTIONS = 1;
-    public static final int ANCHOR_SCROLLING = 2;
-    public static final int FILL = 3;
-    public static final int PREDICTIVE_ANIMATIONS = 4;
-    public static final int SCROLLING = 5;
-    public static final int START_POSITION_LOGGER = 6;
-
-    Log.LogSwitcher logSwitcher(){
-        return new Log.LogSwitcher();
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/LogWrapper.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/LogWrapper.java
deleted file mode 100644
index 60a00a0..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/LogWrapper.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.util.log;
-
-interface LogWrapper {
-    int d (String tag, String msg);
-
-    int v (String tag, String msg);
-
-    int w (String tag, String msg);
-
-    int i (String tag, String msg);
-
-    int e (String tag, String msg);
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/LoggerFactory.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/LoggerFactory.java
deleted file mode 100644
index e99bf19..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/LoggerFactory.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.util.log;
-
-import android.util.SparseArray;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-
-public class LoggerFactory {
-    @NonNull
-    public IFillLogger getFillLogger(SparseArray<View> viewCache) {
-        return new FillLogger(viewCache);
-    }
-
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/SilentLog.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/SilentLog.java
deleted file mode 100644
index 3f677ab..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/log/SilentLog.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.util.log;
-
-class SilentLog implements LogWrapper {
-    @Override
-    public int d(String tag, String msg) {
-        //no op
-        return 0;
-    }
-
-    @Override
-    public int v(String tag, String msg) {
-        //no op
-        return 0;
-    }
-
-    @Override
-    public int w(String tag, String msg) {
-        //no op
-        return 0;
-    }
-
-    @Override
-    public int i(String tag, String msg) {
-        //no op
-        return 0;
-    }
-
-    @Override
-    public int e(String tag, String msg) {
-        //no op
-        return 0;
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/testing/EmptySpy.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/testing/EmptySpy.java
deleted file mode 100644
index 52e0c2b..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/testing/EmptySpy.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.util.testing;
-
-
-import androidx.recyclerview.widget.RecyclerView;
-
-public class EmptySpy implements ISpy {
-    @Override
-    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
-        //do nothing
-    }
-}
diff --git a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/testing/ISpy.java b/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/testing/ISpy.java
deleted file mode 100644
index 4c66d8f..0000000
--- a/ChipsLayoutManager/src/main/java/com/beloo/widget/chipslayoutmanager/util/testing/ISpy.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.util.testing;
-
-
-import androidx.recyclerview.widget.RecyclerView;
-
-public interface ISpy {
-    void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state);
-}
diff --git a/ChipsLayoutManager/src/test/java/com/beloo/widget/chipslayoutmanager/layouter/AbstractPositionIteratorTest.java b/ChipsLayoutManager/src/test/java/com/beloo/widget/chipslayoutmanager/layouter/AbstractPositionIteratorTest.java
deleted file mode 100644
index 4a656ce..0000000
--- a/ChipsLayoutManager/src/test/java/com/beloo/widget/chipslayoutmanager/layouter/AbstractPositionIteratorTest.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-import static org.junit.Assert.assertTrue;
-
-@RunWith(JUnit4.class)
-abstract class AbstractPositionIteratorTest {
-
-    abstract AbstractPositionIterator providePositionIterator(int maxPosition);
-
-    @Before
-    public void setUp() {}
-
-    @Test
-    public void moveShouldSetCurrentPosition() {
-        AbstractPositionIterator iterator = providePositionIterator(20);
-        iterator.move(10);
-        assertTrue(iterator.pos == 10);
-
-        iterator.move(0);
-        assertTrue(iterator.pos == 0);
-
-        iterator.move(19);
-        assertTrue(iterator.pos == 19);
-    }
-
-    @Test
-    public void nextAfterMoveShouldReturnTargetMovePosition() {
-        AbstractPositionIterator iterator = providePositionIterator(20);
-        iterator.move(10);
-        assertTrue(iterator.next() == 10);
-
-        iterator.move(0);
-        assertTrue(iterator.next() == 0);
-
-        iterator.move(19);
-        assertTrue(iterator.next() == 19);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void negativeCountInitializationShouldThrowException() {
-        //arrange
-        providePositionIterator(-5);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void negativePositionMoveShouldThrowException() {
-        //arrange
-        AbstractPositionIterator incrementalIterator = providePositionIterator(5);
-        incrementalIterator.move(-5);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void movementEqualMaxCountShouldThrowException() {
-        AbstractPositionIterator iterator = providePositionIterator(5);
-        iterator.move(5);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void movementAboveMaxCountShouldThrowException() {
-        AbstractPositionIterator iterator = providePositionIterator(5);
-        iterator.move(7);
-    }
-
-    @Test(expected = Exception.class)
-    public void testRemoveNotSupported() {
-        AbstractPositionIterator iterator = providePositionIterator(5);
-        iterator.remove();
-    }
-
-
-}
diff --git a/ChipsLayoutManager/src/test/java/com/beloo/widget/chipslayoutmanager/layouter/DecrementalPositionIteratorTest.java b/ChipsLayoutManager/src/test/java/com/beloo/widget/chipslayoutmanager/layouter/DecrementalPositionIteratorTest.java
deleted file mode 100644
index c911748..0000000
--- a/ChipsLayoutManager/src/test/java/com/beloo/widget/chipslayoutmanager/layouter/DecrementalPositionIteratorTest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-import static org.junit.Assert.*;
-
-@RunWith(JUnit4.class)
-public class DecrementalPositionIteratorTest extends AbstractPositionIteratorTest {
-
-    @Override
-    AbstractPositionIterator providePositionIterator(int maxPosition) {
-        return new DecrementalPositionIterator(maxPosition);
-    }
-
-    @Test(expected = IllegalStateException.class)
-    public void callingNextWhenNegativePositionReachedShouldThrowException() {
-        AbstractPositionIterator iterator = providePositionIterator(5);
-        assertTrue(iterator.next() == 0);
-        iterator.next();
-    }
-
-    @Test
-    public void nextShouldDecreaseResultPosition() {
-        AbstractPositionIterator iterator = providePositionIterator(5);
-        iterator.move(3);
-        assertTrue(iterator.next() == 3);
-        assertTrue(iterator.next() == 2);
-    }
-
-    @Test
-    public void hasNextShouldReturnTrueIfZeroPositionIsNotPrevious() {
-        AbstractPositionIterator iterator = providePositionIterator(2);
-        iterator.move(1);
-        assertTrue(iterator.hasNext());
-        iterator.next();
-        assertTrue(iterator.hasNext());
-        iterator.next();
-        assertFalse(iterator.hasNext());
-    }
-}
diff --git a/ChipsLayoutManager/src/test/java/com/beloo/widget/chipslayoutmanager/layouter/IncrementalPositionIteratorTest.java b/ChipsLayoutManager/src/test/java/com/beloo/widget/chipslayoutmanager/layouter/IncrementalPositionIteratorTest.java
deleted file mode 100644
index 90d120f..0000000
--- a/ChipsLayoutManager/src/test/java/com/beloo/widget/chipslayoutmanager/layouter/IncrementalPositionIteratorTest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.beloo.widget.chipslayoutmanager.layouter;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-import static org.junit.Assert.*;
-
-@RunWith(JUnit4.class)
-public class IncrementalPositionIteratorTest extends AbstractPositionIteratorTest {
-
-    @Override
-    AbstractPositionIterator providePositionIterator(int maxPosition) {
-        return new IncrementalPositionIterator(maxPosition);
-    }
-
-    @Test
-    public void nextShouldReturnCurrentAndThanIncreasedValue() {
-        AbstractPositionIterator iterator = providePositionIterator(5);
-        int result = iterator.next();
-        assertTrue(result == 0);
-        result = iterator.next();
-        assertTrue(result == 1);
-        result = iterator.next();
-        assertTrue(result == 2);
-    }
-
-    @Test
-    public void hasNextShouldReturnTrueIfMaxCountNotReached() {
-        AbstractPositionIterator iteratorEmpty = providePositionIterator(0);
-        AbstractPositionIterator iterator = providePositionIterator(2);
-        assertTrue(iterator.hasNext());
-        assertFalse(iteratorEmpty.hasNext());
-        iterator.next();
-        assertTrue(iterator.hasNext());
-        iterator.next();
-        assertFalse(iterator.hasNext());
-    }
-
-    @Test(expected = IllegalStateException.class)
-    public void nextWhenMaxCountReachedShouldThrowException() {
-        AbstractPositionIterator iterator = providePositionIterator(2);
-        int result = iterator.next();
-        assertTrue(result == 0);
-        result = iterator.next();
-        assertTrue(result == 1);
-        iterator.next();
-    }
-
-}
diff --git a/app/build.gradle b/app/build.gradle
index 4bed3fd..80164c0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -122,7 +122,7 @@
     implementation 'com.google.zxing:core:3.3.0'
     implementation 'cn.jiguang.sdk:jpush:3.6.6'  // 此处以JPush 3.6.6 版本为例。
     implementation 'cn.jiguang.sdk:jcore:2.3.8'  // 此处以JCore 2.3.8 版本为例。
-    implementation project(path: ':ChipsLayoutManager')
+    implementation 'com.github.BelooS:ChipsLayoutManager:v0.3.7'
     //http日志拦截器
     implementation 'com.squareup.okhttp3:logging-interceptor:3.8.1'
     implementation project(path: ':easyfloat')
diff --git a/app/release/output.json b/app/release/output.json
index e608620..5416df0 100644
--- a/app/release/output.json
+++ b/app/release/output.json
@@ -1 +1 @@
-[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":21,"versionName":"1.98","enabled":true,"outputFile":"xianning-1.98-2025-06-27.apk","fullName":"release","baseName":"release","dirName":""},"path":"xianning-1.98-2025-06-27.apk","properties":{}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":21,"versionName":"1.98","enabled":true,"outputFile":"xianning-1.98-2025-08-28.apk","fullName":"release","baseName":"release","dirName":""},"path":"xianning-1.98-2025-08-28.apk","properties":{}}]
\ No newline at end of file
diff --git a/app/release/xianning-1.98-2025-06-27.apk b/app/release/xianning-1.98-2025-08-28.apk
similarity index 92%
rename from app/release/xianning-1.98-2025-06-27.apk
rename to app/release/xianning-1.98-2025-08-28.apk
index e0438c9..f19cd7e 100644
--- a/app/release/xianning-1.98-2025-06-27.apk
+++ b/app/release/xianning-1.98-2025-08-28.apk
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1989abf..a573233 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -109,6 +109,8 @@
         <activity android:name="com.xianning.driver.ui.card.VerifyCardPwdActivity"/>
         <activity android:name="com.xianning.driver.ui.card.CommitPwdActivity"/>
         <activity android:name="com.xianning.driver.ui.card.CommitPwdTwoActivity"/>
+        <activity android:name=".ui.main.small_cargo.SmallOverActivity" />
+
         <activity
             android:name="com.xianning.driver.ui.main.GetOrderFragment"
             android:theme="@style/FadeDialog" />
@@ -170,7 +172,9 @@
         <activity android:name=".ui.to_city.TripCityActivity" />
         <activity android:name=".ui.to_city.SelectPeopleActivity" />
         <activity android:name=".ui.to_city.CityOrderOverActivity" />
-        <activity android:name=".ui.main.CancelActivity" /> <!-- 微信 -->
+        <activity android:name=".ui.main.CancelActivity" />
+        <activity android:name=".ui.to_city.SelectDriverActivity" />
+        <activity android:name=".ui.main.small_cargo.SmallCargoActivity" /> <!-- 微信 -->
 
         <!-- Since JCore2.0.0 Required SDK核心功能-->
         <!-- 可配置android:process参数将Service放在其他进程中;android:enabled属性不能是false -->
diff --git a/app/src/main/java/com/xianning/driver/base/MyApplication.kt b/app/src/main/java/com/xianning/driver/base/MyApplication.kt
index 65d9e3d..7ede6c6 100644
--- a/app/src/main/java/com/xianning/driver/base/MyApplication.kt
+++ b/app/src/main/java/com/xianning/driver/base/MyApplication.kt
@@ -205,7 +205,7 @@
                                 if (orderSimpleData.status == 1) {
                                     val act = activities[activities.size - 1]
                                     when (orderSimpleData.orderType) {
-                                        1,2 -> {
+                                        1,2,3 ,4-> {
                                             (act as MyBaseActivity).showOrder(
                                                 orderSimpleData.orderId.toString(),
                                                 orderSimpleData.orderType.toString(),
diff --git a/app/src/main/java/com/xianning/driver/base/MyBaseActivity.java b/app/src/main/java/com/xianning/driver/base/MyBaseActivity.java
index e1f1669..416498d 100644
--- a/app/src/main/java/com/xianning/driver/base/MyBaseActivity.java
+++ b/app/src/main/java/com/xianning/driver/base/MyBaseActivity.java
@@ -149,9 +149,12 @@
     public void showOrder(String orderId, String orderType, int time, int type,String audio) {
 //        MyApplication.Companion.getTTsManager().setVideoText("咸宁95128约车司机,有一条新的订单");
         Intent intent;
-        if (audio.isEmpty())
-            intent  = new Intent(this, GetOrderFragment.class);
-        else{
+        if (audio.isEmpty()){
+            if (orderType.equals("3"))
+                intent  = new Intent(this, GetCityFragment.class);
+            else
+                intent  = new Intent(this, GetOrderFragment.class);
+        } else{
             intent = new Intent(this, VoiceOrderFragment.class);
             intent.putExtra("audio", audio);
         }
diff --git a/app/src/main/java/com/xianning/driver/base/gaode/BaiduUtils.java b/app/src/main/java/com/xianning/driver/base/gaode/BaiduUtils.java
index 6d3324e..c2ccb2b 100644
--- a/app/src/main/java/com/xianning/driver/base/gaode/BaiduUtils.java
+++ b/app/src/main/java/com/xianning/driver/base/gaode/BaiduUtils.java
@@ -38,7 +38,7 @@
             @Override
             public void onGetDrivingRouteResult(DrivingRouteResult drivingRouteResult) {
                 //驾车
-                if (drivingRouteResult.getRouteLines().size()>0){
+                if (drivingRouteResult.getRouteLines()!=null&&drivingRouteResult.getRouteLines().size()>0){
                     DrivingRouteLine drivingRouteLine = drivingRouteResult.getRouteLines().get(0);
                     ArrayList<LatLng> latLngs = new ArrayList<>();
                     for (int i=0;i<drivingRouteLine.getAllStep().size();i++){
diff --git a/app/src/main/java/com/xianning/driver/bean/LineDriverBean.kt b/app/src/main/java/com/xianning/driver/bean/LineDriverBean.kt
new file mode 100644
index 0000000..99cc679
--- /dev/null
+++ b/app/src/main/java/com/xianning/driver/bean/LineDriverBean.kt
@@ -0,0 +1,14 @@
+package com.xianning.driver.bean
+
+data class LineDriverBean(
+    val code: Int,
+    val `data`: List<LineDriverData>,
+    val msg: String
+)
+
+data class LineDriverData(
+    val avatar: String,
+    val id: String,
+    val licensePlate: String,
+    val name: String
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/xianning/driver/netUtls/Api.java b/app/src/main/java/com/xianning/driver/netUtls/Api.java
index 1875021..04b1fd0 100644
--- a/app/src/main/java/com/xianning/driver/netUtls/Api.java
+++ b/app/src/main/java/com/xianning/driver/netUtls/Api.java
@@ -60,6 +60,13 @@
     public static String addCancelOrder = "api/order/addCancelOrder";
     public static String setOrderCrossCitySort = "api/orderCrossCity/setOrderCrossCitySort"; ///api/orderCrossCity/setOrderCrossCitySort 修改订单顺序(跨城)
 
+    public static String sendVerificationCode = "api/order/sendVerificationCode"; ///sendVerificationCode
+
+    public static String makeUpTheDifference = "api/order/makeUpTheDifference"; ///api/order/makeUpTheDifference 设置小件物流差价
+
+    public static String fillInPickUpCode = "api/order/fillInPickUpCode"; ///api/order/fillInPickUpCode 设置小件物流取件码
+
+
     /**
      * 消息
      */
@@ -146,5 +153,8 @@
     public static String queryCityOrderInfo = "api/orderCrossCity/queryOrderInfo"; //api/orderCrossCity/queryOrderInfo 获取订单跨城详情
     public static String queryReassignMoney = "api/order/queryReassignMoney"; ///api/order/queryReassignMoney 获取改派支付金额
     public static String reassign = "api/order/reassign"; ///api/order/reassign 提交改派申请
+    public static String querySameLineDriver = "api/orderCrossCity/querySameLineDriver"; ///api/order/reassign 提交改派申请
+
+
 
 }
diff --git a/app/src/main/java/com/xianning/driver/ui/DialogUtil.kt b/app/src/main/java/com/xianning/driver/ui/DialogUtil.kt
index 62192e7..e726bdc 100644
--- a/app/src/main/java/com/xianning/driver/ui/DialogUtil.kt
+++ b/app/src/main/java/com/xianning/driver/ui/DialogUtil.kt
@@ -136,7 +136,6 @@
         return dialog
     }
 
-
     fun getNetListDialog(arrayList: ArrayList<String>,showView: View,context: Context,okclick:(allMode:String) -> Unit):EasyPopup{
         var pop = getPopupwindow(context,R.layout.dialog_server_mode)
         pop.showDown(showView)
diff --git a/app/src/main/java/com/xianning/driver/ui/adapter/MainAdapter.kt b/app/src/main/java/com/xianning/driver/ui/adapter/MainAdapter.kt
index 185f17d..8a82562 100644
--- a/app/src/main/java/com/xianning/driver/ui/adapter/MainAdapter.kt
+++ b/app/src/main/java/com/xianning/driver/ui/adapter/MainAdapter.kt
@@ -12,6 +12,8 @@
 import com.xianning.driver.ui.main.TripActivity
 import com.xianning.driver.ui.main.major.MajorSureMoneyActivity
 import com.xianning.driver.ui.main.major.MajorSureMoneyOfflineActivity
+import com.xianning.driver.ui.main.small_cargo.SmallCargoActivity
+import com.xianning.driver.ui.main.small_cargo.SmallOverActivity
 import com.xianning.driver.ui.mine.ComplainOrderActivity
 import com.xianning.driver.ui.to_city.TripCityActivity
 import kotlinx.android.synthetic.main.item_main_list.view.*
@@ -72,10 +74,16 @@
                 if (item.type == 4 || item.type == 5){
                     when(item.state){
                         1,2,3,4,5,7,8,9,12 ->{
-
+                            context.startActivity<SmallCargoActivity>(
+                                "orderId" to item.id.toString(),
+                                "orderType" to item.type.toString()
+                            )
                         }
                         6,10->{
-
+                            context.startActivity<SmallOverActivity>(
+                                "orderId" to item.id.toString(),
+                                "orderType" to item.type.toString()
+                            )
                         }
                         11 -> {
                             toast("订单改派中")
diff --git a/app/src/main/java/com/xianning/driver/ui/adapter/SelectDriverAdapter.kt b/app/src/main/java/com/xianning/driver/ui/adapter/SelectDriverAdapter.kt
new file mode 100644
index 0000000..9c36e03
--- /dev/null
+++ b/app/src/main/java/com/xianning/driver/ui/adapter/SelectDriverAdapter.kt
@@ -0,0 +1,32 @@
+package com.xianning.driver.ui.adapter
+
+import android.view.View
+import com.xianning.driver.R
+import com.xianning.driver.base.BaseRvAdapter
+import com.xianning.driver.base.BaseViewHolder
+import com.xianning.driver.bean.LineDriverData
+import kotlinx.android.synthetic.main.item_select_driver.view.*
+
+class SelectDriverAdapter: BaseRvAdapter<LineDriverData>() {
+
+    var selectItem = -1
+
+    override fun getLayoutResId(viewType: Int): Int {
+        return R.layout.item_select_driver
+    }
+
+
+
+    override fun onBindItem(holder: BaseViewHolder?, view: View?, item: LineDriverData) {
+        holder?.let {
+            if (item.id.isEmpty()){
+                it.itemView.iv_avatar.setActualImageResource(R.mipmap.default_driver)
+                it.itemView.tv_name.text = "平台转派"
+            }else{
+                it.itemView.iv_avatar.setImageURI(item.avatar)
+                it.itemView.tv_name.text = "${item.name}·${item.licensePlate}"
+            }
+            it.itemView.cb.setImageResource(if (holder.layoutPosition == selectItem) R.mipmap.icon_raidobutton_selected else R.mipmap.icon_raidobutton)
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/xianning/driver/ui/adapter/SelectPeopleAdapter.kt b/app/src/main/java/com/xianning/driver/ui/adapter/SelectPeopleAdapter.kt
index c2c9180..9f680a0 100644
--- a/app/src/main/java/com/xianning/driver/ui/adapter/SelectPeopleAdapter.kt
+++ b/app/src/main/java/com/xianning/driver/ui/adapter/SelectPeopleAdapter.kt
@@ -20,7 +20,7 @@
     override fun onBindItem(holder: BaseViewHolder?, view: View?, item: OrderCityBean.CityDataBean?) {
         holder?.let {
             it.itemView.tv_name.text = item!!.nickName
-            it.itemView.tv_time.text = item!!.travelTime.substring(0,16)+"/"+item!!.peopleNumber+"人乘车"
+            it.itemView.tv_time.text = item!!.travelTime.take(16)+"/"+item!!.peopleNumber+"人乘车"
             it.itemView.tv_start_address.text = item!!.startAddress
             it.itemView.tv_end_address.text = item!!.endAddress
             it.itemView.smooth_cb.isEnabled = item.orderState < 6
diff --git a/app/src/main/java/com/xianning/driver/ui/main/GetOrderFragment.kt b/app/src/main/java/com/xianning/driver/ui/main/GetOrderFragment.kt
index 8be2aa3..1e48176 100644
--- a/app/src/main/java/com/xianning/driver/ui/main/GetOrderFragment.kt
+++ b/app/src/main/java/com/xianning/driver/ui/main/GetOrderFragment.kt
@@ -15,6 +15,7 @@
 import com.xianning.driver.ui.UiUtil
 import com.google.gson.Gson
 import com.xianning.driver.base.gaode.BaiduUtils
+import com.xianning.driver.ui.main.small_cargo.SmallCargoActivity
 import kotlinx.android.synthetic.main.item_get_order.*
 import kotlinx.android.synthetic.main.item_map_market.view.*
 import org.jetbrains.anko.startActivity
@@ -207,7 +208,10 @@
 
                 }
                 "4", "5" -> {
-
+                    this.startActivity<SmallCargoActivity>(
+                        "orderId" to orderId,
+                        "orderType" to orderType
+                    )
                 }
             }
         }
diff --git a/app/src/main/java/com/xianning/driver/ui/main/MainActivity.kt b/app/src/main/java/com/xianning/driver/ui/main/MainActivity.kt
index eaa375d..9bf6151 100644
--- a/app/src/main/java/com/xianning/driver/ui/main/MainActivity.kt
+++ b/app/src/main/java/com/xianning/driver/ui/main/MainActivity.kt
@@ -198,8 +198,10 @@
         if (RxPermissions(this).isGranted(Manifest.permission.ACCESS_FINE_LOCATION)){
             listener = object :BDAbstractLocationListener(){
                 override fun onReceiveLocation(p0: BDLocation?) {
-                    MyApplication.aMapLocation = p0
-                    CacheKey.putKeyStr("location",Gson().toJson(p0))
+                    if (p0!=null&&p0.longitude!= 4.9E-324){
+                        MyApplication.aMapLocation = p0
+                        CacheKey.putKeyStr("location",Gson().toJson(p0))
+                    }
                 }
             }
             locationClient = AMapKit.initLocation(this, listener!!)
diff --git a/app/src/main/java/com/xianning/driver/ui/main/ReassignActivity.kt b/app/src/main/java/com/xianning/driver/ui/main/ReassignActivity.kt
index 5d55df0..1b874ed 100644
--- a/app/src/main/java/com/xianning/driver/ui/main/ReassignActivity.kt
+++ b/app/src/main/java/com/xianning/driver/ui/main/ReassignActivity.kt
@@ -36,6 +36,10 @@
         intent.getStringExtra("orderId")
     }
 
+    val driverId by lazy {
+        intent.getStringExtra("driverId")
+    }
+
     val adapter by lazy {
         ReassignAdapter()
     }
@@ -97,6 +101,8 @@
 
     private fun callGp(payType: String) {
         var map = getMapByAny()
+        if (!driverId.isNullOrEmpty())
+            map["newDriverId"] = driverId
         map["orderIds"] = orderId
         map["reason"] = adapter.array[adapter.selectPosition]
         if (!et_content.getContent().isNullOrEmpty()){
diff --git a/app/src/main/java/com/xianning/driver/ui/main/TripActivity.kt b/app/src/main/java/com/xianning/driver/ui/main/TripActivity.kt
index f2f04b3..3382b36 100644
--- a/app/src/main/java/com/xianning/driver/ui/main/TripActivity.kt
+++ b/app/src/main/java/com/xianning/driver/ui/main/TripActivity.kt
@@ -41,6 +41,7 @@
 import com.xianning.driver.base.gaode.gpsnav.BaiduNaviActivity
 import com.xianning.driver.bean.MajorMoneyBean
 import com.xianning.driver.ui.main.major.MajorSureMoneyOfflineActivity
+import com.xianning.driver.utils.Cache.CacheKey
 import com.ypx.imagepicker.utils.PBitmapUtils
 import io.reactivex.Observable
 import io.reactivex.android.schedulers.AndroidSchedulers
@@ -393,8 +394,10 @@
         listener = object :BDAbstractLocationListener(){
             override fun onReceiveLocation(it: BDLocation?) {
                 it?.let {
-                    MyApplication.aMapLocation = it
-                    carMarker!!.position = LatLng(it.latitude, it.longitude)
+                    if (it.longitude!= 4.9E-324){
+                        MyApplication.aMapLocation = it
+                        carMarker!!.position = LatLng(it.latitude, it.longitude)
+                    }
                 }
                 orderBean.let {
                     when (it.data.orderState) {
diff --git a/app/src/main/java/com/xianning/driver/ui/main/small_cargo/SmallCargoActivity.kt b/app/src/main/java/com/xianning/driver/ui/main/small_cargo/SmallCargoActivity.kt
new file mode 100644
index 0000000..24d7af5
--- /dev/null
+++ b/app/src/main/java/com/xianning/driver/ui/main/small_cargo/SmallCargoActivity.kt
@@ -0,0 +1,765 @@
+package com.xianning.driver.ui.main.small_cargo
+
+import android.os.Bundle
+import android.os.Handler
+import android.os.Looper
+import android.view.View
+import androidx.core.os.bundleOf
+import cn.sinata.xldutils.utils.*
+import com.baidu.location.BDAbstractLocationListener
+import com.baidu.location.BDLocation
+import com.baidu.location.LocationClient
+import com.baidu.mapapi.map.BaiduMap
+import com.baidu.mapapi.map.Marker
+import com.baidu.mapapi.map.Overlay
+import com.baidu.mapapi.model.LatLng
+import com.baidu.navisdk.adapter.BNRoutePlanNode
+import com.baidu.navisdk.adapter.BaiduNaviManagerFactory
+import com.baidu.navisdk.adapter.IBNRoutePlanManager
+import com.google.gson.Gson
+import com.trello.rxlifecycle3.android.ActivityEvent
+import com.xianning.driver.R
+import com.xianning.driver.base.BaseEvent
+import com.xianning.driver.base.MyApplication
+import com.xianning.driver.base.MyBaseActivity
+import com.xianning.driver.base.gaode.AMapKit
+import com.xianning.driver.base.gaode.AMapKit.addMarker
+import com.xianning.driver.base.gaode.AMapKit.getIcon
+import com.xianning.driver.base.gaode.AMapKit.getTimeType
+import com.xianning.driver.base.gaode.AMapKit.initMap
+import com.xianning.driver.base.gaode.AMapKit.moveCamera
+import com.xianning.driver.base.gaode.BaiduUtils
+import com.xianning.driver.bean.OrderBean
+import com.xianning.driver.bean.OrderSimpleData
+import com.xianning.driver.bean.RessignBean
+import com.xianning.driver.netUtls.Api
+import com.xianning.driver.netUtls.callNet
+import com.xianning.driver.netUtls.createView
+import com.xianning.driver.netUtls.getMapByAny
+import com.xianning.driver.ui.DialogUtil
+import com.xianning.driver.ui.main.FillOutActivity
+import com.xianning.driver.ui.main.OrderOverActivity
+import com.xianning.driver.ui.main.ReassignActivity
+import com.xianning.driver.utils.Cache.CacheKey
+import com.xianning.driver.utils.DateUtil
+import com.xianning.driver.utils.MyUtils
+import io.reactivex.Observable
+import io.reactivex.android.schedulers.AndroidSchedulers
+import io.reactivex.disposables.Disposable
+import io.reactivex.schedulers.Schedulers
+import kotlinx.android.synthetic.main.activity_trip.*
+import kotlinx.android.synthetic.main.activity_trip.iv_move
+import kotlinx.android.synthetic.main.activity_trip.iv_police
+import kotlinx.android.synthetic.main.activity_trip.iv_to_gd
+import kotlinx.android.synthetic.main.activity_trip.map_view
+import kotlinx.android.synthetic.main.activity_trip.slide_btn
+import kotlinx.android.synthetic.main.activity_trip_cargo.*
+import kotlinx.android.synthetic.main.dialog_select_pay_type.view.*
+import kotlinx.android.synthetic.main.dialog_show_cargo_money.view.*
+import kotlinx.android.synthetic.main.dialog_show_cha_money.view.*
+import kotlinx.android.synthetic.main.include_order_top_cargo.*
+import kotlinx.android.synthetic.main.item_map_market.view.*
+import org.greenrobot.eventbus.EventBus
+import org.jetbrains.anko.startActivity
+import org.jetbrains.anko.toast
+import java.util.*
+import java.util.concurrent.TimeUnit
+
+
+class SmallCargoActivity : MyBaseActivity() {
+    /***
+     * 	1=待接单,2=待出发,3=待到达预约地点,4=待取货,5=送货中,6=已送达,7=待支付,8=需补差价,9=已取货,10=已取消,11=改派中,12=已支付差价
+
+    integer($int32)
+    订单状态(1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,8=待评价,9=已完成,10=已取消,11=改派中,12=取消待支付)
+     */
+
+    /***
+     * //    流程操作状态(3=开始出发预约点,4=到达预约点,5=开始服务,6=服务结束)
+     * 页面一共4个marker 1:预约地点 2:起点 3终点 4:司机点
+     */
+    val orderType by lazy {
+        intent.getStringExtra("orderType")
+    }
+
+    val orderId by lazy {
+        intent.getStringExtra("orderId")
+    }
+    var isTimeStart = false //限制计时器
+
+
+    var makeMarker: Marker? = null
+    var startMarker: Marker? = null
+    var endMarker: Marker? = null
+    var carMarker: Marker? = null
+    var markerLine: Overlay? = null
+    lateinit var aMap: BaiduMap
+    lateinit var orderBean: OrderBean
+
+
+
+    private var listener:BDAbstractLocationListener? = null
+    private var locationClient: LocationClient? = null
+
+    var naviHandler: Handler? = null
+
+    override fun setContentView() {
+        setContentView(R.layout.activity_trip_cargo)
+    }
+
+    override fun initView() {
+        setTitleText("准备出发-去接客户-等待客户-服务中")
+        tv_Right.text = "申请改派"
+        callOrder()
+        initMineLocation()
+        onclick()
+        addSockectCancel()
+    }
+
+    private fun addSockectCancel() {
+        checkOrderStatue()
+        MyApplication.addOrderView(viewOrder)
+    }
+
+    var viewOrder = object : MyApplication.OrderStatueView {
+        override fun orderInfo(data: OrderSimpleData?) {
+            data?.let {
+                if (it.orderType == 4 || it.orderType == 5){
+                    if (it.status == 10 || it.status == 11) {
+                        Handler(Looper.getMainLooper()).post {
+                            if (it.status == 10) {
+                                MyApplication.getTTsManager().setVideoText("用户已取消订单")
+                            } else {
+                                MyApplication.getTTsManager().setVideoText("用户已改派订单")
+                            }
+                            finish()
+                        }
+                    }
+                    if (it.orderId.toString() == orderId && (it.status != 10 && it.status != 11)) {
+                        Handler(Looper.getMainLooper()).post {
+                            callOrder()
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+
+    var handler: Handler? = null
+    fun checkOrderStatue() {
+        var map = getMapByAny()
+        map["orderId"] = orderId
+        map["orderType"] = orderType
+        callNet(false, Api.orderStateSocket, map) {
+            val orderSimpleData =
+                Gson().fromJson(
+                    it,
+                    OrderSimpleData::class.java
+                )
+            orderSimpleData?.let {
+                if (it.status == 10 || it.status == 12) {
+                    Handler(Looper.getMainLooper()).post {
+                        MyApplication.getTTsManager().setVideoText("用户已取消订单")
+                        finish()
+                    }
+                }
+            }
+
+        }
+        handler?.postDelayed({ checkOrderStatue() }, 3000)
+    }
+
+
+    override fun onBackPressed() {
+        EventBus.getDefault().post(BaseEvent(BaseEvent.UPDATA_MAIN_CAR))
+        super.onBackPressed()
+    }
+
+    override fun finish() {
+        EventBus.getDefault().post(BaseEvent(BaseEvent.UPDATA_MAIN_CAR))
+        super.finish()
+    }
+
+    private fun onclick() {
+        tv_Right.clickDelay {
+            var map = getMapByAny()
+            map["orderId"] = orderId
+            map["orderType"] = orderType
+            callNet(Api.queryReassignMoney, map) {
+                val data = gson.fromJson<RessignBean>(it, RessignBean::class.java)
+                if (data.data.amount.isNullOrEmpty()) {
+                    startActivity<ReassignActivity>(
+                        "orderId" to orderId,
+                        "orderType" to orderType
+                    )
+                } else {
+                    DialogUtil.getDelAndSureDialog(
+                        this,
+                        "现在改派将收取" + data.data.amount + "元改派费,您是否要进行改派?",
+                        {},
+                        {
+                            //跳转改派页面
+                            startActivity<ReassignActivity>(
+                                "orderId" to orderId,
+                                "orderType" to orderType,
+                                "money" to data.data.amount.toString()
+                            )
+                        })
+                }
+
+
+            }
+        }
+
+        tv_gap_money.clickDelay {
+            if (orderBean.data.orderState == 12) {
+                toast("用户已支付差价,不能修改")
+                return@clickDelay
+            }
+            var dialog = DialogUtil.getDialog(this, R.layout.dialog_show_cha_money)
+            var viewContent = DialogUtil.getView(dialog)
+            viewContent.view_hint_close_car_cha.setOnClickListener {
+                dialog.dismiss()
+            }
+            viewContent.tv_car_num_close_cha.setOnClickListener {
+                dialog.dismiss()
+            }
+            viewContent.tv_sure_car_num_cha.setOnClickListener {
+                var num = viewContent.et_num_zg_cha.getContent()
+                if (num.isEmpty()) {
+                    toast("请输入金额")
+                    return@setOnClickListener
+                }
+                if (num.toDouble() > 9999) {
+                    toast("金额不能大于9999元")
+                    return@setOnClickListener
+                }
+                if (num.toDouble() <= 0) {
+                    toast("金额不能小于0元")
+                    return@setOnClickListener
+                }
+                callseatmoney(num) {
+                    dialog.dismiss()
+                    tv_gap_money.gone()
+                    ll_gp_money.visible()
+                    tv_dif.text = "¥" + doubleTwo(num.toDouble()) + " 差价"
+                    orderBean.let {
+                        it.data.orderState = 8
+                    }
+                    toast("设置成功")
+                }
+            }
+        }
+
+        ll_gp_money.clickDelay {
+            tv_gap_money.callOnClick()
+        }
+
+
+        iv_move.setOnClickListener {
+            orderBean.let {
+                when (it.data.orderState) {
+                    2, 3 -> {
+                        moveCamera(aMap, makeMarker!!.position, carMarker!!.position)
+                    }
+                    4 -> {
+                        moveCamera(aMap, carMarker!!.position)
+                    }
+                    5, 6 -> {
+                        moveCamera(aMap, carMarker!!.position, endMarker!!.position)
+                    }
+                }
+            }
+        }
+
+        iv_police.clickDelay {
+            orderBean.let {
+                MyUtils.getInstans().CallPhone(this, it.data.emergencyCall)
+            }
+        }
+
+
+        iv_to_gd.clickDelay {
+            orderBean.let {
+                when (it.data.orderState) {
+                    2, 3 -> {
+                        startNavi(carMarker!!.position,makeMarker!!.position)
+                    }
+
+                    4 -> {
+                        showToast("没有终点,无法导航")
+                    }
+
+                    5, 6 -> {
+                        startNavi(carMarker!!.position,endMarker!!.position)
+                    }
+                }
+            }
+        }
+
+        //        * 	1=待接单,2=待出发,3=待到达预约地点,4=待取货,5=送货中,6=已送达,7=待支付,8=需补差价,9=已取货,10=已取消,11=改派中,12=已支付差价
+        slide_btn.onSwipeListener = {
+            orderBean.let {
+                when (it.data.orderState) {
+                    2, 3, 4 -> {
+                        it.data.orderState++
+                        callStatue(it.data.orderState) {}
+                        showStatueMapUI(it)
+                    }
+
+                    5, 6 -> {
+                        sendCode() {
+                            it.data.orderState = 6
+                            var dialog =
+                                DialogUtil.getDialog(this, R.layout.dialog_show_cargo_money)
+                            var viewContent = DialogUtil.getView(dialog)
+                            viewContent.view_hint_close_car.setOnClickListener {
+                                dialog.dismiss()
+                            }
+                            viewContent.tv_car_num_close.setOnClickListener {
+                                dialog.dismiss()
+                            }
+                            viewContent.tv_sure_car_num.setOnClickListener {
+                                var num = viewContent.et_num_zg.getContent()
+                                if (num.isEmpty()) {
+                                    toast("请输入验证码")
+                                    return@setOnClickListener
+                                }
+                                callNumberCargo(num) {
+                                    dialog.dismiss()
+                                    callStatue(orderBean.data.orderState) {
+                                        startActivity<SmallOverActivity>(
+                                            "orderId" to orderId,
+                                            "orderType" to orderType
+                                        )
+                                        finish()
+                                    }
+
+                                }
+                            }
+                        }
+                    }
+                    12 -> {
+                        it.data.orderState = 5
+                        callStatue(it.data.orderState) {}
+                        showStatueMapUI(it)
+                    }
+
+                    8 -> {
+                        toast("等待用户支付差价")
+                    }
+                    else -> {
+
+                    }
+                }
+            }
+        }
+
+        iv_phone.clickDelay {
+            orderBean.let {
+                Utils.callPhone(this, it.data.phone)
+            }
+        }
+    }
+
+    private fun sendCode(function: () -> Unit) {
+        var map = getMapByAny()
+        map["orderId"] = orderId
+        callNet(Api.sendVerificationCode, map) {
+            function()
+        }
+    }
+
+    private fun callNumberCargo(num: String, click: () -> Unit) {
+        var map = getMapByAny()
+        map["orderId"] = orderId
+        map["pickUpCode"] = num
+        callNet(Api.fillInPickUpCode, map) {
+            click()
+        }
+    }
+
+
+    private fun callseatmoney(num: String, click: () -> Unit) {
+        var map = getMapByAny()
+        map["orderId"] = orderId
+        map["difference"] = doubleTwo(num.toDouble())
+        callNet(Api.makeUpTheDifference, map) {
+            click()
+        }
+    }
+
+    private fun callStatue(i: Int, click: () -> Unit) {
+        var map = getMapByAny()
+        map["orderId"] = orderId
+        map["orderType"] = orderType
+        map["state"] = i
+        map["lat"] = MyApplication.getLocation().latitude
+        map["lon"] = MyApplication.getLocation().longitude
+        callNet(Api.process, map) {
+            click()
+        }
+    }
+
+
+    private fun showMoneyTypeDialog() {
+        var pop = DialogUtil.getPopupwindow(this, R.layout.dialog_select_pay_type)
+        var payType = 1 //支付方式(1=OK平台收款,2=其他方式收款)
+        pop.showDown(window.decorView)
+        pop.contentView.tv_cancel.setOnClickListener {
+            pop.dismiss()
+        }
+        pop.contentView.tv_ok.setOnClickListener {
+            pop.dismiss()
+            if (payType == 1) {
+                callStatue(6) {
+                    startActivity<FillOutActivity>("orderId" to orderId, "orderType" to orderType)
+                    finish()
+                }
+            } else {
+                DialogUtil.getDelAndSureDialog(this, "请确定是否收款?", {}, {
+                    pop.dismiss()
+                    val map = getMapByAny()
+                    map["orderId"] = orderId
+                    map["orderType"] = orderType
+                    map["type"] = payType
+                    callStatue(6) {
+                        callNet(Api.confirmFees, map) {
+                            finish()
+                            startActivity<OrderOverActivity>(
+                                "orderId" to orderId,
+                                "orderType" to orderType
+                            )
+                        }
+                    }
+                })
+            }
+        }
+        pop.contentView.tv_select_ok.setOnClickListener {
+            pop.contentView.tv_select_ok.alpha = 1f
+            pop.contentView.tv_select_ok.textSize = 16f
+            pop.contentView.tv_select_or.alpha = 0.6f
+            pop.contentView.tv_select_or.textSize = 14f
+            payType = 1
+        }
+        pop.contentView.tv_select_or.setOnClickListener {
+            pop.contentView.tv_select_ok.alpha = 0.6f
+            pop.contentView.tv_select_ok.textSize = 14f
+            pop.contentView.tv_select_or.alpha = 1f
+            pop.contentView.tv_select_or.textSize = 16f
+            payType = 2
+        }
+    }
+
+
+    /***
+     * 定位时司机与线路的改变
+     */
+    private fun initMineLocation() {
+        listener = object : BDAbstractLocationListener(){
+            override fun onReceiveLocation(it: BDLocation?) {
+                it?.let {
+                    if (it.longitude!= 4.9E-324){
+                        MyApplication.aMapLocation = it
+                        carMarker!!.position = LatLng(it.latitude, it.longitude)
+                    }
+                }
+                orderBean.let {
+                    when (it.data.orderState) {
+                        2, 3 -> {
+                            changeCarThree(false)
+                        }
+                        5, 6 -> {
+                            changeCarFive(false)
+                        }
+                    }
+                }
+            }
+        }
+        locationClient = AMapKit.initLocation(this, listener!!)
+    }
+
+    private fun changeCarThree(isMove: Boolean) {
+        if (makeMarker != null && carMarker != null) {
+            BaiduUtils.initRouteLine(carMarker!!.position,makeMarker!!.position,null,object :
+                BaiduUtils.Callback{
+                override fun onGetDrivingRouteResult(
+                    latLngs: ArrayList<LatLng>?,
+                    lineTance: Float,
+                    lineTime: Long
+                ) {
+                    var view = creatCarView("距预约点" + AMapKit.getTance(lineTance))
+                    carMarker!!.setIcon(AMapKit.getIcon(view))
+                    addline(latLngs?: arrayListOf())
+                    if (isMove)
+                        moveCamera(aMap, makeMarker!!.position, carMarker!!.position)
+                }
+            })
+        }
+    }
+
+    private fun changeCarFive(isMove: Boolean) {
+        if (carMarker != null && endMarker != null) {
+            BaiduUtils.initRouteLine(carMarker!!.position,endMarker!!.position,null,object :BaiduUtils.Callback{
+                override fun onGetDrivingRouteResult(
+                    latLngs: ArrayList<LatLng>,
+                    lineTance: Float,
+                    lineTime: Long
+                ) {
+                    addline(latLngs)
+                    var view =
+                        creatCarView("剩余" + AMapKit.getTance(lineTance) + "\n" + "预计还需" + lineTime.toInt() + "分钟")
+                    carMarker!!.setIcon(AMapKit.getIcon(view))
+                    if (isMove) {
+                        AMapKit.moveCamera3(
+                            aMap,
+                            carMarker!!.position,
+                            endMarker!!.position,
+                            carMarker!!.position
+                        )
+                    }
+                }
+            })
+        }
+    }
+
+    private fun callOrder() {
+        var map = getMapByAny()
+        map["orderId"] = orderId
+        map["orderType"] = orderType
+        callNet(Api.queryOrderInfo, map) {
+            orderBean = gson.fromJson(it, OrderBean::class.java)
+            showUi(orderBean)
+        }
+    }
+
+    private fun showUi(orderBean: OrderBean?) {
+        orderBean?.let {
+            tv_name.text = orderBean.data.nickName
+            tv_car_num.text = it.data.historyNum.toString() + "次寄物"
+            tv_time.text = it.data.travelTime_
+            tv_start_address.text = it.data.startAddress
+            tv_end_address.text = it.data.endAddress
+            showStatueMapUI(it)
+            var cargoStrType = if (orderBean.data.cargoType == "1") "普通小件X" else "贵重物品X"
+            tv_tv_num_cargo.text = cargoStrType + orderBean.data.peopleNumber
+            tv_people_cargo.text = orderBean.data.nickName + "-" + orderBean.data.phone
+            if (orderBean.data.tipMoney != null && orderBean.data.tipMoney > 0.0) {
+                tv_money_cargo.text = doubleTwo(orderBean.data.tipMoney) + "元加急费"
+            } else {
+                tv_money_cargo.gone()
+            }
+            if (!it.data.differenceMoney.isNullOrEmpty() && it.data.differenceMoney.toDouble() > 0) {
+                tv_gap_money.gone()
+                ll_gp_money.visible()
+                tv_dif.text = "¥" + doubleTwo(it.data.differenceMoney.toDouble()) + " 差价"
+            }
+        }
+    }
+
+    private fun getAllMark(it: OrderBean) {
+        if (makeMarker == null) {
+            val view = createView(R.layout.item_map_market_make, this)
+            view.iv_img.setImageResource(R.mipmap.trip_yuyue)
+            makeMarker = addMarker(aMap, it.data.startLat, it.data.startLon, view, "") as Marker
+        }
+        makeMarker!!.isVisible = false
+        if (startMarker == null) {
+            val view = createView(R.layout.item_map_market, this)
+            view.iv_img.setImageResource(R.mipmap.starting_point)
+            startMarker = addMarker(aMap, it.data.startLat, it.data.startLon, view, "") as Marker
+        }
+        startMarker!!.isVisible = false
+        if (endMarker == null) {
+            val view = createView(R.layout.item_map_market, this)
+            view.iv_img.setImageResource(R.mipmap.end_point)
+            endMarker = addMarker(aMap, it.data.endLat, it.data.endLon, view, "") as Marker
+        }
+        endMarker!!.isVisible = false
+        if (carMarker == null) {
+            val carView = creatCarView("")
+            carMarker = addMarker(
+                aMap,
+                MyApplication.getLocation().latitude,
+                MyApplication.getLocation().longitude,
+                carView,
+                ""
+            ) as Marker
+        }
+        carMarker!!.isVisible = false
+        if (markerLine != null) {
+            markerLine!!.isVisible = false
+        }
+    }
+
+    fun creatCarView(content: String): View {
+        val carView = createView(R.layout.item_map_market, this)
+        carView.iv_img.setImageResource(R.mipmap.car_trip)
+        carView.tv_hint.visible()
+        carView.tv_hint.text = content
+        return carView
+    }
+
+    fun creatCarViewHint(content: String): View {
+        val carView = createView(R.layout.item_map_market, this)
+        carView.iv_img.setImageResource(R.mipmap.car_trip)
+        carView.tv_hint.visible()
+        carView.tv_hint.setColorBuild(this, content, R.color.main_yellow, 4, content.length)
+        return carView
+    }
+
+    //    流程操作状态(3=开始出发预约点,4=到达预约点,5=开始服务,6=服务结束)
+    private fun showStatueMapUI(it: OrderBean) {
+        getAllMark(it)
+        tv_gap_money.gone()
+        ll_gp_money.gone()
+        if (it.data.orderState == 4 || it.data.orderState == 8 || it.data.orderState == 12) {
+            tv_gap_money.visible()
+        }
+        tv_Right.visible()
+        when (it.data.orderState) {
+            2, 3 -> {
+                if (it.data.reassign == 1) {
+                    tv_Right.gone()
+                }
+                iv_to_gd.visible()
+                makeMarker?.isVisible = true
+                carMarker?.isVisible = true
+                changeCarThree(true)
+                closeTimeStart()
+                if (it.data.orderState == 2) {
+                    slide_btn.changeButtonText("出发前往预约地点")
+                    setTitleText("准备出发")
+                } else {
+                    slide_btn.changeButtonText("到达预约地点")
+                    setTitleText("去领取货物")
+                }
+            }
+            4, 8, 12 -> {
+                iv_to_gd.gone()
+                if (it.data.reassign == 1) {
+                    tv_Right.gone()
+                }
+                closeLine()
+                carMarker?.isVisible = true
+                startTimeStart(
+                    ((System.currentTimeMillis() - DateUtil.dateToStamp(
+                        DateUtil.TYPE0,
+                        it.data.waitTime
+                    )) / 1000).toInt()
+                )
+                moveCamera(aMap, carMarker!!.position)
+                setTitleText("等待取货")
+                slide_btn.changeButtonText("确认收货")
+            }
+            5, 6 -> {
+                closeTimeStart()
+                iv_to_gd.visible()
+                tv_Right.gone()
+                startMarker?.isVisible = true
+                endMarker?.isVisible = true
+                carMarker?.isVisible = true
+                changeCarFive(true)
+                setTitleText("送货中")
+                slide_btn.changeButtonText("确认送达")
+            }
+        }
+    }
+
+
+    private fun startTimeStart(waitTime: Int) {
+        if (!isTimeStart) {
+            isTimeStart = true
+            refreshTime(waitTime) {
+                var view = creatCarViewHint("您已等待" + getTimeType(it))
+                carMarker!!.setIcon(getIcon(view))
+            }
+        }
+    }
+
+    private var timeDisposable: Disposable? = null
+
+    private fun refreshTime(waitTime: Int, click: (num: Int) -> Unit) {
+        if (null != timeDisposable && !timeDisposable!!.isDisposed) {
+            timeDisposable!!.dispose()
+        }
+        timeDisposable = Observable
+            .interval(1, TimeUnit.SECONDS)
+            .take(100000000)
+            .subscribeOn(Schedulers.computation())
+            .observeOn(AndroidSchedulers.mainThread())
+            .compose(bindUntilEvent(ActivityEvent.DESTROY))
+            .subscribe { aLong ->
+                var num = waitTime + aLong
+                click(num.toInt())
+            }
+    }
+
+    private fun closeTimeStart() {
+        if (timeDisposable != null) {
+            timeDisposable!!.dispose()
+        }
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        if (handler != null) {
+            handler?.removeCallbacksAndMessages(null)
+        }
+        MyApplication.removeOrderView(viewOrder)
+        closeTimeStart()
+    }
+
+
+    private fun addline(allLine: MutableList<LatLng>) {
+        closeLine()
+        markerLine = AMapKit.drawLine(this, aMap, allLine)
+    }
+
+    fun closeLine() {
+        if (markerLine != null) {
+            markerLine!!.remove()
+        }
+    }
+
+    override fun setOnclick() {
+
+    }
+
+    private fun startNavi(start:LatLng,end:LatLng){
+        val list = arrayListOf<BNRoutePlanNode>()
+        val startNode = BNRoutePlanNode.Builder()
+            .longitude(start.longitude)
+            .latitude(start.latitude)
+            .build()
+        val endNode = BNRoutePlanNode.Builder()
+            .longitude(end.longitude)
+            .latitude(end.latitude)
+            .build()
+        list.add(startNode)
+        list.add(endNode)
+        BaiduNaviManagerFactory.getRoutePlanManager().routePlan(
+            list,
+            IBNRoutePlanManager.RoutePlanPreference.ROUTE_PLAN_PREFERENCE_DEFAULT,
+            bundleOf(), naviHandler)
+    }
+
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        aMap = initMap(savedInstanceState, map_view)
+    }
+
+    override fun onEventMainThread(event: BaseEvent?) {
+        super.onEventMainThread(event)
+        when (event!!.code) {
+            BaseEvent.REAGASSIGN_SUCCESS -> {
+                finish()
+            }
+            BaseEvent.BACK_CAR_OVER -> {
+                finish()
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/xianning/driver/ui/main/small_cargo/SmallOverActivity.kt b/app/src/main/java/com/xianning/driver/ui/main/small_cargo/SmallOverActivity.kt
new file mode 100644
index 0000000..92cb64e
--- /dev/null
+++ b/app/src/main/java/com/xianning/driver/ui/main/small_cargo/SmallOverActivity.kt
@@ -0,0 +1,170 @@
+package com.xianning.driver.ui.main.small_cargo
+
+import android.os.Looper
+import cn.sinata.xldutils.utils.clickDelay
+import cn.sinata.xldutils.utils.gone
+import cn.sinata.xldutils.utils.visible
+
+import com.google.gson.Gson
+import com.xianning.driver.R
+import com.xianning.driver.base.BaseEvent
+import com.xianning.driver.base.MyApplication
+import com.xianning.driver.base.MyBaseActivity
+import com.xianning.driver.bean.OrderBean
+import com.xianning.driver.bean.OrderSimpleData
+import com.xianning.driver.netUtls.Api
+import com.xianning.driver.netUtls.callNet
+import com.xianning.driver.netUtls.getMapByAny
+import com.xianning.driver.ui.main.major.MajorMoneyDetailActivity
+import com.xianning.driver.utils.MyUtils
+import kotlinx.android.synthetic.main.activity_order_cancel.*
+import kotlinx.android.synthetic.main.activity_order_over.*
+import kotlinx.android.synthetic.main.include_order_money.*
+import kotlinx.android.synthetic.main.include_order_top_cargo.*
+import org.greenrobot.eventbus.EventBus
+import org.jetbrains.anko.startActivity
+
+class SmallOverActivity : MyBaseActivity() {
+
+    val orderType by lazy {
+        intent.getStringExtra("orderType")
+    }
+
+    val orderId by lazy {
+        intent.getStringExtra("orderId")
+    }
+
+    lateinit var orderBean: OrderBean
+
+    override fun setContentView() {
+        setContentView(R.layout.activity_order_over_small)
+
+    }
+
+    override fun initView() {
+        setTitleText("已送达")
+        ll_order_cancel.gone()
+        MyApplication.currentOrderType = ""
+        MyApplication.currentOrderId = ""
+        tv_show_pay_over.gone()
+        callOrder()
+    }
+
+    private fun callOrder() {
+        var map = getMapByAny()
+        map["orderId"] = orderId
+        map["orderType"] = orderType
+        callNet(Api.queryOrderInfo, map) {
+            orderBean = gson.fromJson(it, OrderBean::class.java)
+            showUi(orderBean)
+        }
+    }
+
+    private fun showUi(orderBean: OrderBean?) {
+        orderBean?.let {
+            setTitleText("已完成")
+            tv_name.text = it.data.nickName
+            tv_car_num.text = it.data.historyNum.toString() + "次寄物"
+            iv_phone.visible()
+            iv_phone.clickDelay {
+                MyUtils.getInstans().CallPhone(this, it.data.phone.toString())
+            }
+            tv_time.text = it.data.travelTime
+            tv_start_address.text = it.data.startAddress
+            tv_end_address.text = it.data.endAddress
+            tv_money_cargo.text = it.data.tipMoney.toString() + "元加急费"
+            if (it.data.tipMoney==null || it.data.tipMoney <= 0.0) {
+                tv_money_cargo.gone()
+                tv_pay_result_small_money.gone()
+            }
+            var cargoStrType = if (orderBean.data.cargoType == "1") "普通小件X" else "贵重物品X"
+            tv_tv_num_cargo.text = cargoStrType+orderBean.data.peopleNumber
+            tv_people_cargo.text = it.data.nickName + "-" + it.data.phone
+            tv_show_pay_over.visible()
+            tv_pay_result_money.text = "¥" + it.data.orderMoney.toString()
+            tv_pay_result_small_money.text = "其中含加急费用:¥" + it.data.tipMoney.toString()
+            setTitleText(getSmallStatue(it.data.orderState))
+        }
+    }
+
+    private fun getSmallStatue(state: Int): String? {
+        when (state) {
+            1 -> return "待接单"
+            2 -> return "待出发"
+            3 -> return "待到达预约地点"
+            4 -> return "待取货"
+            5 -> return "送货中"
+            6 -> return "已送达"
+            7 -> return "待支付"
+            8 -> return "需补差价"
+            9 -> return "已取货"
+            10 -> return "已取消"
+            11 -> return "改派中"
+            12 -> return "已支付差价"
+        }
+        return ""
+    }
+
+
+    var handler: android.os.Handler? = null
+    fun checkOrderStatue() {
+        var map = getMapByAny()
+        map["orderId"] = orderId
+        map["orderType"] = orderType
+        callNet(false, Api.orderStateSocket, map) {
+            val orderSimpleData =
+                Gson().fromJson(
+                    it,
+                    OrderSimpleData::class.java
+                )
+            orderSimpleData?.let {
+                if (orderSimpleData.status == 8) {
+                    orderBean.data.orderState = 8
+                    showUi(orderBean)
+                }
+            }
+        }
+        handler?.postDelayed({ checkOrderStatue() }, 3000)
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        handler?.removeCallbacksAndMessages(null)
+    }
+
+    fun showPayResultText(it: OrderBean, statue: Int) {
+        ll_pay_result.visible()
+        if (statue in 6..7) {
+            tv_pay_result_title.text = "待乘客支付"
+            setTitleText("待支付")
+        } else {
+            tv_pay_result_title.text = "乘客已支付"
+            setTitleText("已完成")
+        }
+        tv_pay_result_money.text = "¥" + it.data.orderMoney.toString()
+        when (orderType) {
+            "2" -> {
+                tv_pay_result_small_money.text = "其中含红包费用:¥" + it.data.tipMoney.toString()
+            }
+            "1" -> {
+                tv_pay_result_small_money.text = "查看收费明细"
+                tv_pay_result_small_money.clickDelay {
+                    startActivity<MajorMoneyDetailActivity>(
+                        "orderId" to orderId,
+                        "orderType" to orderType
+                    )
+                }
+            }
+        }
+    }
+
+    override fun onBackPressed() {
+        super.onBackPressed()
+        EventBus.getDefault().post(BaseEvent(BaseEvent.CALL_NUM_MAIN))
+        EventBus.getDefault().post(BaseEvent(BaseEvent.BACK_CAR_OVER))
+    }
+
+    override fun setOnclick() {
+
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/xianning/driver/ui/pub/BecomeDriverActivity.kt b/app/src/main/java/com/xianning/driver/ui/pub/BecomeDriverActivity.kt
index 7678480..9290d59 100644
--- a/app/src/main/java/com/xianning/driver/ui/pub/BecomeDriverActivity.kt
+++ b/app/src/main/java/com/xianning/driver/ui/pub/BecomeDriverActivity.kt
@@ -38,8 +38,8 @@
 
     var selectPhone = 0 //1 身份证 2:头像 3:驾驶证 4:网约车资格证
 
-    var array = arrayListOf("出租车","城际出行")
-    var arrayType = arrayListOf(2, 3)
+    var array = arrayListOf("出租车","城际出行","同城小件物流")
+    var arrayType = arrayListOf(2, 3,4)
 
     val upBean by lazy {
         DriverBean()
diff --git a/app/src/main/java/com/xianning/driver/ui/to_city/GetCityFragment.kt b/app/src/main/java/com/xianning/driver/ui/to_city/GetCityFragment.kt
index 11fe1c1..1de6757 100644
--- a/app/src/main/java/com/xianning/driver/ui/to_city/GetCityFragment.kt
+++ b/app/src/main/java/com/xianning/driver/ui/to_city/GetCityFragment.kt
@@ -13,11 +13,9 @@
 import com.xianning.driver.base.gaode.AMapKit
 import com.xianning.driver.base.gaode.BaiduUtils
 import com.xianning.driver.bean.OrderBean
-import com.xianning.driver.netUtls.Api
-import com.xianning.driver.netUtls.callNet
-import com.xianning.driver.netUtls.createView
-import com.xianning.driver.netUtls.getMapByAny
+import com.xianning.driver.netUtls.*
 import com.xianning.driver.ui.UiUtil
+import com.xianning.driver.ui.main.TripActivity
 import kotlinx.android.synthetic.main.item_get_order.*
 import kotlinx.android.synthetic.main.item_map_market.view.*
 import org.jetbrains.anko.startActivity
@@ -31,6 +29,13 @@
         intent?.getStringExtra("orderType")
     }
 
+    val timeDown by lazy {
+        intent?.getIntExtra("time", 30)?:30
+    }
+    val type by lazy {
+        intent?.getIntExtra("type", -1)
+    }
+
     lateinit var time: CountDownTimer
 
 
@@ -39,17 +44,44 @@
         //实例化语音引擎
         aMap = AMapKit.initMap(savedInstanceState, map_view)
         var strBtn = "确定"
+        if (type == 1){
+            strBtn = "抢单"
+            time = timeOver((timeDown.toLong() * 1000L)) {
+                if (it == 0) {
+                    finish()
+                } else {
+                    tv_sure.text = strBtn + it.toString() + "S"
+                }
+            }
+        }
         tv_sure.text = strBtn
         tv_close.clickDelay {
             finish()
         }
         callOrderDetail()
         tv_sure.clickDelay {
-            this.startActivity<TripCityActivity>("orderId" to orderId, "orderType" to orderType)
-            finish()
+            if (type == 1) {
+                showGetOrder()
+            } else{
+                this.startActivity<TripCityActivity>("orderId" to orderId, "orderType" to orderType)
+                finish()
+            }
         }
     }
-
+    fun showGetOrder() {
+        var map = getMapByAny()
+        map["orderId"] = orderId
+        map["orderType"] = orderType
+        callNet(this, Api.grabOrder, map) {
+            Toast.create(this).show("抢单成功")
+            onBackPressed()
+            when (orderType) {
+                "3" -> {
+                    this.startActivity<TripCityActivity>("orderId" to orderId, "orderType" to orderType)
+                }
+            }
+        }
+    }
     override fun initView() {
 
     }
diff --git a/app/src/main/java/com/xianning/driver/ui/to_city/SelectDriverActivity.kt b/app/src/main/java/com/xianning/driver/ui/to_city/SelectDriverActivity.kt
new file mode 100644
index 0000000..c2c1f2c
--- /dev/null
+++ b/app/src/main/java/com/xianning/driver/ui/to_city/SelectDriverActivity.kt
@@ -0,0 +1,104 @@
+package com.xianning.driver.ui.to_city
+
+import android.view.View
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import cn.sinata.xldutils.utils.clickDelay
+import com.xianning.driver.R
+import com.xianning.driver.base.BaseRecyclerActivity
+import com.xianning.driver.base.BaseRvAdapter
+import com.xianning.driver.bean.LineDriverBean
+import com.xianning.driver.bean.LineDriverData
+import com.xianning.driver.bean.OrderCityBean
+import com.xianning.driver.bean.RessignBean
+import com.xianning.driver.netUtls.Api
+import com.xianning.driver.netUtls.callNet
+import com.xianning.driver.netUtls.createView
+import com.xianning.driver.netUtls.getMapByAny
+import com.xianning.driver.ui.DialogUtil
+import com.xianning.driver.ui.adapter.SelectDriverAdapter
+import com.xianning.driver.ui.adapter.SelectPeopleAdapter
+import com.xianning.driver.ui.main.ReassignActivity
+import kotlinx.android.synthetic.main.view_btn_sure.view.*
+import org.jetbrains.anko.startActivity
+import org.jetbrains.anko.toast
+import java.util.HashMap
+
+/**
+ * @ClassName SelectPeopleActivity
+ * @Description 选择乘客
+ * @Author Administrator
+ * @Date 2020/10/23 14:48
+ * @Version 1.0
+ */
+class SelectDriverActivity : BaseRecyclerActivity<LineDriverData>() {
+
+    val orderType by lazy {
+        intent.getStringExtra("orderType")
+    }
+
+    val orderId by lazy {
+        intent.getStringExtra("orderId")
+    }
+
+    val money by lazy {
+        intent.getStringExtra("money")
+    }
+
+    val selectAdapter by lazy {
+        SelectDriverAdapter()
+    }
+
+    override fun getDatas(t: String?): List<LineDriverData> {
+        val arrayListOf = arrayListOf<LineDriverData>()
+        arrayListOf.addAll(gson.fromJson<LineDriverBean>(t, LineDriverBean::class.java).data)
+        arrayListOf.add(LineDriverData("","","",""))
+        return arrayListOf
+    }
+
+    override fun pathUrl(): String? {
+        return Api.querySameLineDriver
+    }
+
+    override fun mapObject(): HashMap<String?, Any?>? {
+        var map = getMapByAny()
+        map["orderIds"] = orderId
+        return map
+    }
+
+    override fun getAdapter(): BaseRvAdapter<LineDriverData>? {
+        return selectAdapter
+    }
+
+    override fun getlayoutManager(): RecyclerView.LayoutManager? {
+        return LinearLayoutManager(this)
+    }
+
+    override fun setOnItemClickListener(view: View?, position: Int) {
+        selectAdapter.selectItem = position
+        selectAdapter.notifyDataSetChanged()
+    }
+
+    override fun initView() {
+        setTitleText("选择司机")
+        var view = createView(R.layout.view_btn_sure_driver, this)
+        addMainBottomViewSimple(view)
+        view.tv_sure_view.clickDelay {
+            if (selectAdapter.selectItem == -1) {
+                toast("请选择司机")
+                return@clickDelay
+            }
+            //跳转改派页面
+            startActivity<ReassignActivity>(
+                "orderId" to orderId,
+                "orderType" to orderType,
+                "money" to money,
+                "driverId" to selectAdapter.data[selectAdapter.selectItem].id
+            )
+        }
+    }
+
+    override fun setOnclick() {
+
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/xianning/driver/ui/to_city/SelectPeopleActivity.kt b/app/src/main/java/com/xianning/driver/ui/to_city/SelectPeopleActivity.kt
index 5adcd5b..5a86500 100644
--- a/app/src/main/java/com/xianning/driver/ui/to_city/SelectPeopleActivity.kt
+++ b/app/src/main/java/com/xianning/driver/ui/to_city/SelectPeopleActivity.kt
@@ -89,9 +89,10 @@
             callNet(Api.queryReassignMoney, map) {
                 val data = gson.fromJson<RessignBean>(it, RessignBean::class.java)
                 if (data.data.amount.isNullOrEmpty()) {
-                    startActivity<ReassignActivity>(
+                    startActivity<SelectDriverActivity>(
                         "orderId" to selectAdapter.selectIds(),
-                        "orderType" to orderType
+                        "orderType" to orderType,
+                        "money" to "0.0"
                     )
                     finish()
                 } else {
@@ -101,7 +102,7 @@
                         {},
                         {
                             //跳转改派页面
-                            startActivity<ReassignActivity>(
+                            startActivity<SelectDriverActivity>(
                                 "orderId" to selectAdapter.selectIds(),
                                 "orderType" to orderType,
                                 "money" to data.data.amount.toString()
diff --git a/app/src/main/java/com/xianning/driver/ui/to_city/TripCityActivity.kt b/app/src/main/java/com/xianning/driver/ui/to_city/TripCityActivity.kt
index abe307f..9758209 100644
--- a/app/src/main/java/com/xianning/driver/ui/to_city/TripCityActivity.kt
+++ b/app/src/main/java/com/xianning/driver/ui/to_city/TripCityActivity.kt
@@ -527,8 +527,10 @@
         listener = object :BDAbstractLocationListener(){
             override fun onReceiveLocation(it: BDLocation?) {
                 it?.let {
-                    MyApplication.aMapLocation = it
-                    carMarker!!.position = LatLng(it.latitude, it.longitude)
+                    if (it.longitude!=4.9E-324){
+                        MyApplication.aMapLocation = it
+                        carMarker!!.position = LatLng(it.latitude, it.longitude)
+                    }
                 }
                 currentOrderBean.let {
                     when (it.orderState) {
diff --git a/app/src/main/res/drawable/bg_cj_bz.xml b/app/src/main/res/drawable/bg_cj_bz.xml
index 3353312..52b6332 100644
--- a/app/src/main/res/drawable/bg_cj_bz.xml
+++ b/app/src/main/res/drawable/bg_cj_bz.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <solid android:color="#ffee6108" />
-    <corners android:topLeftRadius="6dp" android:topRightRadius="0dp" android:bottomLeftRadius="6dp" android:bottomRightRadius="0dp" />
+    <solid android:color="#FF8100" />
+    <corners android:radius="40dp"/>
 </shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_white_right6.xml b/app/src/main/res/drawable/bg_white_right6.xml
new file mode 100644
index 0000000..1cebf97
--- /dev/null
+++ b/app/src/main/res/drawable/bg_white_right6.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <corners android:bottomRightRadius="6dp" android:topRightRadius="6dp" android:bottomLeftRadius="40dp" android:topLeftRadius="40dp"/>
+    <solid android:color="@color/white"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_mine.xml b/app/src/main/res/layout/activity_mine.xml
index b10eb79..7b8c24a 100644
--- a/app/src/main/res/layout/activity_mine.xml
+++ b/app/src/main/res/layout/activity_mine.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:background="#F3F4F5">
 
     <RelativeLayout
@@ -177,10 +177,11 @@
         </LinearLayout>
 
         <ScrollView
-            android:layout_below="@id/ll_center"
             android:layout_width="match_parent"
-            android:layout_marginBottom="52dp"
-            android:layout_height="match_parent">
+            android:layout_height="match_parent"
+            android:layout_below="@id/ll_center"
+            android:layout_marginBottom="52dp">
+
             <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
@@ -290,6 +291,8 @@
 
                 </RelativeLayout>
 
+
+                <include layout="@layout/include_line_left_15" />
                 <RelativeLayout
                     android:id="@+id/rl_set_order"
                     android:layout_width="match_parent"
@@ -322,36 +325,40 @@
                 <View
                     android:layout_width="match_parent"
                     android:layout_height="4dp"
-                    android:background="@color/white" />          <RelativeLayout
-                android:id="@+id/rl_line_car"
-                android:layout_width="match_parent"
-                android:layout_height="43dp">
+                    android:background="@color/white" />
 
+                <include layout="@layout/include_line_left_15" />
 
-                <TextView
+                <RelativeLayout
+                    android:id="@+id/rl_line_car"
                     android:layout_width="match_parent"
-                    android:layout_height="43dp"
-                    android:alpha="0.8"
-                    android:background="@color/white"
-                    android:drawableEnd="@mipmap/more_black"
-                    android:drawablePadding="10dp"
-                    android:gravity="center_vertical"
-                    android:paddingStart="42dp"
-                    android:paddingEnd="15dp"
-                    android:text="线路班次管理"
-                    android:textColor="@color/black"
-                    android:textSize="15sp"
-                    android:textStyle="bold" />
+                    android:layout_height="43dp">
 
 
-                <ImageView
-                    android:layout_width="16dp"
-                    android:layout_height="wrap_content"
-                    android:layout_centerVertical="true"
-                    android:layout_marginStart="15dp"
-                    android:src="@mipmap/icon_me_line" />
+                    <TextView
+                        android:layout_width="match_parent"
+                        android:layout_height="43dp"
+                        android:alpha="0.8"
+                        android:background="@color/white"
+                        android:drawableEnd="@mipmap/more_black"
+                        android:drawablePadding="10dp"
+                        android:gravity="center_vertical"
+                        android:paddingStart="42dp"
+                        android:paddingEnd="15dp"
+                        android:text="线路班次管理"
+                        android:textColor="@color/black"
+                        android:textSize="15sp"
+                        android:textStyle="bold" />
 
-            </RelativeLayout>
+
+                    <ImageView
+                        android:layout_width="16dp"
+                        android:layout_height="wrap_content"
+                        android:layout_centerVertical="true"
+                        android:layout_marginStart="15dp"
+                        android:src="@mipmap/icon_me_line" />
+
+                </RelativeLayout>
 
 
                 <View
@@ -360,10 +367,6 @@
                     android:background="@color/white" />
 
                 <include layout="@layout/include_line_left_15" />
-                <View
-                    android:layout_width="match_parent"
-                    android:layout_height="4dp"
-                    android:background="#F3F4F5" />
 
                 <RelativeLayout
                     android:id="@+id/rl_change_car"
@@ -548,8 +551,8 @@
                 <View
                     android:layout_width="match_parent"
                     android:layout_height="4dp"
-                    android:visibility="gone"
-                    android:background="@color/white" />
+                    android:background="@color/white"
+                    android:visibility="gone" />
 
                 <include layout="@layout/include_line_left_15" />
 
@@ -586,10 +589,11 @@
                     android:layout_width="match_parent"
                     android:layout_height="4dp"
                     android:background="@color/white" />
+
                 <Space
                     android:layout_width="match_parent"
                     android:layout_height="0dp"
-                    android:layout_weight="1"/>
+                    android:layout_weight="1" />
 
             </LinearLayout>
 
@@ -597,14 +601,15 @@
 
 
     </RelativeLayout>
+
     <RelativeLayout
         android:id="@+id/rl_login_out"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:background="@color/white"
-        app:layout_constraintBottom_toBottomOf="parent"
         android:layout_marginTop="2dp"
-        android:elevation="2dp">
+        android:background="@color/white"
+        android:elevation="2dp"
+        app:layout_constraintBottom_toBottomOf="parent">
 
         <TextView
             android:layout_width="match_parent"
@@ -617,9 +622,10 @@
             android:textStyle="bold" />
 
     </RelativeLayout>
+
     <View
         android:layout_width="match_parent"
         android:layout_height="4dp"
-        app:layout_constraintBottom_toTopOf="@id/rl_login_out"
-        android:background="#F3F4F5" />
+        android:background="#F3F4F5"
+        app:layout_constraintBottom_toTopOf="@id/rl_login_out" />
 </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_trip_cargo.xml b/app/src/main/res/layout/activity_trip_cargo.xml
index e690442..ad35a60 100644
--- a/app/src/main/res/layout/activity_trip_cargo.xml
+++ b/app/src/main/res/layout/activity_trip_cargo.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:orientation="vertical"
     android:layout_height="match_parent">
 
@@ -10,7 +11,7 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent">
 
-        <com.amap.api.maps.MapView
+        <com.baidu.mapapi.map.MapView
             android:id="@+id/map_view"
             android:layout_width="match_parent"
             android:layout_height="match_parent"/>
@@ -41,25 +42,64 @@
         <TextView
             android:id="@+id/tv_gap_money"
             android:layout_width="wrap_content"
-            android:layout_height="40dp"
+            android:layout_height="wrap_content"
             android:text="补差价"
+            android:padding="10dp"
             android:gravity="center"
-            android:paddingStart="6dp"
-            android:drawablePadding="6dp"
-            android:paddingRight="6dp"
             android:background="@drawable/bg_cj_bz"
-            android:drawableStart="@mipmap/bz_money"
+            android:drawableTop="@mipmap/bz_money"
             android:textColor="@color/write"
-            android:layout_above="@+id/iv_to_gd"
+            android:textSize="10sp"
+            android:layout_marginTop="10dp"
             android:layout_alignEnd="@+id/slide_btn" />
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/ll_gp_money"
+            android:layout_width="wrap_content"
+            android:orientation="horizontal"
+            android:layout_marginTop="10dp"
+            android:background="@drawable/bg_white_right6"
+            android:elevation="2dp"
+            android:visibility="gone"
+            android:layout_alignEnd="@+id/slide_btn"
+            android:layout_height="wrap_content">
+            <ImageView
+                android:layout_width="30dp"
+                android:layout_height="30dp"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                android:src="@mipmap/bz_money_2"/>
+            <TextView
+                android:layout_width="80dp"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                android:layout_marginStart="36dp"
+                android:text="¥0差价"
+                android:textSize="12sp"
+                android:textColor="@color/textColor"
+                android:textStyle="bold"
+                android:id="@+id/tv_dif"
+                android:layout_height="wrap_content"/>
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                app:layout_constraintEnd_toEndOf="@id/tv_dif"
+                android:text="修改"
+                android:textSize="12sp"
+                android:textStyle="bold"
+                android:layout_marginEnd="5dp"
+                app:layout_constraintBaseline_toBaselineOf="@id/tv_dif"
+                android:textColor="@color/main_yellow_qian"/>
+        </androidx.constraintlayout.widget.ConstraintLayout>
 
         <ImageView
             android:id="@+id/iv_police"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="10dp"
-            android:layout_marginEnd="10dp"
-            android:layout_alignParentEnd="true"
+            android:layout_width="40dp"
+            android:layout_height="40dp"
+            android:layout_marginBottom="10dp"
+            android:layout_alignEnd="@+id/slide_btn"
+            android:layout_above="@+id/iv_to_gd"
             android:src="@mipmap/img110"/>
 
     </RelativeLayout>
diff --git a/app/src/main/res/layout/item_select_driver.xml b/app/src/main/res/layout/item_select_driver.xml
new file mode 100644
index 0000000..af5fdf6
--- /dev/null
+++ b/app/src/main/res/layout/item_select_driver.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:orientation="vertical"
+    android:background="@color/write"
+    android:layout_height="wrap_content">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+        
+        <com.facebook.drawee.view.SimpleDraweeView
+            android:layout_width="40dp"
+            android:layout_height="40dp"
+            android:layout_marginStart="14dp"
+            android:layout_marginTop="12dp"
+            android:id="@+id/iv_avatar"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:roundAsCircle="true"
+            app:placeholderImage="@color/page_bg"
+            android:layout_marginBottom="8dp"/>
+
+        <TextView
+            android:id="@+id/tv_name"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="14dp"
+            android:textStyle="bold"
+            android:text="可乐"
+            android:textColor="#ff000000"
+            android:textSize="14sp"
+            app:layout_constraintTop_toTopOf="@id/iv_avatar"
+            app:layout_constraintBottom_toBottomOf="@id/iv_avatar"
+            app:layout_constraintStart_toEndOf="@id/iv_avatar"/>
+
+
+        <ImageView
+            android:id="@+id/cb"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="@id/iv_avatar"
+            app:layout_constraintBottom_toBottomOf="@id/iv_avatar"
+            android:layout_marginEnd="14dp"
+            android:layout_width="20dp"
+            android:layout_height="20dp"
+            android:src="@mipmap/icon_raidobutton"/>
+
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <include layout="@layout/include_line_14"/>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_small_user_img.xml b/app/src/main/res/layout/item_small_user_img.xml
new file mode 100644
index 0000000..48f7836
--- /dev/null
+++ b/app/src/main/res/layout/item_small_user_img.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_marginEnd="@dimen/dp_4"
+    android:layout_height="wrap_content">
+
+    <ImageView
+        android:id="@+id/iv_img_user"
+        android:layout_width="36dp"
+        android:layout_height="24dp"/>
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/view_btn_sure_driver.xml b/app/src/main/res/layout/view_btn_sure_driver.xml
new file mode 100644
index 0000000..49a8143
--- /dev/null
+++ b/app/src/main/res/layout/view_btn_sure_driver.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <TextView
+        android:id="@+id/tv_sure_view"
+        android:layout_width="match_parent"
+        android:layout_height="40dp"
+        android:layout_marginStart="14dp"
+        android:layout_marginBottom="10dp"
+        android:layout_marginEnd="14dp"
+        android:background="@drawable/main_color_eight"
+        android:gravity="center"
+        android:text="确定"
+        android:layout_alignParentBottom="true"
+        android:textColor="@color/write"
+        android:textSize="14sp"
+        />
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="转派给司机前请先与司机协商一致"
+        android:drawableStart="@mipmap/ic_warning"
+        android:drawablePadding="2dp"
+        android:textColor="@color/end_red"
+        android:layout_centerHorizontal="true"
+        android:layout_marginBottom="30dp"
+        android:textSize="14sp"
+        android:layout_above="@id/tv_sure_view"/>
+</RelativeLayout>
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-xxhdpi/bz_money.png b/app/src/main/res/mipmap-xxhdpi/bz_money.png
index be54426..c0f9254 100644
--- a/app/src/main/res/mipmap-xxhdpi/bz_money.png
+++ b/app/src/main/res/mipmap-xxhdpi/bz_money.png
Binary files differ
diff --git a/app/src/main/res/mipmap-xxhdpi/bz_money_2.png b/app/src/main/res/mipmap-xxhdpi/bz_money_2.png
new file mode 100644
index 0000000..2849567
--- /dev/null
+++ b/app/src/main/res/mipmap-xxhdpi/bz_money_2.png
Binary files differ
diff --git a/app/src/main/res/mipmap-xxhdpi/default_driver.png b/app/src/main/res/mipmap-xxhdpi/default_driver.png
new file mode 100644
index 0000000..f3ef1d6
--- /dev/null
+++ b/app/src/main/res/mipmap-xxhdpi/default_driver.png
Binary files differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_warning.png b/app/src/main/res/mipmap-xxhdpi/ic_warning.png
new file mode 100644
index 0000000..c90f388
--- /dev/null
+++ b/app/src/main/res/mipmap-xxhdpi/ic_warning.png
Binary files differ
diff --git a/build.gradle b/build.gradle
index ad645f4..9f2ae3e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,11 +1,10 @@
 // Top-level build file where you can add configuration options common to all sub-projects/modules.
 
 buildscript {
-    ext.kotlin_version = '1.4.30'
+    ext.kotlin_version = '1.3.61'
     repositories {
         maven { url 'https://jitpack.io' }
         google()
-        jcenter()
         mavenCentral()
         maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
         maven { url 'https://maven.aliyun.com/repository/google/' }
@@ -24,7 +23,6 @@
     repositories {
         maven { url 'https://jitpack.io' }
         google()
-        jcenter()
         maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
         maven { url 'https://maven.aliyun.com/repository/google/' }
         maven { url 'https://maven.aliyun.com/repository/jcenter/' }
diff --git a/settings.gradle b/settings.gradle
index 1b041f4..bf0975f 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,3 +1,3 @@
 include ':easyfloat'
 rootProject.name='Xianningtrip'
-include ':app', ':xldUtils', ':rxnetty', ':ChipsLayoutManager'
+include ':app', ':xldUtils', ':rxnetty'

--
Gitblit v1.7.1