├── .buildscript └── deploy_snapshot.sh ├── .gitignore ├── .travis.yml ├── CHLOG.md ├── LICENSE ├── README.md ├── art ├── multislider.gif └── multislider.mp4 ├── build.gradle ├── captures └── io.apptik.widget.example.multislider_2016.11.23_10.14.li ├── docs ├── _config.yml ├── css │ └── main.scss ├── index.html └── javadoc │ └── 1.3 │ ├── multislider-espresso │ ├── allclasses-frame.html │ ├── allclasses-noframe.html │ ├── constant-values.html │ ├── deprecated-list.html │ ├── help-doc.html │ ├── index-all.html │ ├── index.html │ ├── io │ │ └── apptik │ │ │ └── widget │ │ │ ├── MultiSliderActions.html │ │ │ ├── SetThumbValueAction.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ └── package-tree.html │ ├── overview-tree.html │ ├── package-list │ ├── script.js │ └── stylesheet.css │ ├── multislider-uiautomator │ ├── allclasses-frame.html │ ├── allclasses-noframe.html │ ├── constant-values.html │ ├── deprecated-list.html │ ├── help-doc.html │ ├── index-all.html │ ├── index.html │ ├── io │ │ └── apptik │ │ │ └── widget │ │ │ ├── UiMultiSlider.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ └── package-tree.html │ ├── overview-tree.html │ ├── package-list │ ├── script.js │ └── stylesheet.css │ └── multislider │ ├── allclasses-frame.html │ ├── allclasses-noframe.html │ ├── constant-values.html │ ├── deprecated-list.html │ ├── help-doc.html │ ├── index-all.html │ ├── index.html │ ├── io │ └── apptik │ │ └── widget │ │ ├── MultiSlider.OnThumbValueChangeListener.html │ │ ├── MultiSlider.OnTrackingChangeListener.html │ │ ├── MultiSlider.SimpleChangeListener.html │ │ ├── MultiSlider.Thumb.html │ │ ├── MultiSlider.html │ │ ├── Util.html │ │ ├── package-frame.html │ │ ├── package-summary.html │ │ └── package-tree.html │ ├── overview-tree.html │ ├── package-list │ ├── script.js │ └── stylesheet.css ├── example ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ ├── AndroidManifest.xml │ └── java │ │ └── io │ │ └── apptik │ │ └── widget │ │ └── example │ │ └── multislider │ │ └── ExampleTest.java │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── io │ │ └── apptik │ │ └── widget │ │ └── example │ │ └── multislider │ │ ├── MultiSliderFragmentMany.java │ │ ├── MultiSliderFragmentRange.java │ │ ├── MultiSliderFragmentSingle.java │ │ ├── MyActivity.java │ │ └── NavigationDrawerFragment.java │ └── res │ ├── drawable-hdpi │ ├── drawer_shadow.9.png │ ├── example_scrubber_control_disabled_holo.png │ ├── example_scrubber_control_focused_holo.png │ ├── example_scrubber_control_normal_holo.png │ ├── example_scrubber_control_pressed_holo.png │ ├── example_scrubber_primary_holo.9.png │ ├── example_scrubber_secondary_holo.9.png │ ├── example_scrubber_track_holo_light.9.png │ ├── ic_drawer.png │ └── ic_launcher.png │ ├── drawable-mdpi │ ├── drawer_shadow.9.png │ ├── example_scrubber_control_disabled_holo.png │ ├── example_scrubber_control_focused_holo.png │ ├── example_scrubber_control_normal_holo.png │ ├── example_scrubber_control_pressed_holo.png │ ├── example_scrubber_primary_holo.9.png │ ├── example_scrubber_secondary_holo.9.png │ ├── example_scrubber_track_holo_light.9.png │ ├── ic_drawer.png │ └── ic_launcher.png │ ├── drawable-xhdpi │ ├── drawer_shadow.9.png │ ├── example_scrubber_control_disabled_holo.png │ ├── example_scrubber_control_focused_holo.png │ ├── example_scrubber_control_normal_holo.png │ ├── example_scrubber_control_pressed_holo.png │ ├── example_scrubber_primary_holo.9.png │ ├── example_scrubber_secondary_holo.9.png │ ├── example_scrubber_track_holo_light.9.png │ ├── ic_drawer.png │ └── ic_launcher.png │ ├── drawable-xxhdpi │ ├── drawer_shadow.9.png │ ├── example_scrubber_control_disabled_holo.png │ ├── example_scrubber_control_focused_holo.png │ ├── example_scrubber_control_normal_holo.png │ ├── example_scrubber_control_pressed_holo.png │ ├── example_scrubber_primary_holo.9.png │ ├── example_scrubber_secondary_holo.9.png │ ├── example_scrubber_track_holo_light.9.png │ ├── ic_drawer.png │ └── ic_launcher.png │ ├── drawable │ ├── example_bar_shape.xml │ ├── example_scrubber_control_selector_holo_light.xml │ ├── example_scrubber_custom.9.png │ └── example_scrubber_progress_horizontal_holo_light.xml │ ├── layout │ ├── activity_my.xml │ ├── fragment_multi_slider_many.xml │ ├── fragment_multi_slider_range.xml │ ├── fragment_multi_slider_single.xml │ ├── fragment_my.xml │ └── fragment_navigation_drawer.xml │ ├── values-v21 │ └── styles.xml │ ├── values-w820dp │ └── dimens.xml │ └── values │ ├── colors.xml │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── holo-style ├── .gitignore ├── build.gradle ├── gradle.properties ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── res │ ├── drawable-hdpi │ ├── multislider_scrubber_control_disabled_holo.png │ ├── multislider_scrubber_control_focused_holo.png │ ├── multislider_scrubber_control_normal_holo.png │ ├── multislider_scrubber_control_pressed_holo.png │ ├── multislider_scrubber_primary_holo.9.png │ ├── multislider_scrubber_secondary_holo.9.png │ ├── multislider_scrubber_track_holo_light.9.png │ ├── seek_thumb_normal.png │ └── seek_thumb_pressed.png │ ├── drawable-mdpi │ ├── multislider_scrubber_control_disabled_holo.png │ ├── multislider_scrubber_control_focused_holo.png │ ├── multislider_scrubber_control_normal_holo.png │ ├── multislider_scrubber_control_pressed_holo.png │ ├── multislider_scrubber_primary_holo.9.png │ ├── multislider_scrubber_secondary_holo.9.png │ ├── multislider_scrubber_track_holo_light.9.png │ ├── seek_thumb_normal.png │ └── seek_thumb_pressed.png │ ├── drawable-xhdpi │ ├── multislider_scrubber_control_disabled_holo.png │ ├── multislider_scrubber_control_focused_holo.png │ ├── multislider_scrubber_control_normal_holo.png │ ├── multislider_scrubber_control_pressed_holo.png │ ├── multislider_scrubber_primary_holo.9.png │ ├── multislider_scrubber_secondary_holo.9.png │ ├── multislider_scrubber_track_holo_light.9.png │ ├── seek_thumb_normal.png │ └── seek_thumb_pressed.png │ ├── drawable-xxhdpi │ ├── multislider_scrubber_control_disabled_holo.png │ ├── multislider_scrubber_control_focused_holo.png │ ├── multislider_scrubber_control_normal_holo.png │ ├── multislider_scrubber_control_pressed_holo.png │ ├── multislider_scrubber_primary_holo.9.png │ ├── multislider_scrubber_secondary_holo.9.png │ └── multislider_scrubber_track_holo_light.9.png │ ├── drawable │ └── multislider_scrubber_control_selector_holo_light.xml │ ├── values-v21 │ └── styles.xml │ └── values │ └── styles.xml ├── lib ├── .gitignore ├── build.gradle ├── gradle.properties ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── io │ │ └── apptik │ │ └── widget │ │ ├── MultiSlider.java │ │ └── Util.java │ └── res │ ├── anim-v21 │ ├── multislider_thumb_pressed_to_unpressed_thumb_animation.xml │ └── multislider_thumb_unpressed_to_pressed_thumb_0_animation.xml │ ├── color-v21 │ └── control_highlight_material.xml │ ├── color │ └── control_highlight_material.xml │ ├── drawable-hdpi │ ├── multislider_control_off_mtrl_alpha.png │ ├── multislider_control_to_pressed_mtrl_000.png │ ├── multislider_control_to_pressed_mtrl_005.png │ ├── multislider_primary_mtrl_alpha.9.png │ ├── multislider_track_mtrl_alpha.9.png │ ├── scrubber_control_on_mtrl_alpha.png │ └── scrubber_control_on_pressed_mtrl_alpha.png │ ├── drawable-mdpi │ ├── multislider_control_off_mtrl_alpha.png │ ├── multislider_control_to_pressed_mtrl_000.png │ ├── multislider_control_to_pressed_mtrl_005.png │ ├── multislider_primary_mtrl_alpha.9.png │ └── multislider_track_mtrl_alpha.9.png │ ├── drawable-v21 │ ├── control_background_multi_material.xml │ ├── multislider_range_material.xml │ ├── multislider_thumb_material_anim.xml │ ├── multislider_thumb_pressed_to_unpressed.xml │ ├── multislider_thumb_pressed_to_unpressed_animation.xml │ ├── multislider_thumb_unpressed_to_pressed.xml │ ├── multislider_thumb_unpressed_to_pressed_animation.xml │ └── multislider_track_material.xml │ ├── drawable-v23 │ ├── multislider_range_material.xml │ └── multislider_track_material.xml │ ├── drawable-xhdpi │ ├── multislider_control_off_mtrl_alpha.png │ ├── multislider_control_to_pressed_mtrl_000.png │ ├── multislider_control_to_pressed_mtrl_005.png │ ├── multislider_primary_mtrl_alpha.9.png │ └── multislider_track_mtrl_alpha.9.png │ ├── drawable-xxhdpi │ ├── multislider_control_off_mtrl_alpha.png │ ├── multislider_control_to_pressed_mtrl_000.png │ ├── multislider_control_to_pressed_mtrl_005.png │ ├── multislider_primary_mtrl_alpha.9.png │ └── multislider_track_mtrl_alpha.9.png │ ├── drawable-xxxhdpi │ ├── multislider_control_to_pressed_mtrl_000.png │ └── multislider_control_to_pressed_mtrl_005.png │ ├── drawable │ ├── multislider_range_material.xml │ ├── multislider_thumb_material.xml │ ├── multislider_tick_mark_material.xml │ └── multislider_track_material.xml │ └── values │ ├── attrs.xml │ ├── colors.xml │ └── dimens.xml ├── mslider-espresso ├── .gitignore ├── build.gradle ├── gradle.properties ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── io │ └── apptik │ └── widget │ ├── MultiSliderActions.java │ └── SetThumbValueAction.java ├── mslider-uiautomator ├── .gitignore ├── build.gradle ├── gradle.properties ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── io │ └── apptik │ └── widget │ └── UiMultiSlider.java ├── scrshot1.png ├── scrshot2.png ├── scrshot3.png └── settings.gradle /.buildscript/deploy_snapshot.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Deploy a jar, source jar, and javadoc jar to Sonatype's snapshot repo. 4 | # 5 | # Adapted from https://coderwall.com/p/9b_lfq and 6 | # http://benlimmer.com/2013/12/26/automatically-publish-javadoc-to-gh-pages-with-travis-ci/ 7 | 8 | SLUG="apptik/MultiSlider" 9 | JDK="oraclejdk8" 10 | BRANCH="master" 11 | 12 | set -e 13 | 14 | if [ "$TRAVIS_REPO_SLUG" != "$SLUG" ]; then 15 | echo "Skipping snapshot deployment: wrong repository. Expected '$SLUG' but was '$TRAVIS_REPO_SLUG'." 16 | elif [ "$TRAVIS_JDK_VERSION" != "$JDK" ]; then 17 | echo "Skipping snapshot deployment: wrong JDK. Expected '$JDK' but was '$TRAVIS_JDK_VERSION'." 18 | elif [ "$TRAVIS_PULL_REQUEST" != "false" ]; then 19 | echo "Skipping snapshot deployment: was pull request." 20 | elif [ "$TRAVIS_BRANCH" != "$BRANCH" ]; then 21 | echo "Skipping snapshot deployment: wrong branch. Expected '$BRANCH' but was '$TRAVIS_BRANCH'." 22 | else 23 | echo "Deploying snapshot..." 24 | ./gradlew uploadArchives 25 | echo "Snapshot deployed!" 26 | fi 27 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | /local.properties 3 | /.idea 4 | .DS_Store 5 | /build 6 | *.iml 7 | 8 | *.class 9 | 10 | # Mobile Tools for Java (J2ME) 11 | .mtj.tmp/ 12 | 13 | # Package Files # 14 | *.jar 15 | *.war 16 | *.ear 17 | 18 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 19 | hs_err_pid* 20 | 21 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: android 2 | 3 | jdk: 4 | - oraclejdk8 5 | 6 | android: 7 | components: 8 | - tools 9 | - build-tools-29.0.2 10 | - android-29 11 | - extra-android-m2repository 12 | - sys-img-armeabi-v7a-android-23 13 | 14 | script: 15 | - ./gradlew clean ":$MODULE:build" 16 | 17 | after_success: 18 | - .buildscript/deploy_snapshot.sh 19 | 20 | env: 21 | matrix: 22 | - MODULE=lib 23 | - MODULE=mslider-espresso 24 | - MODULE=mslider-uiautomator 25 | - MODULE=holo-style 26 | 27 | notifications: 28 | email: true 29 | 30 | before_install: 31 | - chmod +x gradlew 32 | - yes | sdkmanager "platforms;android-29" 33 | 34 | sudo: false 35 | 36 | cache: 37 | directories: 38 | - $HOME/.gradle 39 | -------------------------------------------------------------------------------- /CHLOG.md: -------------------------------------------------------------------------------- 1 | Change Log 2 | ========== 3 | 4 | 5 | NEXT Version 1.3.1 *(FUTURE-2017)* 6 | ---------------------------------- 7 | 8 | 9 | NEXT Version 1.3 *(14-12-2016)* 10 | ---------------------------------- 11 | 12 | * New: Add new method setThumbNumber() #24 13 | * Fix: For RTL languages/layouts track does not mirror #35 14 | * New: add "add/removeThumb" method #25 15 | * New: add thumb enabled property #30 16 | * New: support for material design #11 17 | * New: enable Accessibility support #13 18 | * New: Add Callbacks when start stop traking 19 | * Fix: when in scrollcontainer #27 20 | 21 | Version 1.2 *(30-09-2015)* 22 | ---------------------------------- 23 | 24 | * New: Add Slider tinting (colors customization) -------------------------------------------------------------------------------- /art/multislider.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/art/multislider.gif -------------------------------------------------------------------------------- /art/multislider.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/art/multislider.mp4 -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | repositories { 5 | google() 6 | jcenter() 7 | mavenCentral() 8 | } 9 | dependencies { 10 | classpath 'com.android.tools.build:gradle:3.5.0' 11 | 12 | // NOTE: Do not place your application dependencies here; they belong 13 | // in the individual module build.gradle files 14 | } 15 | } 16 | 17 | allprojects { 18 | group = GROUP 19 | version = VERSION_NAME 20 | repositories { 21 | google() 22 | jcenter() 23 | mavenCentral() 24 | } 25 | } 26 | 27 | ext { 28 | minSdkVersion = 14 29 | compileSdkVersion = 29 30 | buildToolsVersion = '29.0.2' 31 | 32 | supportAnnotations = "androidx.annotation:annotation:1.1.0" 33 | supportAppCompat = "androidx.appcompat:appcompat:1.1.0" 34 | supportCardView = "androidx.cardview:cardview:1.0.0" 35 | supportCompat = "androidx.core:core:1.2.0-alpha04" 36 | supportDesign = "com.google.android.material:material:1.1.0-alpha10" 37 | supportRecyclerView = "androidx.recyclerview:recyclerview:1.1.0-beta04" 38 | 39 | supportTestRunner = "androidx.test:runner:1.3.0-alpha02" 40 | supportTestRules = "androidx.test:rules:1.3.0-alpha02" 41 | supportTestEspresso = "androidx.test.espresso:espresso-core:3.3.0-alpha02" 42 | supportTestEspressoContrib = "androidx.test.espresso:espresso-contrib:3.3.0-alpha02" 43 | supportTestUiautomator = "androidx.test.uiautomator:uiautomator:2.2.0" 44 | 45 | junit = "androidx.test.ext:junit:1.1.2-alpha02" 46 | 47 | assertjCore1 = 'org.assertj:assertj-core:1.7.1' 48 | assertjCore2 = 'org.assertj:assertj-core:2.9.1' 49 | assertjCore3 = 'org.assertj:assertj-core:3.12.2' 50 | mockitoCore = 'org.mockito:mockito-core:2.25.1' 51 | } 52 | -------------------------------------------------------------------------------- /captures/io.apptik.widget.example.multislider_2016.11.23_10.14.li: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/captures/io.apptik.widget.example.multislider_2016.11.23_10.14.li -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | 2 | title: MultiSlider 3 | email: a@apptik.io 4 | description: > # this means to ignore newlines until "baseurl:" 5 | MultiSlider is multifunctional and multi-thumb custom view component for Android. 6 | It Can be used as a normal Android seekbar, a range bar and multi-thumb bar. 7 | MultiSlider is extremely easy to use while still very flexible and customizable. 8 | baseurl: "/MultiSlider" 9 | url: "http://apptik.io" 10 | twitter_username: apptikProj 11 | github_username: apptik 12 | 13 | # Build settings 14 | markdown: kramdown 15 | theme: minima 16 | -------------------------------------------------------------------------------- /docs/css/main.scss: -------------------------------------------------------------------------------- 1 | --- 2 | # Only the main Sass file needs front matter (the dashes are enough) 3 | --- 4 | @charset "utf-8"; 5 | 6 | // Our variables 7 | $base-font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 8 | $base-font-size: 16px; 9 | $base-font-weight: 400; 10 | $small-font-size: $base-font-size * 0.875; 11 | $base-line-height: 1.5; 12 | 13 | $spacing-unit: 30px; 14 | 15 | $text-color: #111; 16 | $background-color: #fdfdfd; 17 | $brand-color: #2a7ae2; 18 | 19 | $grey-color: #828282; 20 | $grey-color-light: lighten($grey-color, 40%); 21 | $grey-color-dark: darken($grey-color, 25%); 22 | 23 | // Width of the content area 24 | $content-width: 800px; 25 | 26 | $on-palm: 600px; 27 | $on-laptop: 800px; 28 | 29 | // Minima also includes a mixin for defining media queries. 30 | // Use media queries like this: 31 | // @include media-query($on-palm) { 32 | // .wrapper { 33 | // padding-right: $spacing-unit / 2; 34 | // padding-left: $spacing-unit / 2; 35 | // } 36 | // } 37 | 38 | // Import partials from the `minima` theme. 39 | @import "minima"; 40 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |
6 | 7 |

JavaDocs

8 | 9 | {% for file in site.static_files %} 10 | {% if file.extname == ".html" and file.path contains 'index.html' and file.path contains '/javadoc/' %} 11 |
12 | 13 | {% assign a = file.path | split: '/' %} 14 | {{ a[2] }} 15 | 16 |
17 | {% endif %} 18 | {% endfor %} 19 | 20 | 21 |
22 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider-espresso/allclasses-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | All Classes (mslider-espresso 1.3 API) 7 | 8 | 9 | 10 | 11 | 12 |

All Classes

13 |
14 | 18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider-espresso/allclasses-noframe.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | All Classes (mslider-espresso 1.3 API) 7 | 8 | 9 | 10 | 11 | 12 |

All Classes

13 |
14 | 18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider-espresso/constant-values.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Constant Field Values (mslider-espresso 1.3 API) 7 | 8 | 9 | 10 | 11 | 12 | 22 | 25 | 26 |
27 | 28 | 29 |
Skip navigation links
30 | 31 | 32 | 33 | 41 |
42 | 69 | 70 |
71 |

Constant Field Values

72 |

Contents

73 |
74 | 75 |
76 | 77 | 78 |
Skip navigation links
79 | 80 | 81 | 82 | 90 |
91 | 118 | 119 | 120 | 121 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider-espresso/deprecated-list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Deprecated List (mslider-espresso 1.3 API) 7 | 8 | 9 | 10 | 11 | 12 | 22 | 25 | 26 |
27 | 28 | 29 |
Skip navigation links
30 | 31 | 32 | 33 | 41 |
42 | 69 | 70 |
71 |

Deprecated API

72 |

Contents

73 |
74 | 75 |
76 | 77 | 78 |
Skip navigation links
79 | 80 | 81 | 82 | 90 |
91 | 118 | 119 | 120 | 121 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider-espresso/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | mslider-espresso 1.3 API 7 | 60 | 61 | 62 | 63 | 64 | 65 | <noscript> 66 | <div>JavaScript is disabled on your browser.</div> 67 | </noscript> 68 | <h2>Frame Alert</h2> 69 | <p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="io/apptik/widget/package-summary.html">Non-frame version</a>.</p> 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider-espresso/io/apptik/widget/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | io.apptik.widget (mslider-espresso 1.3 API) 7 | 8 | 9 | 10 | 11 | 12 |

io.apptik.widget

13 |
14 |

Classes

15 | 19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider-espresso/io/apptik/widget/package-summary.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | io.apptik.widget (mslider-espresso 1.3 API) 7 | 8 | 9 | 10 | 11 | 12 | 22 | 25 | 26 |
27 | 28 | 29 |
Skip navigation links
30 | 31 | 32 | 33 | 41 |
42 | 69 | 70 |
71 |

Package io.apptik.widget

72 |
73 |
74 | 95 |
96 | 97 |
98 | 99 | 100 |
Skip navigation links
101 | 102 | 103 | 104 | 112 |
113 | 140 | 141 | 142 | 143 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider-espresso/io/apptik/widget/package-tree.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | io.apptik.widget Class Hierarchy (mslider-espresso 1.3 API) 7 | 8 | 9 | 10 | 11 | 12 | 22 | 25 | 26 |
27 | 28 | 29 |
Skip navigation links
30 | 31 | 32 | 33 | 41 |
42 | 69 | 70 |
71 |

Hierarchy For Package io.apptik.widget

72 |
73 |
74 |

Class Hierarchy

75 | 83 |
84 | 85 |
86 | 87 | 88 |
Skip navigation links
89 | 90 | 91 | 92 | 100 |
101 | 128 | 129 | 130 | 131 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider-espresso/overview-tree.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Class Hierarchy (mslider-espresso 1.3 API) 7 | 8 | 9 | 10 | 11 | 12 | 22 | 25 | 26 |
27 | 28 | 29 |
Skip navigation links
30 | 31 | 32 | 33 | 41 |
42 | 69 | 70 |
71 |

Hierarchy For All Packages

72 | Package Hierarchies: 73 | 76 |
77 |
78 |

Class Hierarchy

79 | 87 |
88 | 89 |
90 | 91 | 92 |
Skip navigation links
93 | 94 | 95 | 96 | 104 |
105 | 132 | 133 | 134 | 135 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider-espresso/package-list: -------------------------------------------------------------------------------- 1 | io.apptik.widget 2 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider-espresso/script.js: -------------------------------------------------------------------------------- 1 | function show(type) 2 | { 3 | count = 0; 4 | for (var key in methods) { 5 | var row = document.getElementById(key); 6 | if ((methods[key] & type) != 0) { 7 | row.style.display = ''; 8 | row.className = (count++ % 2) ? rowColor : altColor; 9 | } 10 | else 11 | row.style.display = 'none'; 12 | } 13 | updateTabs(type); 14 | } 15 | 16 | function updateTabs(type) 17 | { 18 | for (var value in tabs) { 19 | var sNode = document.getElementById(tabs[value][0]); 20 | var spanNode = sNode.firstChild; 21 | if (value == type) { 22 | sNode.className = activeTableTab; 23 | spanNode.innerHTML = tabs[value][1]; 24 | } 25 | else { 26 | sNode.className = tableTab; 27 | spanNode.innerHTML = "" + tabs[value][1] + ""; 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider-uiautomator/allclasses-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | All Classes (mslider-uiautomator 1.3 API) 7 | 8 | 9 | 10 | 11 | 12 |

All Classes

13 |
14 | 17 |
18 | 19 | 20 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider-uiautomator/allclasses-noframe.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | All Classes (mslider-uiautomator 1.3 API) 7 | 8 | 9 | 10 | 11 | 12 |

All Classes

13 |
14 | 17 |
18 | 19 | 20 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider-uiautomator/constant-values.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Constant Field Values (mslider-uiautomator 1.3 API) 7 | 8 | 9 | 10 | 11 | 12 | 22 | 25 | 26 |
27 | 28 | 29 |
Skip navigation links
30 | 31 | 32 | 33 | 41 |
42 | 69 | 70 |
71 |

Constant Field Values

72 |

Contents

73 |
74 | 75 |
76 | 77 | 78 |
Skip navigation links
79 | 80 | 81 | 82 | 90 |
91 | 118 | 119 | 120 | 121 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider-uiautomator/deprecated-list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Deprecated List (mslider-uiautomator 1.3 API) 7 | 8 | 9 | 10 | 11 | 12 | 22 | 25 | 26 |
27 | 28 | 29 |
Skip navigation links
30 | 31 | 32 | 33 | 41 |
42 | 69 | 70 |
71 |

Deprecated API

72 |

Contents

73 |
74 | 75 |
76 | 77 | 78 |
Skip navigation links
79 | 80 | 81 | 82 | 90 |
91 | 118 | 119 | 120 | 121 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider-uiautomator/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | mslider-uiautomator 1.3 API 7 | 60 | 61 | 62 | 63 | 64 | 65 | <noscript> 66 | <div>JavaScript is disabled on your browser.</div> 67 | </noscript> 68 | <h2>Frame Alert</h2> 69 | <p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="io/apptik/widget/package-summary.html">Non-frame version</a>.</p> 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider-uiautomator/io/apptik/widget/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | io.apptik.widget (mslider-uiautomator 1.3 API) 7 | 8 | 9 | 10 | 11 | 12 |

io.apptik.widget

13 |
14 |

Classes

15 | 18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider-uiautomator/io/apptik/widget/package-summary.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | io.apptik.widget (mslider-uiautomator 1.3 API) 7 | 8 | 9 | 10 | 11 | 12 | 22 | 25 | 26 |
27 | 28 | 29 |
Skip navigation links
30 | 31 | 32 | 33 | 41 |
42 | 69 | 70 |
71 |

Package io.apptik.widget

72 |
73 |
74 | 91 |
92 | 93 |
94 | 95 | 96 |
Skip navigation links
97 | 98 | 99 | 100 | 108 |
109 | 136 | 137 | 138 | 139 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider-uiautomator/io/apptik/widget/package-tree.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | io.apptik.widget Class Hierarchy (mslider-uiautomator 1.3 API) 7 | 8 | 9 | 10 | 11 | 12 | 22 | 25 | 26 |
27 | 28 | 29 |
Skip navigation links
30 | 31 | 32 | 33 | 41 |
42 | 69 | 70 |
71 |

Hierarchy For Package io.apptik.widget

72 |
73 |
74 |

Class Hierarchy

75 | 86 |
87 | 88 |
89 | 90 | 91 |
Skip navigation links
92 | 93 | 94 | 95 | 103 |
104 | 131 | 132 | 133 | 134 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider-uiautomator/overview-tree.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Class Hierarchy (mslider-uiautomator 1.3 API) 7 | 8 | 9 | 10 | 11 | 12 | 22 | 25 | 26 |
27 | 28 | 29 |
Skip navigation links
30 | 31 | 32 | 33 | 41 |
42 | 69 | 70 |
71 |

Hierarchy For All Packages

72 | Package Hierarchies: 73 | 76 |
77 |
78 |

Class Hierarchy

79 | 90 |
91 | 92 |
93 | 94 | 95 |
Skip navigation links
96 | 97 | 98 | 99 | 107 |
108 | 135 | 136 | 137 | 138 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider-uiautomator/package-list: -------------------------------------------------------------------------------- 1 | io.apptik.widget 2 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider-uiautomator/script.js: -------------------------------------------------------------------------------- 1 | function show(type) 2 | { 3 | count = 0; 4 | for (var key in methods) { 5 | var row = document.getElementById(key); 6 | if ((methods[key] & type) != 0) { 7 | row.style.display = ''; 8 | row.className = (count++ % 2) ? rowColor : altColor; 9 | } 10 | else 11 | row.style.display = 'none'; 12 | } 13 | updateTabs(type); 14 | } 15 | 16 | function updateTabs(type) 17 | { 18 | for (var value in tabs) { 19 | var sNode = document.getElementById(tabs[value][0]); 20 | var spanNode = sNode.firstChild; 21 | if (value == type) { 22 | sNode.className = activeTableTab; 23 | spanNode.innerHTML = tabs[value][1]; 24 | } 25 | else { 26 | sNode.className = tableTab; 27 | spanNode.innerHTML = "" + tabs[value][1] + ""; 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider/allclasses-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | All Classes (lib 1.3 API) 7 | 8 | 9 | 10 | 11 | 12 |

All Classes

13 |
14 | 21 |
22 | 23 | 24 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider/allclasses-noframe.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | All Classes (lib 1.3 API) 7 | 8 | 9 | 10 | 11 | 12 |

All Classes

13 |
14 | 21 |
22 | 23 | 24 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider/constant-values.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Constant Field Values (lib 1.3 API) 7 | 8 | 9 | 10 | 11 | 12 | 22 | 25 | 26 |
27 | 28 | 29 |
Skip navigation links
30 | 31 | 32 | 33 | 41 |
42 | 69 | 70 |
71 |

Constant Field Values

72 |

Contents

73 |
74 | 75 |
76 | 77 | 78 |
Skip navigation links
79 | 80 | 81 | 82 | 90 |
91 | 118 | 119 | 120 | 121 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider/deprecated-list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Deprecated List (lib 1.3 API) 7 | 8 | 9 | 10 | 11 | 12 | 22 | 25 | 26 |
27 | 28 | 29 |
Skip navigation links
30 | 31 | 32 | 33 | 41 |
42 | 69 | 70 |
71 |

Deprecated API

72 |

Contents

73 |
74 | 75 |
76 | 77 | 78 |
Skip navigation links
79 | 80 | 81 | 82 | 90 |
91 | 118 | 119 | 120 | 121 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | lib 1.3 API 7 | 60 | 61 | 62 | 63 | 64 | 65 | <noscript> 66 | <div>JavaScript is disabled on your browser.</div> 67 | </noscript> 68 | <h2>Frame Alert</h2> 69 | <p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="io/apptik/widget/package-summary.html">Non-frame version</a>.</p> 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider/io/apptik/widget/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | io.apptik.widget (lib 1.3 API) 7 | 8 | 9 | 10 | 11 | 12 |

io.apptik.widget

13 |
14 |

Interfaces

15 | 19 |

Classes

20 | 25 |
26 | 27 | 28 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider/overview-tree.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Class Hierarchy (lib 1.3 API) 7 | 8 | 9 | 10 | 11 | 12 | 22 | 25 | 26 |
27 | 28 | 29 |
Skip navigation links
30 | 31 | 32 | 33 | 41 |
42 | 69 | 70 |
71 |

Hierarchy For All Packages

72 | Package Hierarchies: 73 | 76 |
77 |
78 |

Class Hierarchy

79 | 93 |

Interface Hierarchy

94 | 98 |
99 | 100 |
101 | 102 | 103 |
Skip navigation links
104 | 105 | 106 | 107 | 115 |
116 | 143 | 144 | 145 | 146 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider/package-list: -------------------------------------------------------------------------------- 1 | io.apptik.widget 2 | -------------------------------------------------------------------------------- /docs/javadoc/1.3/multislider/script.js: -------------------------------------------------------------------------------- 1 | function show(type) 2 | { 3 | count = 0; 4 | for (var key in methods) { 5 | var row = document.getElementById(key); 6 | if ((methods[key] & type) != 0) { 7 | row.style.display = ''; 8 | row.className = (count++ % 2) ? rowColor : altColor; 9 | } 10 | else 11 | row.style.display = 'none'; 12 | } 13 | updateTabs(type); 14 | } 15 | 16 | function updateTabs(type) 17 | { 18 | for (var value in tabs) { 19 | var sNode = document.getElementById(tabs[value][0]); 20 | var spanNode = sNode.firstChild; 21 | if (value == type) { 22 | sNode.className = activeTableTab; 23 | spanNode.innerHTML = tabs[value][1]; 24 | } 25 | else { 26 | sNode.className = tableTab; 27 | spanNode.innerHTML = "" + tabs[value][1] + ""; 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /example/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion rootProject.ext.compileSdkVersion 5 | buildToolsVersion rootProject.ext.buildToolsVersion 6 | 7 | defaultConfig { 8 | applicationId "io.apptik.widget.example.multislider" 9 | minSdkVersion rootProject.ext.minSdkVersion 10 | targetSdkVersion rootProject.ext.compileSdkVersion 11 | versionCode 1 12 | versionName "1.0" 13 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 14 | } 15 | buildTypes { 16 | release { 17 | minifyEnabled false 18 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 19 | } 20 | } 21 | android { 22 | lintOptions { 23 | abortOnError false 24 | } 25 | } 26 | } 27 | 28 | dependencies { 29 | implementation rootProject.ext.supportAppCompat 30 | implementation project(':lib') 31 | implementation project(':holo-style') 32 | implementation project(':mslider-espresso') 33 | implementation project(':mslider-uiautomator') 34 | androidTestImplementation rootProject.ext.junit 35 | androidTestImplementation rootProject.ext.supportTestUiautomator 36 | androidTestImplementation rootProject.ext.supportAnnotations 37 | androidTestImplementation rootProject.ext.supportTestRunner 38 | androidTestImplementation rootProject.ext.supportTestRules 39 | androidTestImplementation rootProject.ext.supportTestEspresso 40 | } 41 | -------------------------------------------------------------------------------- /example/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /home/djodjo/android-sdks/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /example/src/androidTest/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/src/androidTest/java/io/apptik/widget/example/multislider/ExampleTest.java: -------------------------------------------------------------------------------- 1 | package io.apptik.widget.example.multislider; 2 | 3 | import org.junit.Before; 4 | import org.junit.Rule; 5 | import org.junit.Test; 6 | import org.junit.runner.RunWith; 7 | 8 | import androidx.test.espresso.matcher.ViewMatchers; 9 | import androidx.test.ext.junit.runners.AndroidJUnit4; 10 | import androidx.test.filters.SdkSuppress; 11 | import androidx.test.platform.app.InstrumentationRegistry; 12 | import androidx.test.rule.ActivityTestRule; 13 | import androidx.test.uiautomator.UiCollection; 14 | import androidx.test.uiautomator.UiDevice; 15 | import androidx.test.uiautomator.UiSelector; 16 | import io.apptik.widget.MultiSlider; 17 | import io.apptik.widget.UiMultiSlider; 18 | 19 | import static androidx.test.espresso.Espresso.onView; 20 | import static androidx.test.espresso.action.ViewActions.click; 21 | import static io.apptik.widget.MultiSliderActions.moveThumbBackward; 22 | import static io.apptik.widget.MultiSliderActions.moveThumbForward; 23 | import static io.apptik.widget.MultiSliderActions.setThumbValue; 24 | 25 | @RunWith(AndroidJUnit4.class) 26 | @SdkSuppress(minSdkVersion = 18) 27 | public class ExampleTest { 28 | 29 | @Rule 30 | public ActivityTestRule mActivityRule = new ActivityTestRule<>( 31 | MyActivity.class); 32 | 33 | private UiDevice mDevice; 34 | 35 | @Before 36 | public void setUp() { 37 | mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); 38 | } 39 | 40 | @Test 41 | public void moveSingle() throws Exception { 42 | UiMultiSlider slider = new UiMultiSlider(new UiCollection(new UiSelector() 43 | .className(MultiSlider.class) 44 | .resourceIdMatches(".*multiSlider2.*")) 45 | .getChild(new UiSelector().textStartsWith("thumb 0:"))); 46 | 47 | for (int i = 0; i < 15; i++) { 48 | slider.moveThumbForward(); 49 | } 50 | slider.setThumbValue(10); 51 | for (int i = 0; i < 10; i++) { 52 | slider.moveThumbBackward(); 53 | } 54 | slider.moveThumbBackward(); 55 | 56 | for (int i = 0; i < 90; i++) { 57 | onView(ViewMatchers.withId(R.id.multiSlider3)) 58 | .perform(moveThumbForward(0)); 59 | } 60 | onView(ViewMatchers.withId(R.id.multiSlider3)) 61 | .perform(setThumbValue(0, 50)); 62 | for (int i = 0; i < 15; i++) { 63 | onView(ViewMatchers.withId(R.id.multiSlider3)) 64 | .perform(moveThumbBackward(0)); 65 | } 66 | onView(ViewMatchers.withId(R.id.multiSlider3)) 67 | .perform(click()); 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /example/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 15 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /example/src/main/java/io/apptik/widget/example/multislider/MultiSliderFragmentMany.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2014 Kalin Maldzhanski 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.apptik.widget.example.multislider; 18 | 19 | 20 | import android.app.Fragment; 21 | import android.graphics.drawable.ColorDrawable; 22 | import android.os.Bundle; 23 | import android.view.LayoutInflater; 24 | import android.view.View; 25 | import android.view.ViewGroup; 26 | import android.widget.TextView; 27 | 28 | import java.util.ArrayList; 29 | 30 | import io.apptik.widget.MultiSlider; 31 | 32 | 33 | public class MultiSliderFragmentMany extends Fragment { 34 | 35 | 36 | public MultiSliderFragmentMany() { 37 | // Required empty public constructor 38 | } 39 | 40 | @Override 41 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 42 | View v = inflater.inflate(R.layout.fragment_multi_slider_many, container, false); 43 | final ArrayList vals = new ArrayList(); 44 | vals.add((TextView) v.findViewById(R.id.value1)); 45 | vals.add((TextView) v.findViewById(R.id.value2)); 46 | vals.add((TextView) v.findViewById(R.id.value3)); 47 | vals.add((TextView) v.findViewById(R.id.value4)); 48 | vals.add((TextView) v.findViewById(R.id.value5)); 49 | vals.add((TextView) v.findViewById(R.id.value6)); 50 | vals.add((TextView) v.findViewById(R.id.value7)); 51 | 52 | MultiSlider multiSlider = (MultiSlider)v.findViewById(R.id.multiSlider); 53 | 54 | for(int i=0;i<7;i++) { 55 | vals.get(i).setText(String.valueOf(multiSlider.getThumb(i).getValue())); 56 | } 57 | 58 | multiSlider.setOnThumbValueChangeListener(new MultiSlider.SimpleChangeListener() { 59 | @Override 60 | public void onValueChanged(MultiSlider multiSlider, MultiSlider.Thumb thumb, int thumbIndex, int value) { 61 | vals.get(thumbIndex).setText(String.valueOf(value)); 62 | } 63 | 64 | }); 65 | 66 | //different ranges example 67 | multiSlider.getThumb(1).setRange( new ColorDrawable(0xFF000000)); 68 | multiSlider.getThumb(2).setRange( new ColorDrawable(0xFFFF0000)); 69 | multiSlider.getThumb(3).setRange( new ColorDrawable(0xFF00FF00)); 70 | multiSlider.getThumb(4).setRange( new ColorDrawable(0xFF0000FF)); 71 | multiSlider.getThumb(5).setRange( new ColorDrawable(0xFFFFFFFF)); 72 | multiSlider.getThumb(6).setRange( new ColorDrawable(0x66FF0000)); 73 | 74 | return v; 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /example/src/main/java/io/apptik/widget/example/multislider/MultiSliderFragmentSingle.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2014 Kalin Maldzhanski 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.apptik.widget.example.multislider; 18 | 19 | 20 | import android.app.Fragment; 21 | import android.os.Bundle; 22 | import android.view.LayoutInflater; 23 | import android.view.View; 24 | import android.view.ViewGroup; 25 | import android.widget.TextView; 26 | 27 | import io.apptik.widget.MultiSlider; 28 | 29 | 30 | public class MultiSliderFragmentSingle extends Fragment { 31 | 32 | 33 | public MultiSliderFragmentSingle() { 34 | // Required empty public constructor 35 | } 36 | 37 | @Override 38 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 39 | View v = inflater.inflate(R.layout.fragment_multi_slider_single, container, false); 40 | final TextView min1 = (TextView) v.findViewById(R.id.minValue1); 41 | final TextView min2 = (TextView) v.findViewById(R.id.minValue2); 42 | final TextView min3 = (TextView) v.findViewById(R.id.minValue3); 43 | final TextView min4 = (TextView) v.findViewById(R.id.minValue4); 44 | final TextView min5 = (TextView) v.findViewById(R.id.minValue5); 45 | final TextView min6 = (TextView) v.findViewById(R.id.minValue6); 46 | final TextView min7 = (TextView) v.findViewById(R.id.minValue7); 47 | 48 | MultiSlider multiSlider1 = (MultiSlider) v.findViewById(R.id.multiSlider1); 49 | MultiSlider multiSlider2 = (MultiSlider) v.findViewById(R.id.multiSlider2); 50 | MultiSlider multiSlider3 = (MultiSlider) v.findViewById(R.id.multiSlider3); 51 | MultiSlider multiSlider4 = (MultiSlider) v.findViewById(R.id.multiSlider4); 52 | multiSlider4.getThumb(1).setInvisibleThumb(true); 53 | MultiSlider multiSlider5 = (MultiSlider) v.findViewById(R.id.multiSlider5); 54 | MultiSlider multiSlider6 = (MultiSlider) v.findViewById(R.id.multiSlider6); 55 | MultiSlider multiSlider7 = (MultiSlider) v.findViewById(R.id.multiSlider7); 56 | 57 | min1.setText(String.valueOf(multiSlider1.getThumb(0).getValue())); 58 | min2.setText(String.valueOf(multiSlider2.getThumb(0).getValue())); 59 | min3.setText(String.valueOf(multiSlider3.getThumb(0).getValue())); 60 | min4.setText(String.valueOf(multiSlider4.getThumb(0).getValue())); 61 | min5.setText(String.valueOf(multiSlider5.getThumb(0).getValue())); 62 | min6.setText(String.valueOf(multiSlider6.getThumb(0).getValue())); 63 | min7.setText(String.valueOf(multiSlider7.getThumb(0).getValue())); 64 | 65 | multiSlider1.setOnThumbValueChangeListener(new MultiSlider.SimpleChangeListener() { 66 | @Override 67 | public void onValueChanged(MultiSlider multiSlider, MultiSlider.Thumb thumb, int thumbIndex, int value) { 68 | min1.setText(String.valueOf(value)); 69 | } 70 | }); 71 | 72 | 73 | multiSlider2.setOnThumbValueChangeListener(new MultiSlider.SimpleChangeListener() { 74 | @Override 75 | public void onValueChanged(MultiSlider multiSlider, MultiSlider.Thumb thumb, int thumbIndex, int value) { 76 | min2.setText(String.valueOf(value)); 77 | } 78 | }); 79 | 80 | multiSlider3.setOnThumbValueChangeListener(new MultiSlider.SimpleChangeListener() { 81 | @Override 82 | public void onValueChanged(MultiSlider multiSlider, MultiSlider.Thumb thumb, int thumbIndex, int value) { 83 | min3.setText(String.valueOf(value)); 84 | } 85 | }); 86 | 87 | multiSlider4.setOnThumbValueChangeListener(new MultiSlider.SimpleChangeListener() { 88 | @Override 89 | public void onValueChanged(MultiSlider multiSlider, MultiSlider.Thumb thumb, int thumbIndex, int value) { 90 | min4.setText(String.valueOf(value)); 91 | } 92 | }); 93 | 94 | multiSlider5.setOnThumbValueChangeListener(new MultiSlider.SimpleChangeListener() { 95 | @Override 96 | public void onValueChanged(MultiSlider multiSlider, MultiSlider.Thumb thumb, int thumbIndex, int value) { 97 | min5.setText(String.valueOf(value)); 98 | } 99 | }); 100 | 101 | multiSlider6.setOnThumbValueChangeListener(new MultiSlider.SimpleChangeListener() { 102 | @Override 103 | public void onValueChanged(MultiSlider multiSlider, MultiSlider.Thumb thumb, int thumbIndex, int value) { 104 | min6.setText(String.valueOf(value)); 105 | } 106 | }); 107 | 108 | multiSlider7.setOnThumbValueChangeListener(new MultiSlider.SimpleChangeListener() { 109 | @Override 110 | public void onValueChanged(MultiSlider multiSlider, MultiSlider.Thumb thumb, int thumbIndex, int value) { 111 | min7.setText(String.valueOf(value)); 112 | } 113 | }); 114 | 115 | return v; 116 | } 117 | } 118 | -------------------------------------------------------------------------------- /example/src/main/java/io/apptik/widget/example/multislider/MyActivity.java: -------------------------------------------------------------------------------- 1 | package io.apptik.widget.example.multislider; 2 | 3 | import android.app.ActionBar; 4 | import android.app.Activity; 5 | import android.app.Fragment; 6 | import android.app.FragmentManager; 7 | import android.os.Bundle; 8 | import android.view.LayoutInflater; 9 | import android.view.Menu; 10 | import android.view.MenuItem; 11 | import android.view.View; 12 | import android.view.ViewGroup; 13 | 14 | import androidx.drawerlayout.widget.DrawerLayout; 15 | 16 | public class MyActivity extends Activity 17 | implements NavigationDrawerFragment.NavigationDrawerCallbacks { 18 | 19 | /** 20 | * Fragment managing the behaviors, interactions and presentation of the navigation drawer. 21 | */ 22 | private NavigationDrawerFragment mNavigationDrawerFragment; 23 | 24 | /** 25 | * Used to store the last screen title. For use in {@link #restoreActionBar()}. 26 | */ 27 | private CharSequence mTitle; 28 | 29 | @Override 30 | protected void onCreate(Bundle savedInstanceState) { 31 | super.onCreate(savedInstanceState); 32 | setContentView(R.layout.activity_my); 33 | 34 | mNavigationDrawerFragment = (NavigationDrawerFragment) 35 | getFragmentManager().findFragmentById(R.id.navigation_drawer); 36 | mTitle = getTitle(); 37 | 38 | // Set up the drawer. 39 | mNavigationDrawerFragment.setUp( 40 | R.id.navigation_drawer, 41 | (DrawerLayout) findViewById(R.id.drawer_layout)); 42 | } 43 | 44 | @Override 45 | public void onNavigationDrawerItemSelected(int position) { 46 | // update the main content by replacing fragments 47 | FragmentManager fragmentManager = getFragmentManager(); 48 | fragmentManager.beginTransaction() 49 | .replace(R.id.container, PlaceholderFragment.newInstance(position + 1)) 50 | .commit(); 51 | } 52 | 53 | public void onSectionAttached(int number) { 54 | switch (number) { 55 | case 1: 56 | mTitle = getString(R.string.title_section1); 57 | break; 58 | case 2: 59 | mTitle = getString(R.string.title_section2); 60 | break; 61 | case 3: 62 | mTitle = getString(R.string.title_section3); 63 | break; 64 | } 65 | } 66 | 67 | public void restoreActionBar() { 68 | ActionBar actionBar = getActionBar(); 69 | actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 70 | actionBar.setDisplayShowTitleEnabled(true); 71 | actionBar.setTitle(mTitle); 72 | } 73 | 74 | 75 | @Override 76 | public boolean onCreateOptionsMenu(Menu menu) { 77 | if (!mNavigationDrawerFragment.isDrawerOpen()) { 78 | // Only show items in the action bar relevant to this screen 79 | // if the drawer is not showing. Otherwise, let the drawer 80 | // decide what to show in the action bar. 81 | 82 | restoreActionBar(); 83 | return true; 84 | } 85 | return super.onCreateOptionsMenu(menu); 86 | } 87 | 88 | @Override 89 | public boolean onOptionsItemSelected(MenuItem item) { 90 | return super.onOptionsItemSelected(item); 91 | } 92 | 93 | /** 94 | * A placeholder fragment containing a simple view. 95 | */ 96 | public static class PlaceholderFragment extends Fragment { 97 | /** 98 | * The fragment argument representing the section number for this 99 | * fragment. 100 | */ 101 | private static final String ARG_SECTION_NUMBER = "section_number"; 102 | 103 | /** 104 | * Returns a new instance of this fragment for the given section 105 | * number. 106 | */ 107 | public static PlaceholderFragment newInstance(int sectionNumber) { 108 | PlaceholderFragment fragment = new PlaceholderFragment(); 109 | Bundle args = new Bundle(); 110 | args.putInt(ARG_SECTION_NUMBER, sectionNumber); 111 | fragment.setArguments(args); 112 | return fragment; 113 | } 114 | 115 | public PlaceholderFragment() { 116 | } 117 | 118 | @Override 119 | public View onCreateView(LayoutInflater inflater, ViewGroup container, 120 | Bundle savedInstanceState) { 121 | View rootView = inflater.inflate(R.layout.fragment_my, container, false); 122 | return rootView; 123 | } 124 | 125 | @Override 126 | public void onAttach(Activity activity) { 127 | super.onAttach(activity); 128 | ((MyActivity) activity).onSectionAttached( 129 | getArguments().getInt(ARG_SECTION_NUMBER)); 130 | 131 | switch (getArguments().getInt(ARG_SECTION_NUMBER)) { 132 | case 1:getFragmentManager().beginTransaction().add(R.id.inner_container, new MultiSliderFragmentSingle()).commit(); break; 133 | case 2:getFragmentManager().beginTransaction().add(R.id.inner_container, new MultiSliderFragmentRange()).commit(); break; 134 | case 3:getFragmentManager().beginTransaction().add(R.id.inner_container, new MultiSliderFragmentMany()).commit(); break; 135 | 136 | } 137 | } 138 | } 139 | 140 | } 141 | -------------------------------------------------------------------------------- /example/src/main/res/drawable-hdpi/drawer_shadow.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-hdpi/drawer_shadow.9.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-hdpi/example_scrubber_control_disabled_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-hdpi/example_scrubber_control_disabled_holo.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-hdpi/example_scrubber_control_focused_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-hdpi/example_scrubber_control_focused_holo.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-hdpi/example_scrubber_control_normal_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-hdpi/example_scrubber_control_normal_holo.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-hdpi/example_scrubber_control_pressed_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-hdpi/example_scrubber_control_pressed_holo.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-hdpi/example_scrubber_primary_holo.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-hdpi/example_scrubber_primary_holo.9.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-hdpi/example_scrubber_secondary_holo.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-hdpi/example_scrubber_secondary_holo.9.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-hdpi/example_scrubber_track_holo_light.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-hdpi/example_scrubber_track_holo_light.9.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-hdpi/ic_drawer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-hdpi/ic_drawer.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-mdpi/drawer_shadow.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-mdpi/drawer_shadow.9.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-mdpi/example_scrubber_control_disabled_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-mdpi/example_scrubber_control_disabled_holo.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-mdpi/example_scrubber_control_focused_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-mdpi/example_scrubber_control_focused_holo.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-mdpi/example_scrubber_control_normal_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-mdpi/example_scrubber_control_normal_holo.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-mdpi/example_scrubber_control_pressed_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-mdpi/example_scrubber_control_pressed_holo.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-mdpi/example_scrubber_primary_holo.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-mdpi/example_scrubber_primary_holo.9.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-mdpi/example_scrubber_secondary_holo.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-mdpi/example_scrubber_secondary_holo.9.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-mdpi/example_scrubber_track_holo_light.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-mdpi/example_scrubber_track_holo_light.9.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-mdpi/ic_drawer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-mdpi/ic_drawer.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xhdpi/drawer_shadow.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-xhdpi/drawer_shadow.9.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xhdpi/example_scrubber_control_disabled_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-xhdpi/example_scrubber_control_disabled_holo.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xhdpi/example_scrubber_control_focused_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-xhdpi/example_scrubber_control_focused_holo.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xhdpi/example_scrubber_control_normal_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-xhdpi/example_scrubber_control_normal_holo.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xhdpi/example_scrubber_control_pressed_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-xhdpi/example_scrubber_control_pressed_holo.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xhdpi/example_scrubber_primary_holo.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-xhdpi/example_scrubber_primary_holo.9.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xhdpi/example_scrubber_secondary_holo.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-xhdpi/example_scrubber_secondary_holo.9.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xhdpi/example_scrubber_track_holo_light.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-xhdpi/example_scrubber_track_holo_light.9.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xhdpi/ic_drawer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-xhdpi/ic_drawer.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xxhdpi/drawer_shadow.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-xxhdpi/drawer_shadow.9.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xxhdpi/example_scrubber_control_disabled_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-xxhdpi/example_scrubber_control_disabled_holo.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xxhdpi/example_scrubber_control_focused_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-xxhdpi/example_scrubber_control_focused_holo.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xxhdpi/example_scrubber_control_normal_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-xxhdpi/example_scrubber_control_normal_holo.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xxhdpi/example_scrubber_control_pressed_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-xxhdpi/example_scrubber_control_pressed_holo.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xxhdpi/example_scrubber_primary_holo.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-xxhdpi/example_scrubber_primary_holo.9.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xxhdpi/example_scrubber_secondary_holo.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-xxhdpi/example_scrubber_secondary_holo.9.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xxhdpi/example_scrubber_track_holo_light.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-xxhdpi/example_scrubber_track_holo_light.9.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xxhdpi/ic_drawer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-xxhdpi/ic_drawer.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/src/main/res/drawable/example_bar_shape.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /example/src/main/res/drawable/example_scrubber_control_selector_holo_light.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /example/src/main/res/drawable/example_scrubber_custom.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/example/src/main/res/drawable/example_scrubber_custom.9.png -------------------------------------------------------------------------------- /example/src/main/res/drawable/example_scrubber_progress_horizontal_holo_light.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 20 | 21 | 23 | 24 | 25 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /example/src/main/res/layout/activity_my.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 12 | 16 | 17 | 22 | 24 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /example/src/main/res/layout/fragment_multi_slider_many.xml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 25 | 26 | 27 | 31 | 35 | 42 | 46 | 51 | 55 | 60 | 64 | 69 | 73 | 78 | 82 | 87 | 91 | 96 | 97 | 98 | 105 | 106 | 107 | -------------------------------------------------------------------------------- /example/src/main/res/layout/fragment_my.xml: -------------------------------------------------------------------------------- 1 | 10 | 11 | 15 | 16 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /example/src/main/res/layout/fragment_navigation_drawer.xml: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /example/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | -------------------------------------------------------------------------------- /example/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /example/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #3F51B5 5 | #303F9F 6 | #FF4081 7 | 8 | #ffaa66cc 9 | #ff00ddff 10 | #ff99cc00 11 | 12 | 13 | -------------------------------------------------------------------------------- /example/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 6 | 8 | 240dp 9 | 10 | -------------------------------------------------------------------------------- /example/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | MultiSlider 5 | MyActivity 6 | Single Thumb 7 | Range Example 8 | Multiple Thumbs 9 | Open navigation drawer 10 | Close navigation drawer 11 | 12 | 13 | -------------------------------------------------------------------------------- /example/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /holo-style/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /lib/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /lib/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | 3 | android { 4 | compileSdkVersion rootProject.ext.compileSdkVersion 5 | buildToolsVersion rootProject.ext.buildToolsVersion 6 | 7 | defaultConfig { 8 | minSdkVersion rootProject.ext.minSdkVersion 9 | targetSdkVersion rootProject.ext.compileSdkVersion 10 | versionCode 1 11 | versionName "1.0" 12 | } 13 | 14 | compileOptions { 15 | sourceCompatibility JavaVersion.VERSION_1_7 16 | targetCompatibility JavaVersion.VERSION_1_7 17 | } 18 | buildTypes { 19 | release { 20 | minifyEnabled false 21 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 22 | } 23 | } 24 | android { 25 | lintOptions { 26 | abortOnError false 27 | } 28 | } 29 | } 30 | 31 | dependencies { 32 | implementation rootProject.ext.supportCompat 33 | implementation rootProject.ext.supportDesign 34 | } 35 | 36 | apply from: 'https://raw.githubusercontent.com/djodjoni/gradle-mvn-push/master/gradle-mvn-push-android.gradle' 37 | 38 | -------------------------------------------------------------------------------- /lib/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Settings specified in this file will override any Gradle settings 5 | # configured through the IDE. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m 13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | 20 | POM_NAME=Multi functional slider/seekbar widget 21 | POM_ARTIFACT_ID=multislider 22 | POM_PACKAGING=aar 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /lib/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /home/djodjo/android-sdks/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /lib/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /lib/src/main/java/io/apptik/widget/Util.java: -------------------------------------------------------------------------------- 1 | package io.apptik.widget; 2 | 3 | 4 | public class Util { 5 | private Util() {} 6 | /** 7 | * Returns {@code o} if non-null, or throws {@code NullPointerException}. 8 | */ 9 | public static T requireNonNull(T o) { 10 | if (o == null) { 11 | throw new NullPointerException(); 12 | } 13 | return o; 14 | } 15 | /** 16 | * Returns {@code o} if non-null, or throws {@code NullPointerException} 17 | * with the given detail message. 18 | */ 19 | public static T requireNonNull(T o, String message) { 20 | if (o == null) { 21 | throw new NullPointerException(message); 22 | } 23 | return o; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /lib/src/main/res/anim-v21/multislider_thumb_pressed_to_unpressed_thumb_animation.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 11 | 18 | 19 | -------------------------------------------------------------------------------- /lib/src/main/res/anim-v21/multislider_thumb_unpressed_to_pressed_thumb_0_animation.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 11 | 18 | 19 | -------------------------------------------------------------------------------- /lib/src/main/res/color-v21/control_highlight_material.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /lib/src/main/res/color/control_highlight_material.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /lib/src/main/res/drawable-hdpi/multislider_control_off_mtrl_alpha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-hdpi/multislider_control_off_mtrl_alpha.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-hdpi/multislider_control_to_pressed_mtrl_000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-hdpi/multislider_control_to_pressed_mtrl_000.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-hdpi/multislider_control_to_pressed_mtrl_005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-hdpi/multislider_control_to_pressed_mtrl_005.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-hdpi/multislider_primary_mtrl_alpha.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-hdpi/multislider_primary_mtrl_alpha.9.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-hdpi/multislider_track_mtrl_alpha.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-hdpi/multislider_track_mtrl_alpha.9.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-hdpi/scrubber_control_on_mtrl_alpha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-hdpi/scrubber_control_on_mtrl_alpha.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-hdpi/scrubber_control_on_pressed_mtrl_alpha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-hdpi/scrubber_control_on_pressed_mtrl_alpha.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-mdpi/multislider_control_off_mtrl_alpha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-mdpi/multislider_control_off_mtrl_alpha.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-mdpi/multislider_control_to_pressed_mtrl_000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-mdpi/multislider_control_to_pressed_mtrl_000.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-mdpi/multislider_control_to_pressed_mtrl_005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-mdpi/multislider_control_to_pressed_mtrl_005.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-mdpi/multislider_primary_mtrl_alpha.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-mdpi/multislider_primary_mtrl_alpha.9.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-mdpi/multislider_track_mtrl_alpha.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-mdpi/multislider_track_mtrl_alpha.9.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-v21/control_background_multi_material.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | -------------------------------------------------------------------------------- /lib/src/main/res/drawable-v21/multislider_range_material.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 21 | 22 | -------------------------------------------------------------------------------- /lib/src/main/res/drawable-v21/multislider_thumb_material_anim.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 26 | 28 | 31 | 32 | 33 | 34 | 38 | 41 | 45 | 49 | 50 | -------------------------------------------------------------------------------- /lib/src/main/res/drawable-v21/multislider_thumb_pressed_to_unpressed.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 27 | 33 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /lib/src/main/res/drawable-v21/multislider_thumb_pressed_to_unpressed_animation.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /lib/src/main/res/drawable-v21/multislider_thumb_unpressed_to_pressed.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 27 | 31 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /lib/src/main/res/drawable-v21/multislider_thumb_unpressed_to_pressed_animation.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /lib/src/main/res/drawable-v21/multislider_track_material.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 21 | 22 | -------------------------------------------------------------------------------- /lib/src/main/res/drawable-v23/multislider_range_material.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /lib/src/main/res/drawable-v23/multislider_track_material.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /lib/src/main/res/drawable-xhdpi/multislider_control_off_mtrl_alpha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-xhdpi/multislider_control_off_mtrl_alpha.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-xhdpi/multislider_control_to_pressed_mtrl_000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-xhdpi/multislider_control_to_pressed_mtrl_000.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-xhdpi/multislider_control_to_pressed_mtrl_005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-xhdpi/multislider_control_to_pressed_mtrl_005.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-xhdpi/multislider_primary_mtrl_alpha.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-xhdpi/multislider_primary_mtrl_alpha.9.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-xhdpi/multislider_track_mtrl_alpha.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-xhdpi/multislider_track_mtrl_alpha.9.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-xxhdpi/multislider_control_off_mtrl_alpha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-xxhdpi/multislider_control_off_mtrl_alpha.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-xxhdpi/multislider_control_to_pressed_mtrl_000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-xxhdpi/multislider_control_to_pressed_mtrl_000.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-xxhdpi/multislider_control_to_pressed_mtrl_005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-xxhdpi/multislider_control_to_pressed_mtrl_005.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-xxhdpi/multislider_primary_mtrl_alpha.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-xxhdpi/multislider_primary_mtrl_alpha.9.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-xxhdpi/multislider_track_mtrl_alpha.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-xxhdpi/multislider_track_mtrl_alpha.9.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-xxxhdpi/multislider_control_to_pressed_mtrl_000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-xxxhdpi/multislider_control_to_pressed_mtrl_000.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable-xxxhdpi/multislider_control_to_pressed_mtrl_005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/lib/src/main/res/drawable-xxxhdpi/multislider_control_to_pressed_mtrl_005.png -------------------------------------------------------------------------------- /lib/src/main/res/drawable/multislider_range_material.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /lib/src/main/res/drawable/multislider_thumb_material.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 19 | 20 | 22 | 23 | 24 | 26 | 27 | 28 | 30 | 31 | 32 | 34 | 35 | -------------------------------------------------------------------------------- /lib/src/main/res/drawable/multislider_tick_mark_material.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 20 | 22 | 23 | -------------------------------------------------------------------------------- /lib/src/main/res/drawable/multislider_track_material.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /lib/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /lib/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #0000 5 | #ffffffff 6 | 7 | -------------------------------------------------------------------------------- /lib/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 2dp 3 | 2dp 4 | 5 | 4dp 6 | 7 | -------------------------------------------------------------------------------- /mslider-espresso/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /mslider-espresso/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | 3 | android { 4 | compileSdkVersion rootProject.ext.compileSdkVersion 5 | buildToolsVersion rootProject.ext.buildToolsVersion 6 | 7 | defaultConfig { 8 | minSdkVersion rootProject.ext.minSdkVersion 9 | targetSdkVersion rootProject.ext.compileSdkVersion 10 | versionCode 1 11 | versionName "1.0" 12 | 13 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 14 | 15 | } 16 | buildTypes { 17 | release { 18 | minifyEnabled false 19 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 20 | } 21 | } 22 | lintOptions { 23 | abortOnError false 24 | } 25 | 26 | } 27 | 28 | dependencies { 29 | implementation project(':lib') 30 | implementation rootProject.ext.supportTestEspresso 31 | } 32 | 33 | apply from: 'https://raw.githubusercontent.com/djodjoni/gradle-mvn-push/master/gradle-mvn-push-android.gradle' 34 | -------------------------------------------------------------------------------- /mslider-espresso/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Settings specified in this file will override any Gradle settings 5 | # configured through the IDE. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m 13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | 20 | POM_NAME=Espresso helper for MultiSlider widget 21 | POM_ARTIFACT_ID=multislider-espresso 22 | POM_PACKAGING=aar 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /mslider-espresso/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/sic/dev/adt-bundle-mac-x86_64/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /mslider-espresso/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mslider-espresso/src/main/java/io/apptik/widget/MultiSliderActions.java: -------------------------------------------------------------------------------- 1 | package io.apptik.widget; 2 | 3 | import androidx.test.espresso.ViewAction; 4 | import androidx.test.espresso.action.ViewActions; 5 | 6 | public class MultiSliderActions { 7 | 8 | private MultiSliderActions() {} 9 | 10 | public static ViewAction moveThumbForward(int thumbId) { 11 | return ViewActions.actionWithAssertions(new SetThumbValueAction(thumbId, Integer.MAX_VALUE)); 12 | } 13 | 14 | public static ViewAction moveThumbBackward(int thumbId) { 15 | return ViewActions.actionWithAssertions(new SetThumbValueAction(thumbId, Integer.MIN_VALUE)); 16 | } 17 | 18 | public static ViewAction setThumbValue(int thumbId, int value) { 19 | return ViewActions.actionWithAssertions(new SetThumbValueAction(thumbId, value)); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /mslider-espresso/src/main/java/io/apptik/widget/SetThumbValueAction.java: -------------------------------------------------------------------------------- 1 | package io.apptik.widget; 2 | 3 | import android.view.View; 4 | 5 | import org.hamcrest.Matcher; 6 | 7 | import androidx.test.espresso.UiController; 8 | import androidx.test.espresso.ViewAction; 9 | import androidx.test.espresso.matcher.ViewMatchers; 10 | 11 | public class SetThumbValueAction implements ViewAction { 12 | 13 | private int value; 14 | private MultiSlider.Thumb thumb; 15 | private int thumbId = -1; 16 | 17 | public SetThumbValueAction(MultiSlider.Thumb thumb, int value) { 18 | this.value = value; 19 | } 20 | 21 | public SetThumbValueAction(int thumbId, int value) { 22 | this.value = value; 23 | this.thumbId = thumbId; 24 | } 25 | 26 | private String getThumbDesc() { 27 | if (thumbId < 0) { 28 | return thumb.getTag(); 29 | } else { 30 | return "thumb Id: " + thumbId; 31 | } 32 | } 33 | 34 | private MultiSlider.Thumb getThumb(MultiSlider ms) { 35 | if (this.thumbId < 0) { 36 | return thumb; 37 | } else { 38 | return ms.getThumb(thumbId); 39 | } 40 | } 41 | 42 | @Override 43 | public Matcher getConstraints() { 44 | return ViewMatchers.isAssignableFrom(MultiSlider.class); 45 | } 46 | 47 | @Override 48 | public String getDescription() { 49 | if (value == Integer.MAX_VALUE) { 50 | return String.format("Move forward thumb: %s", getThumbDesc()); 51 | } else if (value == Integer.MIN_VALUE) { 52 | return String.format("Move backward thumb: %s", getThumbDesc()); 53 | } else return String.format("Set value (%s) for thumb: %s", value, getThumbDesc()); 54 | } 55 | 56 | @Override 57 | public void perform(UiController uiController, View view) { 58 | if (value == Integer.MAX_VALUE) { 59 | value = getThumb((MultiSlider) view).getValue() + ((MultiSlider) view).getStep(); 60 | } else if (value == Integer.MIN_VALUE) { 61 | value = getThumb((MultiSlider) view).getValue() - ((MultiSlider) view).getStep(); 62 | } 63 | getThumb((MultiSlider) view).setValue(value); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /mslider-uiautomator/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /mslider-uiautomator/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | 3 | android { 4 | compileSdkVersion rootProject.ext.compileSdkVersion 5 | buildToolsVersion rootProject.ext.buildToolsVersion 6 | 7 | defaultConfig { 8 | minSdkVersion 18 9 | targetSdkVersion rootProject.ext.compileSdkVersion 10 | versionCode 1 11 | versionName "1.0" 12 | 13 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 14 | 15 | } 16 | buildTypes { 17 | release { 18 | minifyEnabled false 19 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 20 | } 21 | } 22 | 23 | lintOptions { 24 | abortOnError false 25 | } 26 | } 27 | 28 | dependencies { 29 | implementation project(':lib') 30 | implementation rootProject.ext.supportTestUiautomator 31 | } 32 | 33 | apply from: 'https://raw.githubusercontent.com/djodjoni/gradle-mvn-push/master/gradle-mvn-push-android.gradle' 34 | -------------------------------------------------------------------------------- /mslider-uiautomator/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Settings specified in this file will override any Gradle settings 5 | # configured through the IDE. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m 13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | 20 | POM_NAME=UiAutomator helper for MultiSlider widget 21 | POM_ARTIFACT_ID=multislider-uiautomator 22 | POM_PACKAGING=aar 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /mslider-uiautomator/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/sic/dev/adt-bundle-mac-x86_64/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /mslider-uiautomator/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /mslider-uiautomator/src/main/java/io/apptik/widget/UiMultiSlider.java: -------------------------------------------------------------------------------- 1 | package io.apptik.widget; 2 | 3 | import android.os.Bundle; 4 | import android.view.accessibility.AccessibilityNodeInfo; 5 | 6 | import androidx.test.uiautomator.Configurator; 7 | import androidx.test.uiautomator.UiObject; 8 | import androidx.test.uiautomator.UiObjectNotFoundException; 9 | import androidx.test.uiautomator.UiScrollable; 10 | import androidx.test.uiautomator.UiSelector; 11 | 12 | import static io.apptik.widget.MultiSlider.VirtualTreeProvider.ACT_SET_PROGRESS; 13 | 14 | public class UiMultiSlider extends UiScrollable { 15 | 16 | /** 17 | * Constructor. 18 | * 19 | * @param container a {@link UiSelector} selector to identify the scrollable 20 | * layout element. 21 | * @since API Level 16 22 | */ 23 | public UiMultiSlider(UiSelector container) { 24 | super(container); 25 | setAsHorizontalList(); 26 | } 27 | 28 | public UiMultiSlider(UiObject uiObject) { 29 | this(uiObject.getSelector()); 30 | } 31 | 32 | public boolean moveThumbForward() throws UiObjectNotFoundException { 33 | AccessibilityNodeInfo ani = 34 | findAccessibilityNodeInfo(Configurator.getInstance().getWaitForSelectorTimeout()); 35 | if (ani == null) { 36 | throw new UiObjectNotFoundException(getSelector().toString()); 37 | } 38 | return ani.performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD); 39 | } 40 | 41 | public boolean moveThumbBackward() throws UiObjectNotFoundException { 42 | AccessibilityNodeInfo ani = 43 | findAccessibilityNodeInfo(Configurator.getInstance().getWaitForSelectorTimeout()); 44 | if (ani == null) { 45 | throw new UiObjectNotFoundException(getSelector().toString()); 46 | } 47 | return ani.performAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD); 48 | } 49 | 50 | public boolean setThumbValue(int value) throws UiObjectNotFoundException { 51 | AccessibilityNodeInfo ani = 52 | findAccessibilityNodeInfo(Configurator.getInstance().getWaitForSelectorTimeout()); 53 | if (ani == null) { 54 | throw new UiObjectNotFoundException(getSelector().toString()); 55 | } 56 | Bundle args = new Bundle(); 57 | args.putInt("value", value); 58 | return ani.performAction(ACT_SET_PROGRESS, args); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /scrshot1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/scrshot1.png -------------------------------------------------------------------------------- /scrshot2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/scrshot2.png -------------------------------------------------------------------------------- /scrshot3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apptik/MultiSlider/0c160afe8777ce1f6a90e0ab70fd67f1164519fa/scrshot3.png -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':mslider-espresso', ':mslider-uiautomator', ':holo-style' 2 | include 'example', 'lib' 3 | --------------------------------------------------------------------------------