From 47740dd579b00516c66fb6228309da1927f79189 Mon Sep 17 00:00:00 2001
From: "Ozan.Turcan" <ozan.turcan@veripark.com>
Date: Thu, 25 Apr 2019 10:49:51 +0300
Subject: [PATCH 1/3] added Drawable for Dots without animation

---
 .idea/assetWizardSettings.xml                 |  37 +++++
 ...rt_animated_vector_drawable_25_3_0_aar.xml |  12 ++
 ...ndroid_support_appcompat_v7_25_3_0_aar.xml |  12 ++
 ...support_support_annotations_25_3_0_jar.xml |  16 +++
 ...roid_support_support_compat_25_3_0_aar.xml |  12 ++
 ...oid_support_support_core_ui_25_3_0_aar.xml |  12 ++
 ..._support_support_core_utils_25_3_0_aar.xml |  12 ++
 ...id_support_support_fragment_25_3_0_aar.xml |  12 ++
 ...upport_support_media_compat_25_3_0_aar.xml |  12 ++
 ..._android_support_support_v4_25_3_0_aar.xml |  10 ++
 ...ort_support_vector_drawable_25_3_0_aar.xml |  12 ++
 ..._reactivex_rxjava2_rxandroid_2_0_0_aar.xml |  12 ++
 ..._io_reactivex_rxjava2_rxjava_2_0_2_jar.xml |   9 ++
 ...tivestreams_reactive_streams_1_0_0_jar.xml |  11 ++
 .idea/modules.xml                             |  11 ++
 PatternLockView.iml                           |  19 +++
 app/app.iml                                   | 132 ++++++++++++++++++
 app/src/main/res/layout/activity_main.xml     |   1 +
 .../patternlockview-reactive.iml              | 121 ++++++++++++++++
 patternlockview/patternlockview.iml           | 119 ++++++++++++++++
 .../patternlockview/PatternLockView.java      |  43 +++++-
 .../src/main/res/drawable/ic_keys_hole.xml    |   9 ++
 patternlockview/src/main/res/values/attrs.xml |   1 +
 23 files changed, 643 insertions(+), 4 deletions(-)
 create mode 100644 .idea/assetWizardSettings.xml
 create mode 100644 .idea/libraries/Gradle__com_android_support_animated_vector_drawable_25_3_0_aar.xml
 create mode 100644 .idea/libraries/Gradle__com_android_support_appcompat_v7_25_3_0_aar.xml
 create mode 100644 .idea/libraries/Gradle__com_android_support_support_annotations_25_3_0_jar.xml
 create mode 100644 .idea/libraries/Gradle__com_android_support_support_compat_25_3_0_aar.xml
 create mode 100644 .idea/libraries/Gradle__com_android_support_support_core_ui_25_3_0_aar.xml
 create mode 100644 .idea/libraries/Gradle__com_android_support_support_core_utils_25_3_0_aar.xml
 create mode 100644 .idea/libraries/Gradle__com_android_support_support_fragment_25_3_0_aar.xml
 create mode 100644 .idea/libraries/Gradle__com_android_support_support_media_compat_25_3_0_aar.xml
 create mode 100644 .idea/libraries/Gradle__com_android_support_support_v4_25_3_0_aar.xml
 create mode 100644 .idea/libraries/Gradle__com_android_support_support_vector_drawable_25_3_0_aar.xml
 create mode 100644 .idea/libraries/Gradle__io_reactivex_rxjava2_rxandroid_2_0_0_aar.xml
 create mode 100644 .idea/libraries/Gradle__io_reactivex_rxjava2_rxjava_2_0_2_jar.xml
 create mode 100644 .idea/libraries/Gradle__org_reactivestreams_reactive_streams_1_0_0_jar.xml
 create mode 100644 .idea/modules.xml
 create mode 100644 PatternLockView.iml
 create mode 100644 app/app.iml
 create mode 100644 patternlockview-reactive/patternlockview-reactive.iml
 create mode 100644 patternlockview/patternlockview.iml
 create mode 100644 patternlockview/src/main/res/drawable/ic_keys_hole.xml

diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml
new file mode 100644
index 0000000..801d4a4
--- /dev/null
+++ b/.idea/assetWizardSettings.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="WizardSettings">
+    <option name="children">
+      <map>
+        <entry key="imageWizard">
+          <value>
+            <PersistentState />
+          </value>
+        </entry>
+        <entry key="vectorWizard">
+          <value>
+            <PersistentState>
+              <option name="children">
+                <map>
+                  <entry key="vectorAssetStep">
+                    <value>
+                      <PersistentState>
+                        <option name="values">
+                          <map>
+                            <entry key="assetSourceType" value="FILE" />
+                            <entry key="outputName" value="ic_keys_hole" />
+                            <entry key="sourceFile" value="$USER_HOME$/Desktop/keys-hole.svg" />
+                          </map>
+                        </option>
+                      </PersistentState>
+                    </value>
+                  </entry>
+                </map>
+              </option>
+            </PersistentState>
+          </value>
+        </entry>
+      </map>
+    </option>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_animated_vector_drawable_25_3_0_aar.xml b/.idea/libraries/Gradle__com_android_support_animated_vector_drawable_25_3_0_aar.xml
new file mode 100644
index 0000000..705ae49
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_animated_vector_drawable_25_3_0_aar.xml
@@ -0,0 +1,12 @@
+<component name="libraryTable">
+  <library name="Gradle: com.android.support:animated-vector-drawable:25.3.0@aar">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.android/build-cache/07e3f6233ea5985b4ce69ec666edaacecacd885e/output/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.android/build-cache/07e3f6233ea5985b4ce69ec666edaacecacd885e/output/res" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/animated-vector-drawable/25.3.0/animated-vector-drawable-25.3.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_appcompat_v7_25_3_0_aar.xml b/.idea/libraries/Gradle__com_android_support_appcompat_v7_25_3_0_aar.xml
new file mode 100644
index 0000000..54213c6
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_appcompat_v7_25_3_0_aar.xml
@@ -0,0 +1,12 @@
+<component name="libraryTable">
+  <library name="Gradle: com.android.support:appcompat-v7:25.3.0@aar">
+    <CLASSES>
+      <root url="file://$USER_HOME$/.android/build-cache/e3475a27fc93304c925ff63a9b6ac871367855b1/output/res" />
+      <root url="jar://$USER_HOME$/.android/build-cache/e3475a27fc93304c925ff63a9b6ac871367855b1/output/jars/classes.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/appcompat-v7/25.3.0/appcompat-v7-25.3.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_annotations_25_3_0_jar.xml b/.idea/libraries/Gradle__com_android_support_support_annotations_25_3_0_jar.xml
new file mode 100644
index 0000000..66210f3
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_support_annotations_25_3_0_jar.xml
@@ -0,0 +1,16 @@
+<component name="libraryTable">
+  <library name="Gradle: com.android.support:support-annotations:25.3.0@jar">
+    <ANNOTATIONS>
+      <root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/support-annotations/25.3.0/support-annotations-25.3.0-annotations.zip!/" />
+    </ANNOTATIONS>
+    <CLASSES>
+      <root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/support-annotations/25.3.0/support-annotations-25.3.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/support-annotations/25.3.0/support-annotations-25.3.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/support-annotations/25.3.0/support-annotations-25.3.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_compat_25_3_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_compat_25_3_0_aar.xml
new file mode 100644
index 0000000..64394cf
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_support_compat_25_3_0_aar.xml
@@ -0,0 +1,12 @@
+<component name="libraryTable">
+  <library name="Gradle: com.android.support:support-compat:25.3.0@aar">
+    <CLASSES>
+      <root url="file://$USER_HOME$/.android/build-cache/f3ad6650f198c13ba06da316596439d7bf9db3d1/output/res" />
+      <root url="jar://$USER_HOME$/.android/build-cache/f3ad6650f198c13ba06da316596439d7bf9db3d1/output/jars/classes.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/support-compat/25.3.0/support-compat-25.3.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_core_ui_25_3_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_core_ui_25_3_0_aar.xml
new file mode 100644
index 0000000..d8cf0b2
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_support_core_ui_25_3_0_aar.xml
@@ -0,0 +1,12 @@
+<component name="libraryTable">
+  <library name="Gradle: com.android.support:support-core-ui:25.3.0@aar">
+    <CLASSES>
+      <root url="file://$USER_HOME$/.android/build-cache/c0b554032abbafefdae6356733354fae8c36b542/output/res" />
+      <root url="jar://$USER_HOME$/.android/build-cache/c0b554032abbafefdae6356733354fae8c36b542/output/jars/classes.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/support-core-ui/25.3.0/support-core-ui-25.3.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_core_utils_25_3_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_core_utils_25_3_0_aar.xml
new file mode 100644
index 0000000..4b56344
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_support_core_utils_25_3_0_aar.xml
@@ -0,0 +1,12 @@
+<component name="libraryTable">
+  <library name="Gradle: com.android.support:support-core-utils:25.3.0@aar">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.android/build-cache/d1e2d27184be9249545869e62f731417f247227c/output/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.android/build-cache/d1e2d27184be9249545869e62f731417f247227c/output/res" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/support-core-utils/25.3.0/support-core-utils-25.3.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_fragment_25_3_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_fragment_25_3_0_aar.xml
new file mode 100644
index 0000000..13055a2
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_support_fragment_25_3_0_aar.xml
@@ -0,0 +1,12 @@
+<component name="libraryTable">
+  <library name="Gradle: com.android.support:support-fragment:25.3.0@aar">
+    <CLASSES>
+      <root url="file://$USER_HOME$/.android/build-cache/41f101675358dd32e6b5a5903ee40d46172ffc62/output/res" />
+      <root url="jar://$USER_HOME$/.android/build-cache/41f101675358dd32e6b5a5903ee40d46172ffc62/output/jars/classes.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/support-fragment/25.3.0/support-fragment-25.3.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_media_compat_25_3_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_media_compat_25_3_0_aar.xml
new file mode 100644
index 0000000..c02c485
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_support_media_compat_25_3_0_aar.xml
@@ -0,0 +1,12 @@
+<component name="libraryTable">
+  <library name="Gradle: com.android.support:support-media-compat:25.3.0@aar">
+    <CLASSES>
+      <root url="file://$USER_HOME$/.android/build-cache/206a4e3df3ecc823561b46604f7b9746288bc74f/output/res" />
+      <root url="jar://$USER_HOME$/.android/build-cache/206a4e3df3ecc823561b46604f7b9746288bc74f/output/jars/classes.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/support-media-compat/25.3.0/support-media-compat-25.3.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_v4_25_3_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_v4_25_3_0_aar.xml
new file mode 100644
index 0000000..4bff4b3
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_support_v4_25_3_0_aar.xml
@@ -0,0 +1,10 @@
+<component name="libraryTable">
+  <library name="Gradle: com.android.support:support-v4:25.3.0@aar">
+    <CLASSES>
+      <root url="file://$USER_HOME$/.android/build-cache/825c0081e512cd63adad84817f0735594e84fca3/output/res" />
+      <root url="jar://$USER_HOME$/.android/build-cache/825c0081e512cd63adad84817f0735594e84fca3/output/jars/classes.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_vector_drawable_25_3_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_vector_drawable_25_3_0_aar.xml
new file mode 100644
index 0000000..5c813ff
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_support_vector_drawable_25_3_0_aar.xml
@@ -0,0 +1,12 @@
+<component name="libraryTable">
+  <library name="Gradle: com.android.support:support-vector-drawable:25.3.0@aar">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.android/build-cache/dc22d9edfbfaf91c5cd8f0e85e0ea0f1a686dc54/output/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.android/build-cache/dc22d9edfbfaf91c5cd8f0e85e0ea0f1a686dc54/output/res" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/support-vector-drawable/25.3.0/support-vector-drawable-25.3.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__io_reactivex_rxjava2_rxandroid_2_0_0_aar.xml b/.idea/libraries/Gradle__io_reactivex_rxjava2_rxandroid_2_0_0_aar.xml
new file mode 100644
index 0000000..9b2a311
--- /dev/null
+++ b/.idea/libraries/Gradle__io_reactivex_rxjava2_rxandroid_2_0_0_aar.xml
@@ -0,0 +1,12 @@
+<component name="libraryTable">
+  <library name="Gradle: io.reactivex.rxjava2:rxandroid:2.0.0@aar">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.android/build-cache/c5acc30154172b1d7fbb5f742c52c68a6ad0e66a/output/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.android/build-cache/c5acc30154172b1d7fbb5f742c52c68a6ad0e66a/output/res" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/io.reactivex.rxjava2/rxandroid/2.0.0/556f370ddb42e819b38d5b723a5e7efa0587532f/rxandroid-2.0.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__io_reactivex_rxjava2_rxjava_2_0_2_jar.xml b/.idea/libraries/Gradle__io_reactivex_rxjava2_rxjava_2_0_2_jar.xml
new file mode 100644
index 0000000..b9229a0
--- /dev/null
+++ b/.idea/libraries/Gradle__io_reactivex_rxjava2_rxjava_2_0_2_jar.xml
@@ -0,0 +1,9 @@
+<component name="libraryTable">
+  <library name="Gradle: io.reactivex.rxjava2:rxjava:2.0.2@jar">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/io.reactivex.rxjava2/rxjava/2.0.2/cfccdd18cdfbe7b4773d42c9f3512eeafbe5cbf9/rxjava-2.0.2.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__org_reactivestreams_reactive_streams_1_0_0_jar.xml b/.idea/libraries/Gradle__org_reactivestreams_reactive_streams_1_0_0_jar.xml
new file mode 100644
index 0000000..f4fcefc
--- /dev/null
+++ b/.idea/libraries/Gradle__org_reactivestreams_reactive_streams_1_0_0_jar.xml
@@ -0,0 +1,11 @@
+<component name="libraryTable">
+  <library name="Gradle: org.reactivestreams:reactive-streams:1.0.0@jar">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.reactivestreams/reactive-streams/1.0.0/14b8c877d98005ba3941c9257cfe09f6ed0e0d74/reactive-streams-1.0.0.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.reactivestreams/reactive-streams/1.0.0/5be7bd3f38e43c8fc83699bbb5328c62adb95bbf/reactive-streams-1.0.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..e7a55e6
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/PatternLockView.iml" filepath="$PROJECT_DIR$/PatternLockView.iml" />
+      <module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
+      <module fileurl="file://$PROJECT_DIR$/patternlockview/patternlockview.iml" filepath="$PROJECT_DIR$/patternlockview/patternlockview.iml" />
+      <module fileurl="file://$PROJECT_DIR$/patternlockview-reactive/patternlockview-reactive.iml" filepath="$PROJECT_DIR$/patternlockview-reactive/patternlockview-reactive.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/PatternLockView.iml b/PatternLockView.iml
new file mode 100644
index 0000000..d315539
--- /dev/null
+++ b/PatternLockView.iml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module external.linked.project.id="PatternLockView" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="java-gradle" name="Java-Gradle">
+      <configuration>
+        <option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
+        <option name="BUILDABLE" value="false" />
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <excludeFolder url="file://$MODULE_DIR$/.gradle" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/app/app.iml b/app/app.iml
new file mode 100644
index 0000000..6fdb1f0
--- /dev/null
+++ b/app/app.iml
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="android-gradle" name="Android-Gradle">
+      <configuration>
+        <option name="GRADLE_PROJECT_PATH" value=":app" />
+      </configuration>
+    </facet>
+    <facet type="android" name="Android">
+      <configuration>
+        <option name="SELECTED_BUILD_VARIANT" value="debug" />
+        <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
+        <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
+        <afterSyncTasks>
+          <task>generateDebugSources</task>
+        </afterSyncTasks>
+        <option name="ALLOW_USER_CONFIGURATION" value="false" />
+        <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
+        <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
+        <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res;file://$MODULE_DIR$/build/generated/res/rs/debug;file://$MODULE_DIR$/build/generated/res/resValues/debug" />
+        <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
+    <output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
+    <output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" />
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/build/generated/not_namespaced_r_class_sources" />
+      <excludeFolder url="file://$MODULE_DIR$/build/generated/source/r" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/apk_list" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/build-info" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-manifest" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/checkDebugClasspath" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/compatible_screen_manifest" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-classes" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-resources" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-support" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_run_merged_manifests" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint_jar" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_manifests" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/prebuild" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/processed_res" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/restart-dex" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/split-apk" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/split_list" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
+      <excludeFolder url="file://$MODULE_DIR$/build/outputs" />
+      <excludeFolder url="file://$MODULE_DIR$/build/tmp" />
+    </content>
+    <orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-core-ui:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:animated-vector-drawable:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: io.reactivex.rxjava2:rxandroid:2.0.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-fragment:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: org.reactivestreams:reactive-streams:1.0.0@jar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-annotations:25.3.0@jar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:appcompat-v7:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-media-compat:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-core-utils:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-vector-drawable:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-v4:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: io.reactivex.rxjava2:rxjava:2.0.2@jar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-compat:25.3.0@aar" level="project" />
+    <orderEntry type="module" module-name="patternlockview" exported="" />
+    <orderEntry type="module" module-name="patternlockview-reactive" exported="" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 482d3d4..c9175c6 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -36,6 +36,7 @@
         android:layout_marginTop="16dp"
         app:aspectRatio="square"
         app:aspectRatioEnabled="true"
+        app:dotDrawable="@drawable/logo"
         app:dotAnimationDuration="150"
         app:dotCount="3"/>
 
diff --git a/patternlockview-reactive/patternlockview-reactive.iml b/patternlockview-reactive/patternlockview-reactive.iml
new file mode 100644
index 0000000..69dc56a
--- /dev/null
+++ b/patternlockview-reactive/patternlockview-reactive.iml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module external.linked.project.id=":patternlockview-reactive" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="android-gradle" name="Android-Gradle">
+      <configuration>
+        <option name="GRADLE_PROJECT_PATH" value=":patternlockview-reactive" />
+      </configuration>
+    </facet>
+    <facet type="android" name="Android">
+      <configuration>
+        <option name="SELECTED_BUILD_VARIANT" value="debug" />
+        <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
+        <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
+        <afterSyncTasks>
+          <task>generateDebugSources</task>
+        </afterSyncTasks>
+        <option name="ALLOW_USER_CONFIGURATION" value="false" />
+        <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
+        <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
+        <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res;file://$MODULE_DIR$/build/generated/res/rs/debug;file://$MODULE_DIR$/build/generated/res/resValues/debug" />
+        <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
+        <option name="PROJECT_TYPE" value="1" />
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
+    <output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
+    <output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" />
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/build/generated/not_namespaced_r_class_sources" />
+      <excludeFolder url="file://$MODULE_DIR$/build/generated/source/r" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/aapt_friendly_merged_manifests" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotation_processor_list" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotations" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-manifest" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/javac" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint_jar" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_manifests" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/packaged_res" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/public_res" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
+      <excludeFolder url="file://$MODULE_DIR$/build/outputs" />
+      <excludeFolder url="file://$MODULE_DIR$/build/tmp" />
+    </content>
+    <orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-core-ui:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:animated-vector-drawable:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: io.reactivex.rxjava2:rxandroid:2.0.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-fragment:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: org.reactivestreams:reactive-streams:1.0.0@jar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:appcompat-v7:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-media-compat:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-core-utils:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-vector-drawable:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-v4:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: io.reactivex.rxjava2:rxjava:2.0.2@jar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-compat:25.3.0@aar" level="project" />
+    <orderEntry type="module" module-name="patternlockview" exported="" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/patternlockview/patternlockview.iml b/patternlockview/patternlockview.iml
new file mode 100644
index 0000000..9dd3e02
--- /dev/null
+++ b/patternlockview/patternlockview.iml
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module external.linked.project.id=":patternlockview" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="android-gradle" name="Android-Gradle">
+      <configuration>
+        <option name="GRADLE_PROJECT_PATH" value=":patternlockview" />
+      </configuration>
+    </facet>
+    <facet type="android" name="Android">
+      <configuration>
+        <option name="SELECTED_BUILD_VARIANT" value="debug" />
+        <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
+        <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
+        <afterSyncTasks>
+          <task>generateDebugSources</task>
+        </afterSyncTasks>
+        <option name="ALLOW_USER_CONFIGURATION" value="false" />
+        <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
+        <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
+        <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res;file://$MODULE_DIR$/build/generated/res/rs/debug;file://$MODULE_DIR$/build/generated/res/resValues/debug" />
+        <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
+        <option name="PROJECT_TYPE" value="1" />
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
+    <output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
+    <output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" />
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/build/generated/not_namespaced_r_class_sources" />
+      <excludeFolder url="file://$MODULE_DIR$/build/generated/source/r" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/aapt_friendly_merged_manifests" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotation_processor_list" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotations" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-manifest" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/intermediate-jars" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/javac" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint_jar" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_manifests" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/packaged_res" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/public_res" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
+      <excludeFolder url="file://$MODULE_DIR$/build/outputs" />
+      <excludeFolder url="file://$MODULE_DIR$/build/tmp" />
+    </content>
+    <orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-core-ui:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:animated-vector-drawable:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-fragment:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-annotations:25.3.0@jar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-media-compat:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:appcompat-v7:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-core-utils:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-vector-drawable:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-v4:25.3.0@aar" level="project" />
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-compat:25.3.0@aar" level="project" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/patternlockview/src/main/java/com/andrognito/patternlockview/PatternLockView.java b/patternlockview/src/main/java/com/andrognito/patternlockview/PatternLockView.java
index 1624fd0..47a1183 100755
--- a/patternlockview/src/main/java/com/andrognito/patternlockview/PatternLockView.java
+++ b/patternlockview/src/main/java/com/andrognito/patternlockview/PatternLockView.java
@@ -5,10 +5,12 @@
 import android.animation.ValueAnimator;
 import android.content.Context;
 import android.content.res.TypedArray;
+import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Paint;
 import android.graphics.Path;
 import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
 import android.os.Build;
 import android.os.Debug;
 import android.os.Parcel;
@@ -17,6 +19,7 @@
 import android.support.annotation.ColorInt;
 import android.support.annotation.Dimension;
 import android.support.annotation.IntDef;
+import android.support.v4.graphics.drawable.DrawableCompat;
 import android.util.AttributeSet;
 import android.view.HapticFeedbackConstants;
 import android.view.MotionEvent;
@@ -124,9 +127,10 @@ public class PatternLockView extends View {
     private int mDotSelectedSize;
     private int mDotAnimationDuration;
     private int mPathEndAnimationDuration;
-
     private Paint mDotPaint;
     private Paint mPathPaint;
+    private Bitmap mBitmap;
+    private Drawable mDotDrawable;
 
     private List<PatternLockViewListener> mPatternListeners;
     // The pattern represented as a list of connected {@link Dot}
@@ -191,6 +195,7 @@ public PatternLockView(Context context, AttributeSet attrs) {
                     DEFAULT_DOT_ANIMATION_DURATION);
             mPathEndAnimationDuration = typedArray.getInt(R.styleable.PatternLockView_pathEndAnimationDuration,
                     DEFAULT_PATH_END_ANIMATION_DURATION);
+            mDotDrawable = typedArray.getDrawable(R.styleable.PatternLockView_dotDrawable);
         } finally {
             typedArray.recycle();
         }
@@ -236,6 +241,9 @@ private void initView() {
             mLinearOutSlowInInterpolator = AnimationUtils.loadInterpolator(
                     getContext(), android.R.interpolator.linear_out_slow_in);
         }
+        if (mDotDrawable != null) {
+            mBitmap = getBitmapFromVectorDrawable(getContext(), mDotDrawable);
+        }
     }
 
     @Override
@@ -313,7 +321,7 @@ protected void onDraw(Canvas canvas) {
 
         Path currentPath = mCurrentPath;
         currentPath.rewind();
-
+//TODO : can be using drawable.
         // Draw the dots
         for (int i = 0; i < sDotCount; i++) {
             float centerY = getCenterYForRow(i);
@@ -322,8 +330,14 @@ protected void onDraw(Canvas canvas) {
                 float centerX = getCenterXForColumn(j);
                 float size = dotState.mSize * dotState.mScale;
                 float translationY = dotState.mTranslateY;
-                drawCircle(canvas, (int) centerX, (int) centerY + translationY,
-                        size, drawLookupTable[i][j], dotState.mAlpha);
+                if (mDotDrawable != null) {
+                    drawDrawable(canvas, (int) centerX, (int) centerY + translationY,
+                            size, drawLookupTable[i][j], dotState.mAlpha);
+                } else {
+
+                    drawCircle(canvas, (int) centerX, (int) centerY + translationY,
+                            size, drawLookupTable[i][j], dotState.mAlpha);
+                }
             }
         }
 
@@ -1142,6 +1156,27 @@ private void drawCircle(Canvas canvas, float centerX, float centerY,
         canvas.drawCircle(centerX, centerY, size / 2, mDotPaint);
     }
 
+    private void drawDrawable(Canvas canvas, float centerX, float centerY, float size, boolean partOfPattern, float alpha) {
+        mDotPaint.setColor(getCurrentColor(partOfPattern));
+        mDotPaint.setAlpha((int) (alpha * 255));
+
+        canvas.drawBitmap(mBitmap, centerX - (mBitmap.getWidth() / 2), centerY - (mBitmap.getHeight() / 2), mDotPaint);
+    }
+
+    public Bitmap getBitmapFromVectorDrawable(Context context, Drawable drawable) {
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
+            drawable = (DrawableCompat.wrap(drawable)).mutate();
+        }
+
+        Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
+                drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
+        Canvas canvas = new Canvas(bitmap);
+        drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
+        drawable.draw(canvas);
+        Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, 60, 60, false);
+        return scaledBitmap;
+    }
+
     /**
      * Represents a cell in the matrix of the pattern view
      */
diff --git a/patternlockview/src/main/res/drawable/ic_keys_hole.xml b/patternlockview/src/main/res/drawable/ic_keys_hole.xml
new file mode 100644
index 0000000..c1c1feb
--- /dev/null
+++ b/patternlockview/src/main/res/drawable/ic_keys_hole.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="36dp"
+    android:height="36dp"
+    android:viewportWidth="47"
+    android:viewportHeight="47">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M23.5,0C10.522,0 0,10.522 0,23.5C0,36.479 10.522,47 23.5,47C36.479,47 47,36.479 47,23.5C47,10.522 36.479,0 23.5,0zM30.07,34.686L30.07,34.686c0,2.53 -2.941,4.58 -6.573,4.58c-3.631,0 -6.577,-2.05 -6.577,-4.58c0,-0.494 3.648,-14.979 3.648,-14.979c-2.024,-1.06 -3.418,-3.161 -3.418,-5.609c0,-3.515 2.838,-6.362 6.361,-6.362c3.514,0 6.35,2.848 6.35,6.362c0,2.448 -1.391,4.55 -3.416,5.609c0,0 3.598,14.455 3.611,14.88l0.022,0.099H30.07z" />
+</vector>
diff --git a/patternlockview/src/main/res/values/attrs.xml b/patternlockview/src/main/res/values/attrs.xml
index c4d8d7d..6172263 100644
--- a/patternlockview/src/main/res/values/attrs.xml
+++ b/patternlockview/src/main/res/values/attrs.xml
@@ -16,5 +16,6 @@
         <attr name="wrongStateColor" format="color"/>
         <attr name="dotAnimationDuration" format="integer"/>
         <attr name="pathEndAnimationDuration" format="integer"/>
+        <attr name="dotDrawable" format="reference" />
     </declare-styleable>
 </resources>
\ No newline at end of file

From 502b6d091b4e93f5adf0723c5f0cf54ede5e8382 Mon Sep 17 00:00:00 2001
From: "Ozan.Turcan" <ozan.turcan@veripark.com>
Date: Thu, 25 Apr 2019 17:00:31 +0300
Subject: [PATCH 2/3] added Drawable for Dots with animation

---
 .idea/assetWizardSettings.xml                 |  4 ++--
 app/src/main/res/layout/activity_main.xml     |  7 +++++-
 .../patternlockview/PatternLockView.java      | 22 ++++++++++---------
 .../res/drawable/ic_favorite_heart_button.xml |  4 ++++
 .../src/main/res/drawable/ic_keys_hole.xml    |  4 ++--
 .../src/main/res/drawable/ic_star.xml         |  4 ++++
 6 files changed, 30 insertions(+), 15 deletions(-)
 create mode 100644 patternlockview/src/main/res/drawable/ic_favorite_heart_button.xml
 create mode 100644 patternlockview/src/main/res/drawable/ic_star.xml

diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml
index 801d4a4..2ee81c3 100644
--- a/.idea/assetWizardSettings.xml
+++ b/.idea/assetWizardSettings.xml
@@ -19,8 +19,8 @@
                         <option name="values">
                           <map>
                             <entry key="assetSourceType" value="FILE" />
-                            <entry key="outputName" value="ic_keys_hole" />
-                            <entry key="sourceFile" value="$USER_HOME$/Desktop/keys-hole.svg" />
+                            <entry key="outputName" value="ic_star" />
+                            <entry key="sourceFile" value="$USER_HOME$/Desktop/star.svg" />
                           </map>
                         </option>
                       </PersistentState>
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index c9175c6..ceca6ee 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -35,8 +35,13 @@
         android:layout_gravity="center_horizontal"
         android:layout_marginTop="16dp"
         app:aspectRatio="square"
+        android:drawingCacheQuality="high"
+        app:dotNormalSize="40dp"
+        app:dotSelectedSize="50dp"
+        app:normalStateColor="#2196F3"
+        app:wrongStateColor="#C73047"
+        app:correctStateColor="#34A242"
         app:aspectRatioEnabled="true"
-        app:dotDrawable="@drawable/logo"
         app:dotAnimationDuration="150"
         app:dotCount="3"/>
 
diff --git a/patternlockview/src/main/java/com/andrognito/patternlockview/PatternLockView.java b/patternlockview/src/main/java/com/andrognito/patternlockview/PatternLockView.java
index 47a1183..77560ff 100755
--- a/patternlockview/src/main/java/com/andrognito/patternlockview/PatternLockView.java
+++ b/patternlockview/src/main/java/com/andrognito/patternlockview/PatternLockView.java
@@ -242,7 +242,7 @@ private void initView() {
                     getContext(), android.R.interpolator.linear_out_slow_in);
         }
         if (mDotDrawable != null) {
-            mBitmap = getBitmapFromVectorDrawable(getContext(), mDotDrawable);
+            mBitmap = getBitmapFromVectorDrawable(mDotDrawable);
         }
     }
 
@@ -321,7 +321,6 @@ protected void onDraw(Canvas canvas) {
 
         Path currentPath = mCurrentPath;
         currentPath.rewind();
-//TODO : can be using drawable.
         // Draw the dots
         for (int i = 0; i < sDotCount; i++) {
             float centerY = getCenterYForRow(i);
@@ -330,7 +329,7 @@ protected void onDraw(Canvas canvas) {
                 float centerX = getCenterXForColumn(j);
                 float size = dotState.mSize * dotState.mScale;
                 float translationY = dotState.mTranslateY;
-                if (mDotDrawable != null) {
+                if (mBitmap != null) {
                     drawDrawable(canvas, (int) centerX, (int) centerY + translationY,
                             size, drawLookupTable[i][j], dotState.mAlpha);
                 } else {
@@ -1160,21 +1159,24 @@ private void drawDrawable(Canvas canvas, float centerX, float centerY, float siz
         mDotPaint.setColor(getCurrentColor(partOfPattern));
         mDotPaint.setAlpha((int) (alpha * 255));
 
-        canvas.drawBitmap(mBitmap, centerX - (mBitmap.getWidth() / 2), centerY - (mBitmap.getHeight() / 2), mDotPaint);
+        Bitmap scaledBitmap = Bitmap.createScaledBitmap(mBitmap, (int) size, (int) size, false);
+
+        canvas.drawBitmap(scaledBitmap, centerX - (scaledBitmap.getWidth() / 2f), centerY - (scaledBitmap.getHeight() / 2f), mDotPaint);
     }
 
-    public Bitmap getBitmapFromVectorDrawable(Context context, Drawable drawable) {
+    /**
+     * using for
+     */
+    public Bitmap getBitmapFromVectorDrawable(Drawable drawable) {
         if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
             drawable = (DrawableCompat.wrap(drawable)).mutate();
         }
 
-        Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
-                drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
+        Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
         Canvas canvas = new Canvas(bitmap);
-        drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
+        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
         drawable.draw(canvas);
-        Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, 60, 60, false);
-        return scaledBitmap;
+        return bitmap;
     }
 
     /**
diff --git a/patternlockview/src/main/res/drawable/ic_favorite_heart_button.xml b/patternlockview/src/main/res/drawable/ic_favorite_heart_button.xml
new file mode 100644
index 0000000..71d682f
--- /dev/null
+++ b/patternlockview/src/main/res/drawable/ic_favorite_heart_button.xml
@@ -0,0 +1,4 @@
+<vector android:height="24dp" android:viewportHeight="510"
+    android:viewportWidth="510" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M255,489.6l-35.7,-35.7C86.7,336.6 0,257.55 0,160.65C0,81.6 61.2,20.4 140.25,20.4c43.35,0 86.7,20.4 114.75,53.55C283.05,40.8 326.4,20.4 369.75,20.4C448.8,20.4 510,81.6 510,160.65c0,96.9 -86.7,175.95 -219.3,293.25L255,489.6z"/>
+</vector>
diff --git a/patternlockview/src/main/res/drawable/ic_keys_hole.xml b/patternlockview/src/main/res/drawable/ic_keys_hole.xml
index c1c1feb..9e5476a 100644
--- a/patternlockview/src/main/res/drawable/ic_keys_hole.xml
+++ b/patternlockview/src/main/res/drawable/ic_keys_hole.xml
@@ -1,6 +1,6 @@
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="36dp"
-    android:height="36dp"
+    android:width="128dp"
+    android:height="128dp"
     android:viewportWidth="47"
     android:viewportHeight="47">
     <path
diff --git a/patternlockview/src/main/res/drawable/ic_star.xml b/patternlockview/src/main/res/drawable/ic_star.xml
new file mode 100644
index 0000000..77564bd
--- /dev/null
+++ b/patternlockview/src/main/res/drawable/ic_star.xml
@@ -0,0 +1,4 @@
+<vector android:height="24dp" android:viewportHeight="49.94"
+    android:viewportWidth="49.94" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M48.856,22.73c0.983,-0.958 1.33,-2.364 0.906,-3.671c-0.425,-1.307 -1.532,-2.24 -2.892,-2.438l-12.092,-1.757c-0.515,-0.075 -0.96,-0.398 -1.19,-0.865L28.182,3.043c-0.607,-1.231 -1.839,-1.996 -3.212,-1.996c-1.372,0 -2.604,0.765 -3.211,1.996L16.352,14c-0.23,0.467 -0.676,0.79 -1.191,0.865L3.069,16.622c-1.359,0.197 -2.467,1.131 -2.892,2.438c-0.424,1.307 -0.077,2.713 0.906,3.671l8.749,8.528c0.373,0.364 0.544,0.888 0.456,1.4L8.224,44.701c-0.183,1.06 0.095,2.091 0.781,2.904c1.066,1.267 2.927,1.653 4.415,0.871l10.814,-5.686c0.452,-0.237 1.021,-0.235 1.472,0l10.815,5.686c0.526,0.277 1.087,0.417 1.666,0.417c1.057,0 2.059,-0.47 2.748,-1.288c0.687,-0.813 0.964,-1.846 0.781,-2.904l-2.065,-12.042c-0.088,-0.513 0.083,-1.036 0.456,-1.4L48.856,22.73z"/>
+</vector>

From d9cdb0eca43005e1669f2489e74c61b4bad491df Mon Sep 17 00:00:00 2001
From: "Ozan.Turcan" <ozan.turcan@veripark.com>
Date: Mon, 6 May 2019 09:48:17 +0300
Subject: [PATCH 3/3] bring front to Dots

---
 .../patternlockview/PatternLockView.java      | 84 ++++++++++++-------
 1 file changed, 56 insertions(+), 28 deletions(-)

diff --git a/patternlockview/src/main/java/com/andrognito/patternlockview/PatternLockView.java b/patternlockview/src/main/java/com/andrognito/patternlockview/PatternLockView.java
index 77560ff..025f113 100755
--- a/patternlockview/src/main/java/com/andrognito/patternlockview/PatternLockView.java
+++ b/patternlockview/src/main/java/com/andrognito/patternlockview/PatternLockView.java
@@ -196,6 +196,9 @@ public PatternLockView(Context context, AttributeSet attrs) {
             mPathEndAnimationDuration = typedArray.getInt(R.styleable.PatternLockView_pathEndAnimationDuration,
                     DEFAULT_PATH_END_ANIMATION_DURATION);
             mDotDrawable = typedArray.getDrawable(R.styleable.PatternLockView_dotDrawable);
+            if (mDotDrawable != null) {
+                mBitmap = getBitmapFromVectorDrawable(mDotDrawable);
+            }
         } finally {
             typedArray.recycle();
         }
@@ -210,6 +213,11 @@ public PatternLockView(Context context, AttributeSet attrs) {
             for (int j = 0; j < sDotCount; j++) {
                 mDotStates[i][j] = new DotState();
                 mDotStates[i][j].mSize = mDotNormalSize;
+                if (mBitmap != null) {
+                    mDotStates[i][j].mDotView = new View(context);
+                    Canvas canvas = new Canvas(mBitmap);
+                    mDotStates[i][j].mDotView.draw(canvas);
+                }
             }
         }
 
@@ -241,9 +249,7 @@ private void initView() {
             mLinearOutSlowInInterpolator = AnimationUtils.loadInterpolator(
                     getContext(), android.R.interpolator.linear_out_slow_in);
         }
-        if (mDotDrawable != null) {
-            mBitmap = getBitmapFromVectorDrawable(mDotDrawable);
-        }
+
     }
 
     @Override
@@ -321,24 +327,7 @@ protected void onDraw(Canvas canvas) {
 
         Path currentPath = mCurrentPath;
         currentPath.rewind();
-        // Draw the dots
-        for (int i = 0; i < sDotCount; i++) {
-            float centerY = getCenterYForRow(i);
-            for (int j = 0; j < sDotCount; j++) {
-                DotState dotState = mDotStates[i][j];
-                float centerX = getCenterXForColumn(j);
-                float size = dotState.mSize * dotState.mScale;
-                float translationY = dotState.mTranslateY;
-                if (mBitmap != null) {
-                    drawDrawable(canvas, (int) centerX, (int) centerY + translationY,
-                            size, drawLookupTable[i][j], dotState.mAlpha);
-                } else {
 
-                    drawCircle(canvas, (int) centerX, (int) centerY + translationY,
-                            size, drawLookupTable[i][j], dotState.mAlpha);
-                }
-            }
-        }
 
         // Draw the path of the pattern (unless we are in stealth mode)
         boolean drawPath = !mInStealthMode;
@@ -376,7 +365,24 @@ protected void onDraw(Canvas canvas) {
                 lastX = centerX;
                 lastY = centerY;
             }
+            // Draw the dots
+            for (int i = 0; i < sDotCount; i++) {
+                float centerY = getCenterYForRow(i);
+                for (int j = 0; j < sDotCount; j++) {
+                    DotState dotState = mDotStates[i][j];
+                    float centerX = getCenterXForColumn(j);
+                    float size = dotState.mSize * dotState.mScale;
+                    float translationY = dotState.mTranslateY;
+                    if (mBitmap != null) {
+                        drawDrawable(canvas, (int) centerX, (int) centerY + translationY,
+                                size, drawLookupTable[i][j], dotState.mAlpha);
+                    } else {
 
+                        drawCircle(canvas, (int) centerX, (int) centerY + translationY,
+                                size, drawLookupTable[i][j], dotState.mAlpha);
+                    }
+                }
+            }
             // Draw last in progress section
             if ((mPatternInProgress || mPatternViewMode == AUTO_DRAW)
                     && anyCircles) {
@@ -888,15 +894,39 @@ private void startSizeAnimation(float start, float end, long duration,
                                     Interpolator interpolator, final DotState state,
                                     final Runnable endRunnable) {
         ValueAnimator valueAnimator = ValueAnimator.ofFloat(start, end);
-        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+        if (mBitmap != null) {
+            valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
 
-            @Override
-            public void onAnimationUpdate(ValueAnimator animation) {
-                state.mSize = (Float) animation.getAnimatedValue();
-                invalidate();
+                @Override
+                public void onAnimationUpdate(ValueAnimator animation) {
+                    state.mSize = (Float) animation.getAnimatedValue();
+                    invalidate();
+                }
+
+            });
+            if (endRunnable != null) {
+                valueAnimator.addListener(new AnimatorListenerAdapter() {
+
+                    @Override
+                    public void onAnimationEnd(Animator animation) {
+                        if (endRunnable != null) {
+                            endRunnable.run();
+                        }
+                    }
+                });
             }
+        } else {
 
-        });
+            valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+
+                @Override
+                public void onAnimationUpdate(ValueAnimator animation) {
+                    state.mSize = (Float) animation.getAnimatedValue();
+                    invalidate();
+                }
+
+            });
+        }
         if (endRunnable != null) {
             valueAnimator.addListener(new AnimatorListenerAdapter() {
 
@@ -1158,9 +1188,7 @@ private void drawCircle(Canvas canvas, float centerX, float centerY,
     private void drawDrawable(Canvas canvas, float centerX, float centerY, float size, boolean partOfPattern, float alpha) {
         mDotPaint.setColor(getCurrentColor(partOfPattern));
         mDotPaint.setAlpha((int) (alpha * 255));
-
         Bitmap scaledBitmap = Bitmap.createScaledBitmap(mBitmap, (int) size, (int) size, false);
-
         canvas.drawBitmap(scaledBitmap, centerX - (scaledBitmap.getWidth() / 2f), centerY - (scaledBitmap.getHeight() / 2f), mDotPaint);
     }