[
  {
    "path": ".gitignore",
    "content": "*.iml\n.gradle\n/local.properties\n.DS_Store\n/build\n/captures\n.externalNativeBuild\n/.idea"
  },
  {
    "path": "README.md",
    "content": "# Deprecated\n### I created this project in 2016. many things have changed and there are many other new great alternatives for creating sliders in android. so I decided to deprecate banner-slider.\n\n# Banner-Slider\nBanner slider is an easy to use library for making beautiful sliders in your android app.\n\n<img src=\"https://github.com/saeedsh92/Banner-Slider/blob/master/Screenshot_1481531647.png?raw=true\" width=\"350\">\n\n## How to download\n### Gradle\nadd this line to your module build.gradle dependecies block:\n\n    compile 'com.ss.bannerslider:bannerslider:2.0.0'\n\n### Maven\n\n    <dependency>\n      <groupId>com.ss.bannerslider</groupId>\n      <artifactId>bannerslider</artifactId>\n      <version>2.0.0</version>\n      <type>pom</type>\n    </dependency>\n\n## How use this library\n### XML\n\n```xml\n<ss.com.bannerslider.Slider\n   android:id=\"@+id/banner_slider1\"\n   android:layout_width=\"match_parent\"\n   android:layout_height=\"wrap_content\"\n   />\n```\n\n### Java\n### Step 1: extend SliderAdapter\nin first step you must create an adapter to adapt your data model with slides. example implemented adapter with 3 slides:\n```java\npublic class MainSliderAdapter extends SliderAdapter {\n\n    @Override\n    public int getItemCount() {\n        return 3;\n    }\n\n    @Override\n    public void onBindImageSlide(int position, ImageSlideViewHolder viewHolder) {\n        switch (position) {\n            case 0:\n                viewHolder.bindImageSlide(\"https://assets.materialup.com/uploads/dcc07ea4-845a-463b-b5f0-4696574da5ed/preview.jpg\");\n                break;\n            case 1:\n                viewHolder.bindImageSlide(\"https://assets.materialup.com/uploads/20ded50d-cc85-4e72-9ce3-452671cf7a6d/preview.jpg\");\n                break;\n            case 2:\n                viewHolder.bindImageSlide(\"https://assets.materialup.com/uploads/76d63bbc-54a1-450a-a462-d90056be881b/preview.png\");\n                break;\n        }\n    }\n}\n```\n### Step 2: specify your image loading service\nyou must specify image loading service for loading images(for better flexibility and prevent adding unnecessary libraries).\nfor example if you work with picasso for loading images in your project, you must implement ImageLoadingService interface like below:\n```java\npublic class PicassoImageLoadingService implements ImageLoadingService {\n    public Context context;\n\n    public PicassoImageLoadingService(Context context) {\n        this.context = context;\n    }\n\n    @Override\n    public void loadImage(String url, ImageView imageView) {\n        Picasso.with(context).load(url).into(imageView);\n    }\n\n    @Override\n    public void loadImage(int resource, ImageView imageView) {\n        Picasso.with(context).load(resource).into(imageView);\n    }\n\n    @Override\n    public void loadImage(String url, int placeHolder, int errorDrawable, ImageView imageView) {\n        Picasso.with(context).load(url).placeholder(placeHolder).error(errorDrawable).into(imageView);\n    }\n}\n```\n### Step 3: initialize slider in your Application class\n```java\nSlider.init(YOUR IMAGE LOADING SERVICE);\n```\n\n### Step 4: set your adapter on slider\n```java\nslider = findViewById(R.id.banner_slider1);\n        slider.setAdapter(new MainSliderAdapter());\n```\n## You want more customization?\n#### Changing slides automatically in specifed periods\ninterval attribute get miliseconds.\n```xml\n  app:slider_interval=\"5000\"\n```\n\n\n#### Loop slides\n```xml\n  app:slider_loopSlides=\"true\"\n```\n\n#### Choose default banner to show up first\n```java\nslider.setSelectedSlide(2);\n```\n\nyou must pass banner position to it:\n```xml\n  app:slider_defaultBanner=\"1\"\n```\n\n\n#### Enable/disable indicators animations\nin default, animations are enabled\n```xml\n  app:slider_animateIndicators=\"true\"\n```\n\n\n#### Use custom Indicators\nif you also set default indicators, then this attributes will ignored\n```xml\n  app:slider_selectedSlideIndicator=\"@drawable/selected_slide_indicator\"\n  app:slider_unselectedSlideIndicator=\"@drawable/unselected_slide_indicator\"\n```\n\n\n#### How set empty view, when banners not received from server yet?\n```xml\n  app:slider_emptyView=\"@layout/layout_empty_view\"\n```\n\n\n#### Change indicator sizes\n```xml\n  app:slider_indicatorSize=\"12dp\"\n```\n\n\n#### Set OnBannerClickListener\n```java\nslider.setOnSlideClickListener(new OnSlideClickListener() {\n            @Override\n            public void onSlideClick(int position) {\n                //Do what you want\n            }\n        });\n  });\n```\n\n## Licence\nCopyright 2016 Saeed Shahini\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n## Author\nSaeed shahini\n\nemail: saeedshahiniit@gmail.com\n\ngithub: https://github.com/saeedsh92\n\n"
  },
  {
    "path": "app/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "app/build.gradle",
    "content": "apply plugin: 'com.android.application'\n\nandroid {\n    compileSdkVersion 26\n    defaultConfig {\n        applicationId \"ss.com.bannerslidersample\"\n        minSdkVersion 14\n        targetSdkVersion 26\n        versionCode 1\n        versionName \"1.0\"\n        testInstrumentationRunner \"android.support.test.runner.AndroidJUnitRunner\"\n        vectorDrawables.useSupportLibrary = true\n    }\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n    }\n}\n\ndependencies {\n    implementation 'com.android.support:appcompat-v7:26.1.0'\n    implementation project(':bannerslider')\n    implementation 'com.android.support:design:26.1.0'\n    implementation 'com.android.support:support-vector-drawable:26.1.0'\n    implementation 'com.squareup.picasso:picasso:2.5.2'\n    implementation 'com.android.support:cardview-v7:26.0.0-alpha1'\n    implementation 'com.android.support:customtabs:26.0.0-alpha1'\n}\n"
  },
  {
    "path": "app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /home/saeed/android-sdk/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n"
  },
  {
    "path": "app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    package=\"ss.com.bannerslidersample\">\n    <uses-permission android:name=\"android.permission.INTERNET\"/>\n    <uses-sdk tools:overrideLibrary=\"android.support.customtabs\" android:minSdkVersion=\"15\"/>\n    <application\n        android:icon=\"@mipmap/ic_launcher\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style/AppTheme\">\n        <activity android:name=\".MainActivity\" android:label=\"Banner Slider\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n    </application>\n\n</manifest>"
  },
  {
    "path": "app/src/main/java/ss/com/bannerslidersample/MainActivity.java",
    "content": "package ss.com.bannerslidersample;\n\nimport android.content.Intent;\nimport android.net.Uri;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.support.customtabs.CustomTabsIntent;\nimport android.support.v4.content.ContextCompat;\nimport android.support.v7.app.AppCompatActivity;\nimport android.support.v7.widget.SwitchCompat;\nimport android.support.v7.widget.Toolbar;\nimport android.view.View;\nimport android.widget.AdapterView;\nimport android.widget.ArrayAdapter;\nimport android.widget.CompoundButton;\nimport android.widget.ImageView;\nimport android.widget.SeekBar;\nimport android.widget.Spinner;\n\nimport ss.com.bannerslider.Slider;\nimport ss.com.bannerslider.indicators.IndicatorShape;\n\npublic class MainActivity extends AppCompatActivity {\n    private Slider slider;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_main);\n        Slider.init(new PicassoImageLoadingService(this));\n        setupViews();\n    }\n\n    private void setupViews() {\n        setupToolbar();\n        setupPageIndicatorChooser();\n        setupSettingsUi();\n        slider = findViewById(R.id.banner_slider1);\n\n        //delay for testing empty view functionality\n        slider.postDelayed(new Runnable() {\n            @Override\n            public void run() {\n                slider.setAdapter(new MainSliderAdapter());\n                slider.setSelectedSlide(0);\n            }\n        }, 1500);\n\n    }\n\n    private void setupSettingsUi() {\n        final SeekBar intervalSeekBar = findViewById(R.id.seekbar_interval);\n        intervalSeekBar.setMax(10000);\n        intervalSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {\n            @Override\n            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {\n                if (b) {\n                    slider.setInterval(i);\n                }\n            }\n\n            @Override\n            public void onStartTrackingTouch(SeekBar seekBar) {\n\n            }\n\n            @Override\n            public void onStopTrackingTouch(SeekBar seekBar) {\n\n            }\n        });\n\n        SeekBar indicatorSizeSeekBar = findViewById(R.id.seekbar_indicator_size);\n        indicatorSizeSeekBar.setMax(getResources().getDimensionPixelSize(R.dimen.max_slider_indicator_size));\n        indicatorSizeSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {\n            @Override\n            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {\n                if (b) {\n                    slider.setIndicatorSize(i);\n                }\n            }\n\n            @Override\n            public void onStartTrackingTouch(SeekBar seekBar) {\n\n            }\n\n            @Override\n            public void onStopTrackingTouch(SeekBar seekBar) {\n\n            }\n        });\n\n        SwitchCompat loopSlidesSwitch = findViewById(R.id.checkbox_loop_slides);\n        loopSlidesSwitch.setChecked(true);\n        SwitchCompat mustAnimateIndicators = findViewById(R.id.checkbox_animate_indicators);\n        mustAnimateIndicators.setChecked(true);\n\n        loopSlidesSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {\n            @Override\n            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {\n                slider.setLoopSlides(b);\n            }\n        });\n\n        mustAnimateIndicators.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {\n            @Override\n            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {\n                slider.setAnimateIndicators(b);\n            }\n        });\n\n        SwitchCompat hideIndicatorsSwitch = findViewById(R.id.checkbox_hide_indicators);\n        hideIndicatorsSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {\n            @Override\n            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {\n                if (b) {\n                    slider.hideIndicators();\n                } else {\n                    slider.showIndicators();\n                }\n            }\n        });\n    }\n\n    private void setupToolbar() {\n        Toolbar toolbar = findViewById(R.id.toolbar);\n        setSupportActionBar(toolbar);\n\n        ImageView githubSourceImageView = findViewById(R.id.image_github);\n        githubSourceImageView.setOnClickListener(new View.OnClickListener() {\n            @Override\n            public void onClick(View view) {\n                Uri uri = Uri.parse(\"https://github.com/saeedsh92/Banner-Slider\");\n\n                if (Build.VERSION.SDK_INT > 15) {\n                    CustomTabsIntent.Builder intentBuilder = new CustomTabsIntent.Builder();\n                    intentBuilder.setToolbarColor(ContextCompat.getColor(MainActivity.this, R.color.colorPrimary));\n                    intentBuilder.setSecondaryToolbarColor(ContextCompat.getColor(MainActivity.this, R.color.colorPrimaryDark));\n                    intentBuilder.setStartAnimations(MainActivity.this, android.R.anim.fade_in, android.R.anim.fade_out);\n                    intentBuilder.setExitAnimations(MainActivity.this, android.R.anim.fade_in, android.R.anim.fade_out);\n                    CustomTabsIntent customTabsIntent = intentBuilder.build();\n                    customTabsIntent.launchUrl(MainActivity.this, uri);\n                } else {\n                    startActivity(Intent.createChooser(new Intent(Intent.ACTION_VIEW, uri), \"Choose Browser...\"));\n                }\n\n            }\n        });\n    }\n\n\n    private void setupPageIndicatorChooser() {\n\n        String[] pageIndicatorsLabels = getResources().getStringArray(R.array.page_indicators);\n\n        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(this,\n                android.R.layout.simple_spinner_dropdown_item,\n                pageIndicatorsLabels\n        );\n        Spinner spinner = findViewById(R.id.spinner_page_indicator);\n        spinner.setAdapter(arrayAdapter);\n\n        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\n            @Override\n            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\n                switch (i) {\n                    case 0:\n                        slider.setIndicatorStyle(IndicatorShape.CIRCLE);\n                        break;\n                    case 1:\n                        slider.setIndicatorStyle(IndicatorShape.DASH);\n                        break;\n                    case 2:\n                        slider.setIndicatorStyle(IndicatorShape.ROUND_SQUARE);\n                        break;\n                    case 3:\n                        slider.setIndicatorStyle(IndicatorShape.SQUARE);\n                        break;\n                    case 4:\n                        slider.setSelectedSlideIndicator(ContextCompat.getDrawable(MainActivity.this, R.drawable.selected_slide_indicator));\n                        slider.setUnSelectedSlideIndicator(ContextCompat.getDrawable(MainActivity.this, R.drawable.unselected_slide_indicator));\n                        break;\n                }\n            }\n\n            @Override\n            public void onNothingSelected(AdapterView<?> adapterView) {\n\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/ss/com/bannerslidersample/MainSliderAdapter.java",
    "content": "package ss.com.bannerslidersample;\n\nimport ss.com.bannerslider.SlideType;\nimport ss.com.bannerslider.adapters.SliderAdapter;\nimport ss.com.bannerslider.viewholder.ImageSlideViewHolder;\n\n/**\n * @author S.Shahini\n * @since 2/12/18\n */\n\npublic class MainSliderAdapter extends SliderAdapter {\n\n    @Override\n    public int getItemCount() {\n        return 3;\n    }\n\n    @Override\n    public void onBindImageSlide(int position, ImageSlideViewHolder viewHolder) {\n        switch (position) {\n            case 0:\n                viewHolder.bindImageSlide(\"https://assets.materialup.com/uploads/dcc07ea4-845a-463b-b5f0-4696574da5ed/preview.jpg\");\n                break;\n            case 1:\n                viewHolder.bindImageSlide(\"https://assets.materialup.com/uploads/20ded50d-cc85-4e72-9ce3-452671cf7a6d/preview.jpg\");\n                break;\n            case 2:\n                viewHolder.bindImageSlide(\"https://assets.materialup.com/uploads/76d63bbc-54a1-450a-a462-d90056be881b/preview.png\");\n                break;\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/ss/com/bannerslidersample/PicassoImageLoadingService.java",
    "content": "package ss.com.bannerslidersample;\n\nimport android.content.Context;\nimport android.widget.ImageView;\n\nimport com.squareup.picasso.Picasso;\n\nimport ss.com.bannerslider.ImageLoadingService;\n\n/**\n * @author S.Shahini\n * @since 4/7/18\n */\n\npublic class PicassoImageLoadingService implements ImageLoadingService {\n    public Context context;\n\n    public PicassoImageLoadingService(Context context) {\n        this.context = context;\n    }\n\n    @Override\n    public void loadImage(String url, ImageView imageView) {\n        Picasso.with(context).load(url).into(imageView);\n    }\n\n    @Override\n    public void loadImage(int resource, ImageView imageView) {\n        Picasso.with(context).load(resource).into(imageView);\n    }\n\n    @Override\n    public void loadImage(String url, int placeHolder, int errorDrawable, ImageView imageView) {\n        Picasso.with(context).load(url).placeholder(placeHolder).error(errorDrawable).into(imageView);\n    }\n}\n"
  },
  {
    "path": "app/src/main/res/drawable-xxhdpi/selected_slide_indicator.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:height=\"24dp\"\n    android:width=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n    <path android:fillColor=\"#fff\" android:pathData=\"M21,16.5C21,16.88 20.79,17.21 20.47,17.38L12.57,21.82C12.41,21.94 12.21,22 12,22C11.79,22 11.59,21.94 11.43,21.82L3.53,17.38C3.21,17.21 3,16.88 3,16.5V7.5C3,7.12 3.21,6.79 3.53,6.62L11.43,2.18C11.59,2.06 11.79,2 12,2C12.21,2 12.41,2.06 12.57,2.18L20.47,6.62C20.79,6.79 21,7.12 21,7.5V16.5Z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable-xxhdpi/unselected_slide_indicator.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:height=\"24dp\"\n    android:width=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n    <path android:fillColor=\"#fff\" android:pathData=\"M21,16.5C21,16.88 20.79,17.21 20.47,17.38L12.57,21.82C12.41,21.94 12.21,22 12,22C11.79,22 11.59,21.94 11.43,21.82L3.53,17.38C3.21,17.21 3,16.88 3,16.5V7.5C3,7.12 3.21,6.79 3.53,6.62L11.43,2.18C11.59,2.06 11.79,2 12,2C12.21,2 12.41,2.06 12.57,2.18L20.47,6.62C20.79,6.79 21,7.12 21,7.5V16.5M12,4.15L5,8.09V15.91L12,19.85L19,15.91V8.09L12,4.15Z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/layout/activity_main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.design.widget.CoordinatorLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:id=\"@+id/activity_main\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    tools:context=\"ss.com.bannerslidersample.MainActivity\">\n\n    <android.support.design.widget.AppBarLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\">\n\n        <android.support.v7.widget.Toolbar\n            android:id=\"@+id/toolbar\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"?actionBarSize\">\n\n            <ImageView\n                android:id=\"@+id/image_github\"\n                android:layout_width=\"36dp\"\n                android:layout_height=\"36dp\"\n                android:layout_gravity=\"right\"\n                android:layout_marginRight=\"8dp\"\n                android:src=\"@drawable/ic_github_circle_black_48dp\" />\n\n            <TextView\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:fontFamily=\"sans-serif-bold\"\n                android:gravity=\"center_vertical|left\"\n                android:text=\"Banner Slider\"\n                android:textColor=\"@android:color/black\"\n                android:textSize=\"18sp\" />\n        </android.support.v7.widget.Toolbar>\n    </android.support.design.widget.AppBarLayout>\n\n    <android.support.v4.widget.NestedScrollView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        app:layout_behavior=\"@string/appbar_scrolling_view_behavior\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:orientation=\"vertical\">\n\n            <android.support.v7.widget.CardView\n                style=\"@style/CardView.SS\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\">\n\n                <RelativeLayout\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\">\n\n                    <RelativeLayout\n                        android:id=\"@+id/container_spinner\"\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:padding=\"12dp\">\n\n                        <TextView\n                            android:id=\"@+id/text_label_page_indicator\"\n                            android:layout_width=\"wrap_content\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_centerVertical=\"true\"\n                            android:text=\"Page Indicator: \" />\n\n                        <Spinner\n                            android:id=\"@+id/spinner_page_indicator\"\n                            android:layout_width=\"wrap_content\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_centerVertical=\"true\"\n                            android:layout_toRightOf=\"@id/text_label_page_indicator\" />\n                    </RelativeLayout>\n\n                    <ss.com.bannerslider.Slider\n                        android:id=\"@+id/banner_slider1\"\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_below=\"@id/container_spinner\"\n                        app:slider_animateIndicators=\"true\"\n                        app:slider_emptyView=\"@layout/layout_empty_view\"\n                        app:slider_indicatorSize=\"10dp\"\n                        app:slider_interval=\"0\"\n                        app:slider_loopSlides=\"true\"\n                        app:slider_selectedSlideIndicator=\"@drawable/indicator_circle_selected\"\n                        app:slider_unselectedSlideIndicator=\"@drawable/indicator_circle_unselected\" />\n\n                    <LinearLayout\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_below=\"@id/banner_slider1\"\n                        android:orientation=\"vertical\"\n                        android:padding=\"12dp\">\n\n                        <RelativeLayout\n                            android:layout_width=\"match_parent\"\n                            android:layout_height=\"70dp\">\n\n                            <ImageView\n                                android:id=\"@+id/image_logo\"\n                                android:layout_width=\"50dp\"\n                                android:layout_height=\"50dp\"\n                                android:layout_alignParentLeft=\"true\"\n                                android:layout_centerVertical=\"true\"\n                                android:layout_marginRight=\"@dimen/standard_margin\"\n                                android:src=\"@drawable/ic_setting_2\" />\n\n                            <LinearLayout\n                                android:layout_width=\"match_parent\"\n                                android:layout_height=\"match_parent\"\n                                android:layout_marginLeft=\"8dp\"\n                                android:layout_toRightOf=\"@id/image_logo\"\n                                android:gravity=\"center\"\n                                android:orientation=\"vertical\">\n\n                                <TextView\n                                    android:layout_width=\"match_parent\"\n                                    android:layout_height=\"wrap_content\"\n                                    android:text=\"Customization\"\n                                    android:textColor=\"@android:color/black\" />\n\n                                <TextView\n                                    android:layout_width=\"match_parent\"\n                                    android:layout_height=\"wrap_content\"\n                                    android:layout_marginTop=\"2dp\"\n                                    android:text=\"you can test various settings from here\" />\n                            </LinearLayout>\n\n                        </RelativeLayout>\n\n                        <View\n                            android:layout_width=\"match_parent\"\n                            android:layout_height=\"1dp\"\n                            android:layout_marginBottom=\"16dp\"\n                            android:background=\"#ddd\" />\n\n                        <RelativeLayout\n                            android:layout_width=\"match_parent\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_marginBottom=\"@dimen/standard_margin\"\n                            android:layout_marginLeft=\"@dimen/banner_slider_settings_margin\"\n                            android:layout_marginRight=\"@dimen/banner_slider_settings_margin\">\n\n                            <TextView\n                                android:id=\"@+id/text_label_interval\"\n                                android:layout_width=\"wrap_content\"\n                                android:layout_height=\"wrap_content\"\n                                android:layout_alignParentStart=\"true\"\n                                android:layout_centerVertical=\"true\"\n                                android:text=\"@string/label_interval\" />\n\n                            <SeekBar\n                                android:id=\"@+id/seekbar_interval\"\n                                android:layout_width=\"match_parent\"\n                                android:layout_height=\"wrap_content\"\n                                android:layout_centerVertical=\"true\"\n                                android:layout_toEndOf=\"@id/text_label_interval\" />\n\n\n                        </RelativeLayout>\n\n                        <RelativeLayout\n                            android:layout_width=\"match_parent\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_marginBottom=\"@dimen/standard_margin\"\n                            android:layout_marginLeft=\"@dimen/banner_slider_settings_margin\"\n                            android:layout_marginRight=\"@dimen/banner_slider_settings_margin\">\n\n                            <TextView\n                                android:id=\"@+id/text_label_indicator_size\"\n                                android:layout_width=\"wrap_content\"\n                                android:layout_height=\"wrap_content\"\n                                android:layout_alignParentStart=\"true\"\n                                android:layout_centerVertical=\"true\"\n                                android:layout_marginBottom=\"@dimen/standard_margin\"\n                                android:text=\"@string/label_indicator_size\" />\n\n                            <SeekBar\n                                android:id=\"@+id/seekbar_indicator_size\"\n                                android:layout_width=\"match_parent\"\n                                android:layout_height=\"wrap_content\"\n                                android:layout_centerVertical=\"true\"\n                                android:layout_toEndOf=\"@id/text_label_indicator_size\" />\n\n\n                        </RelativeLayout>\n\n                        <android.support.v7.widget.SwitchCompat\n                            android:id=\"@+id/checkbox_loop_slides\"\n                            android:layout_width=\"match_parent\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_marginBottom=\"@dimen/standard_margin\"\n                            android:layout_marginLeft=\"@dimen/banner_slider_settings_margin\"\n                            android:layout_marginRight=\"@dimen/banner_slider_settings_margin\"\n                            android:text=\"@string/label_loop_slides\"\n                            android:textColor=\"@color/holo_gray\" />\n\n                        <android.support.v7.widget.SwitchCompat\n                            android:id=\"@+id/checkbox_animate_indicators\"\n                            android:layout_width=\"match_parent\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_marginBottom=\"@dimen/standard_margin\"\n                            android:layout_marginLeft=\"@dimen/banner_slider_settings_margin\"\n                            android:layout_marginRight=\"@dimen/banner_slider_settings_margin\"\n                            android:text=\"@string/label_animate_indicators\"\n\n                            android:textColor=\"@color/holo_gray\" />\n\n                        <android.support.v7.widget.SwitchCompat\n                            android:id=\"@+id/checkbox_hide_indicators\"\n                            android:layout_width=\"match_parent\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_marginLeft=\"@dimen/banner_slider_settings_margin\"\n                            android:layout_marginRight=\"@dimen/banner_slider_settings_margin\"\n                            android:text=\"@string/label_hide_indicators\"\n\n                            android:textColor=\"@color/holo_gray\" />\n\n                    </LinearLayout>\n                </RelativeLayout>\n\n\n            </android.support.v7.widget.CardView>\n        </LinearLayout>\n    </android.support.v4.widget.NestedScrollView>\n\n</android.support.design.widget.CoordinatorLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/layout_empty_view.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\" android:layout_height=\"200dp\"\n    android:orientation=\"vertical\"\n    android:gravity=\"center\">\n    <ProgressBar\n        android:id=\"@+id/progress_bar\"\n        android:layout_width=\"50dp\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"center\"\n        />\n    <TextView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"8dp\"\n        android:text=\"@string/label_loading\"/>\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"colorPrimary\">#fff</color>\n    <color name=\"colorPrimaryDark\">#aaaaaa</color>\n    <color name=\"colorAccent\">#2facb2</color>\n    <color name=\"toolbarColor\">#eeee</color>\n    <color name=\"holo_gray\">#717171</color>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"activity_horizontal_margin\">16dp</dimen>\n    <dimen name=\"activity_vertical_margin\">16dp</dimen>\n    <dimen name=\"standard_margin\">8dp</dimen>\n    <dimen name=\"standard_margin_x2\">16dp</dimen>\n    <dimen name=\"banner_slider_settings_margin\">20dp</dimen>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">BannerSliderSample</string>\n    <string name=\"label_loading\">This Is Empty View</string>\n    <string name=\"label_interval\">Interval: </string>\n    <string name=\"label_indicator_size\">Indicator size: </string>\n    <string name=\"label_animate_indicators\">Animate indicators: </string>\n    <string name=\"label_hide_indicators\">Hide Indicators</string>\n    <string name=\"label_loop_slides\">Loop slides: </string>\n    <array name=\"page_indicators\">\n        <item>Circle</item>\n        <item>Dash</item>\n        <item>Round Square</item>\n        <item>Square</item>\n        <item>Custom</item>\n    </array>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/styles.xml",
    "content": "<resources>\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <item name=\"colorPrimary\">@color/colorPrimary</item>\n        <item name=\"colorPrimaryDark\">@color/colorPrimaryDark</item>\n        <item name=\"colorAccent\">@color/colorAccent</item>\n    </style>\n    <style name=\"CardView.SS\" >\n        <item name=\"android:layout_marginRight\">4dp</item>\n        <item name=\"android:layout_marginLeft\">4dp</item>\n        <item name=\"cardElevation\">2dp</item>\n        <item name=\"cardUseCompatPadding\">true</item>\n    </style>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-w820dp/dimens.xml",
    "content": "<resources>\n    <dimen name=\"activity_horizontal_margin\">64dp</dimen>\n</resources>\n"
  },
  {
    "path": "bannerslider/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "bannerslider/build.gradle",
    "content": "apply plugin: 'com.android.library'\n\nandroid {\n    compileSdkVersion 26\n\n    defaultConfig {\n        minSdkVersion 14\n        targetSdkVersion 26\n        versionCode 10\n        versionName \"2.0.0\"\n        group = 'com.ss.bannerslider'\n        version = '2.0.0'\n    }\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n    }\n}\n\ndependencies {\n    implementation 'com.android.support:recyclerview-v7:26.1.0'\n\n}\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "bannerslider/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /home/saeed/android-sdk/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n"
  },
  {
    "path": "bannerslider/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" package=\"ss.com.bannerslider\">\n\n    <application  android:label=\"@string/app_name\"/>\n\n</manifest>\n"
  },
  {
    "path": "bannerslider/src/main/java/ss/com/bannerslider/Config.java",
    "content": "package ss.com.bannerslider;\n\nimport android.content.Context;\nimport android.graphics.drawable.Drawable;\nimport android.support.v4.content.ContextCompat;\n\n/**\n * @author S.Shahini\n * @since 3/5/18\n */\n\npublic class Config {\n    public static final int NOT_SELECTED = -1;\n    protected boolean hideIndicators = false;\n    protected boolean loopSlides = true;\n    protected int indicatorSize = NOT_SELECTED;\n    protected Drawable selectedSlideIndicator;\n    protected Drawable unselectedSlideIndicator;\n    protected boolean animateIndicators = true;\n    protected int slideChangeInterval = 0;\n    protected int emptyView = NOT_SELECTED;\n\n    private Config() {\n\n    }\n\n    public static class Builder {\n        private Config config = new Config();\n        private Context context;\n\n        public Builder(Context context) {\n            this.context = context.getApplicationContext();\n        }\n\n        public Builder hideIndicators(boolean hideIndicators) {\n            config.hideIndicators = hideIndicators;\n            return this;\n        }\n\n        public Builder loopSlides(boolean loopSlides) {\n            config.loopSlides = loopSlides;\n            return this;\n        }\n\n        public Builder indicatorSize(int indicatorSize) {\n            config.indicatorSize = indicatorSize;\n            return this;\n        }\n\n        public Builder selectedSlideIndicator(Drawable selectedSlideIndicator) {\n            config.selectedSlideIndicator = selectedSlideIndicator;\n            return this;\n        }\n\n        public Builder unselectedSlideIndicator(Drawable unselectedSlideIndicator) {\n            config.unselectedSlideIndicator = unselectedSlideIndicator;\n            return this;\n        }\n\n        public Builder animateIndicators(boolean animateIndicators) {\n            config.animateIndicators = animateIndicators;\n            return this;\n        }\n\n        public Builder slideChangeInterval(int slideChangeInterval) {\n            config.slideChangeInterval = slideChangeInterval;\n            return this;\n        }\n\n        public Builder emptyView(int emptyView) {\n            config.emptyView = emptyView;\n            return this;\n        }\n\n\n        public Config build() {\n            if (config.selectedSlideIndicator == null) {\n                config.selectedSlideIndicator = ContextCompat.getDrawable(context, R.drawable.indicator_circle_selected);\n            }\n\n            if (config.unselectedSlideIndicator == null) {\n                config.unselectedSlideIndicator = ContextCompat.getDrawable(context, R.drawable.indicator_circle_unselected);\n            }\n\n            if (config.indicatorSize == NOT_SELECTED) {\n                config.indicatorSize = context.getResources().getDimensionPixelSize(R.dimen.default_indicator_size);\n            }\n\n            return config;\n        }\n    }\n\n\n}\n"
  },
  {
    "path": "bannerslider/src/main/java/ss/com/bannerslider/ImageLoadingService.java",
    "content": "package ss.com.bannerslider;\n\nimport android.support.annotation.DrawableRes;\nimport android.widget.ImageView;\n\n/**\n * @author S.Shahini\n * @since 4/4/18\n */\n\npublic interface ImageLoadingService {\n    void loadImage(String url, ImageView imageView);\n\n    void loadImage(@DrawableRes int resource, ImageView imageView);\n\n    void loadImage(String url, @DrawableRes int placeHolder, @DrawableRes int errorDrawable, ImageView imageView);\n}\n"
  },
  {
    "path": "bannerslider/src/main/java/ss/com/bannerslider/SlideIndicatorsGroup.java",
    "content": "package ss.com.bannerslider;\n\nimport android.content.Context;\nimport android.graphics.drawable.Drawable;\nimport android.os.Build;\nimport android.util.Log;\nimport android.view.Gravity;\nimport android.view.ViewGroup;\nimport android.widget.FrameLayout;\nimport android.widget.LinearLayout;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport ss.com.bannerslider.event.OnSlideChangeListener;\nimport ss.com.bannerslider.indicators.CircleIndicator;\nimport ss.com.bannerslider.indicators.DashIndicator;\nimport ss.com.bannerslider.indicators.IndicatorShape;\nimport ss.com.bannerslider.indicators.RoundSquareIndicator;\nimport ss.com.bannerslider.indicators.SquareIndicator;\n\n/**\n * @author S.Shahini\n * @since 11/26/16\n */\nclass SlideIndicatorsGroup extends LinearLayout implements OnSlideChangeListener {\n    private static final String TAG = \"SlideIndicatorsGroup\";\n    private final Context context;\n    private int slidesCount;\n    private Drawable selectedSlideIndicator;\n    private Drawable unselectedSlideIndicator;\n    private int defaultIndicator;\n    private int indicatorSize;\n    private boolean mustAnimateIndicators = true;\n    private List<IndicatorShape> indicatorShapes = new ArrayList<>();\n\n    public SlideIndicatorsGroup(Context context, Drawable selectedSlideIndicator, Drawable unselectedSlideIndicator, int defaultIndicator, int indicatorSize, boolean mustAnimateIndicators) {\n        super(context);\n        this.context = context;\n        this.selectedSlideIndicator = selectedSlideIndicator;\n        this.unselectedSlideIndicator = unselectedSlideIndicator;\n        this.defaultIndicator = defaultIndicator;\n        this.indicatorSize = indicatorSize;\n        this.mustAnimateIndicators = mustAnimateIndicators;\n        setup();\n    }\n\n    public void setSlides(int slidesCount) {\n        removeAllViews();\n        indicatorShapes.clear();\n        this.slidesCount = 0;\n        for (int i = 0; i < slidesCount; i++) {\n            onSlideAdd();\n        }\n        this.slidesCount = slidesCount;\n    }\n\n    public void onSlideAdd() {\n        this.slidesCount += 1;\n        addIndicator();\n    }\n\n    private void addIndicator() {\n        IndicatorShape indicatorShape;\n        if (selectedSlideIndicator != null && unselectedSlideIndicator != null) {\n            indicatorShape = new IndicatorShape(context, indicatorSize, mustAnimateIndicators) {\n                @Override\n                public void onCheckedChange(boolean isChecked) {\n                    super.onCheckedChange(isChecked);\n                    if (isChecked) {\n                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {\n                            setBackground(selectedSlideIndicator);\n                        } else {\n                            setBackgroundDrawable(selectedSlideIndicator);\n                        }\n                    } else {\n                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {\n                            setBackground(unselectedSlideIndicator);\n                        } else {\n                            setBackgroundDrawable(unselectedSlideIndicator);\n                        }\n                    }\n                }\n            };\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {\n                indicatorShape.setBackground(unselectedSlideIndicator);\n            } else {\n                indicatorShape.setBackgroundDrawable(unselectedSlideIndicator);\n            }\n            indicatorShapes.add(indicatorShape);\n            addView(indicatorShape);\n\n        } else {\n            switch (defaultIndicator) {\n                case IndicatorShape.SQUARE:\n                    indicatorShape = new SquareIndicator(context, indicatorSize, mustAnimateIndicators);\n                    indicatorShapes.add(indicatorShape);\n                    addView(indicatorShape);\n                    break;\n                case IndicatorShape.ROUND_SQUARE:\n                    indicatorShape = new RoundSquareIndicator(context, indicatorSize, mustAnimateIndicators);\n                    indicatorShapes.add(indicatorShape);\n                    addView(indicatorShape);\n                    break;\n                case IndicatorShape.DASH:\n                    indicatorShape = new DashIndicator(context, indicatorSize, mustAnimateIndicators);\n                    indicatorShapes.add(indicatorShape);\n                    addView(indicatorShape);\n                    break;\n\n                case IndicatorShape.CIRCLE:\n                    indicatorShape = new CircleIndicator(context, indicatorSize, mustAnimateIndicators);\n                    indicatorShapes.add(indicatorShape);\n                    addView(indicatorShape);\n                    break;\n                default:\n                    break;\n            }\n        }\n    }\n\n    public void setup() {\n        setOrientation(LinearLayout.HORIZONTAL);\n        FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);\n        layoutParams.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;\n        int margin = getResources().getDimensionPixelSize(R.dimen.default_indicator_margins) * 2;\n        layoutParams.setMargins(0, 0, 0, margin);\n        setLayoutParams(layoutParams);\n    }\n\n    @Override\n    public void onSlideChange(int selectedSlidePosition) {\n        Log.i(TAG, \"onSlideChange: \"+selectedSlidePosition);\n        for (int i = 0; i < indicatorShapes.size(); i++) {\n            if (i == selectedSlidePosition) {\n                indicatorShapes.get(i).onCheckedChange(true);\n            } else {\n                indicatorShapes.get(i).onCheckedChange(false);\n            }\n        }\n    }\n\n    public void setMustAnimateIndicators(boolean shouldAnimate) {\n        this.mustAnimateIndicators = shouldAnimate;\n        for (IndicatorShape indicatorShape :\n                indicatorShapes) {\n            indicatorShape.setMustAnimateChange(shouldAnimate);\n        }\n    }\n\n}\n"
  },
  {
    "path": "bannerslider/src/main/java/ss/com/bannerslider/SlideType.java",
    "content": "package ss.com.bannerslider;\n\npublic enum SlideType {\n    //Custom,Video And Gif Slides will add in future\n    IMAGE(0);\n    private final int value;\n\n    SlideType(int value) {\n        this.value = value;\n    }\n\n    public int getValue() {\n        return this.value;\n    }\n}"
  },
  {
    "path": "bannerslider/src/main/java/ss/com/bannerslider/Slider.java",
    "content": "package ss.com.bannerslider;\n\nimport android.app.Activity;\nimport android.content.Context;\nimport android.content.res.TypedArray;\nimport android.graphics.drawable.Drawable;\nimport android.support.annotation.NonNull;\nimport android.support.annotation.Nullable;\nimport android.support.v4.content.ContextCompat;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.util.AttributeSet;\nimport android.util.Log;\nimport android.view.LayoutInflater;\nimport android.view.MotionEvent;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.FrameLayout;\n\nimport java.util.Timer;\nimport java.util.TimerTask;\n\nimport ss.com.bannerslider.adapters.PositionController;\nimport ss.com.bannerslider.adapters.SliderAdapter;\nimport ss.com.bannerslider.adapters.SliderRecyclerViewAdapter;\nimport ss.com.bannerslider.event.OnSlideChangeListener;\nimport ss.com.bannerslider.event.OnSlideClickListener;\nimport ss.com.bannerslider.indicators.IndicatorShape;\n\n/**\n * @author S.Shahini\n * @since 12/16/17\n */\n\npublic class Slider extends FrameLayout {\n    private static final String TAG = \"Slider\";\n\n    public OnSlideChangeListener onSlideChangeListener;\n    public OnSlideClickListener onSlideClickListener;\n    public RecyclerView recyclerView;\n    public SliderRecyclerViewAdapter adapter;\n    public SlideIndicatorsGroup slideIndicatorsGroup;\n    public int pendingPosition = RecyclerView.NO_POSITION;\n    public SliderAdapter sliderAdapter;\n    public Config config;\n    public int selectedSlidePosition = 0;\n    public Timer timer;\n    public PositionController positionController;\n    public static ImageLoadingService imageLoadingService;\n    private View emptyView;\n\n    public Slider(@NonNull Context context) {\n        super(context);\n        setupViews(null);\n    }\n\n    public Slider(@NonNull Context context, @Nullable AttributeSet attrs) {\n        super(context, attrs);\n        setupViews(attrs);\n    }\n\n    public Slider(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {\n        super(context, attrs, defStyleAttr);\n        setupViews(attrs);\n    }\n\n    private void setupViews(AttributeSet attributeSet) {\n\n        if (attributeSet != null) {\n            TypedArray typedArray = getContext().obtainStyledAttributes(attributeSet, R.styleable.Slider);\n            try {\n                config = new Config.Builder(getContext())\n                        .animateIndicators(typedArray.getBoolean(R.styleable.Slider_slider_animateIndicators, true))\n                        .emptyView(typedArray.getResourceId(R.styleable.Slider_slider_emptyView, Config.NOT_SELECTED))\n                        .indicatorSize(typedArray.getDimensionPixelSize(R.styleable.Slider_slider_indicatorSize, 0))\n                        .loopSlides(typedArray.getBoolean(R.styleable.Slider_slider_loopSlides, false))\n                        .slideChangeInterval(typedArray.getInteger(R.styleable.Slider_slider_interval, 0))\n                        .selectedSlideIndicator(typedArray.getDrawable(R.styleable.Slider_slider_selectedSlideIndicator))\n                        .unselectedSlideIndicator(typedArray.getDrawable(R.styleable.Slider_slider_unselectedSlideIndicator))\n                        .hideIndicators(typedArray.getBoolean(R.styleable.Slider_slider_hideIndicators, false))\n                        .build();\n            } catch (Exception e) {\n                Log.e(\"Slider\", \"setupViews: \".toString());\n            } finally {\n                typedArray.recycle();\n            }\n        } else {\n            config = new Config.Builder(getContext()).build();\n        }\n\n        setupRv();\n        setupSlideIndicator();\n    }\n\n    private void setupRv() {\n        recyclerView = new RecyclerView(getContext());\n        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {\n            @Override\n            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {\n                super.onScrollStateChanged(recyclerView, newState);\n                if (!config.loopSlides) return;\n\n                if (newState == RecyclerView.SCROLL_STATE_IDLE) {\n                    if (selectedSlidePosition == 0) {\n                        recyclerView.scrollToPosition(adapter.getItemCount() - 2);\n                        onImageSlideChange(adapter.getItemCount() - 2);\n                    } else if (selectedSlidePosition == adapter.getItemCount() - 1) {\n                        recyclerView.scrollToPosition(1);\n                        onImageSlideChange(1);\n                    }\n                }\n            }\n        });\n        if (config.emptyView != Config.NOT_SELECTED) {\n            emptyView = LayoutInflater.from(getContext()).inflate(config.emptyView, this, false);\n            addView(emptyView);\n        }\n    }\n\n    private void setupSlideIndicator() {\n        if (!config.hideIndicators) {\n            slideIndicatorsGroup = new SlideIndicatorsGroup(getContext(),\n                    config.selectedSlideIndicator,\n                    config.unselectedSlideIndicator,\n                    0,\n                    config.indicatorSize,\n                    config.animateIndicators);\n        }\n    }\n\n    public void onImageSlideChange(int position) {\n        Log.d(TAG, \"onImageSlideChange() called with: position = [\" + position + \"]\");\n        selectedSlidePosition = position;\n        int userSlidePosition = positionController.getUserSlidePosition(position);\n        if (slideIndicatorsGroup != null)\n            slideIndicatorsGroup.onSlideChange(userSlidePosition);\n        if (onSlideChangeListener != null) {\n            onSlideChangeListener.onSlideChange(userSlidePosition);\n        }\n    }\n\n    public void setSelectedSlide(int position, boolean animate) {\n        if (recyclerView != null && recyclerView.getAdapter() != null) {\n            if (animate) {\n                recyclerView.smoothScrollToPosition(position);\n            } else {\n                recyclerView.scrollToPosition(position);\n            }\n            onImageSlideChange(position);\n        } else {\n            pendingPosition = position;\n        }\n    }\n\n    public void setSelectedSlide(int position) {\n        setSelectedSlide(positionController.getRealSlidePosition(position), true);\n    }\n\n    private void onAdapterAttached() {\n        if (pendingPosition != RecyclerView.NO_POSITION) {\n            recyclerView.smoothScrollToPosition(pendingPosition);\n            onImageSlideChange(pendingPosition);\n            pendingPosition = RecyclerView.NO_POSITION;\n\n        }\n    }\n\n    public void setSlideChangeListener(OnSlideChangeListener onSlideChangeListener) {\n        this.onSlideChangeListener = onSlideChangeListener;\n    }\n\n    public void setOnSlideClickListener(OnSlideClickListener onSlideClickListener) {\n        this.onSlideClickListener = onSlideClickListener;\n        if (adapter != null)\n            adapter.setOnSlideClickListener(onSlideClickListener);\n    }\n\n    public SliderAdapter getAdapter() {\n        return this.sliderAdapter;\n    }\n\n    public void setAdapter(SliderAdapter sliderAdapter) {\n        if (sliderAdapter != null && recyclerView != null) {\n            this.sliderAdapter = sliderAdapter;\n            if (indexOfChild(recyclerView) == -1) {\n                if (getLayoutParams().height == ViewGroup.LayoutParams.WRAP_CONTENT) {\n                    recyclerView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));\n                } else {\n                    recyclerView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));\n                }\n\n                addView(recyclerView);\n            }\n\n            recyclerView.setNestedScrollingEnabled(false);\n            final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false);\n            recyclerView.setLayoutManager(linearLayoutManager);\n            positionController = new PositionController(sliderAdapter, config.loopSlides);\n            adapter = new SliderRecyclerViewAdapter(sliderAdapter, sliderAdapter.getItemCount() > 1 && config.loopSlides, recyclerView.getLayoutParams(), new OnTouchListener() {\n                @Override\n                public boolean onTouch(View v, MotionEvent event) {\n                    if (event.getAction() == MotionEvent.ACTION_DOWN) {\n                        stopTimer();\n                    } else if (event.getAction() == MotionEvent.ACTION_CANCEL || event.getAction() == MotionEvent.ACTION_UP) {\n                        startTimer();\n                    }\n                    return false;\n                }\n            }, positionController);\n\n            recyclerView.setAdapter(adapter);\n            positionController.setRecyclerViewAdapter(adapter);\n\n            //Show default selected slide\n            selectedSlidePosition = config.loopSlides ? 1 : 0;\n            recyclerView.scrollToPosition(selectedSlidePosition);\n            onImageSlideChange(selectedSlidePosition);\n            pendingPosition = RecyclerView.NO_POSITION;\n            onAdapterAttached();\n\n            SsSnapHelper snapHelper = new SsSnapHelper(new SsSnapHelper.OnSelectedItemChange() {\n                @Override\n                public void onSelectedItemChange(int position) {\n                    onImageSlideChange(position);\n                }\n            });\n            recyclerView.setOnFlingListener(null);\n            snapHelper.attachToRecyclerView(recyclerView);\n            if (slideIndicatorsGroup != null && sliderAdapter.getItemCount() > 1) {\n                if (indexOfChild(slideIndicatorsGroup) == -1) {\n                    addView(slideIndicatorsGroup);\n                }\n                slideIndicatorsGroup.setSlides(sliderAdapter.getItemCount());\n                slideIndicatorsGroup.onSlideChange(0);\n            }\n            if (emptyView != null) {\n                emptyView.setVisibility(GONE);\n            }\n        }\n    }\n\n    public Config getConfig() {\n        return this.config;\n    }\n\n    @Override\n    protected void onAttachedToWindow() {\n        super.onAttachedToWindow();\n        startTimer();\n    }\n\n    @Override\n    protected void onDetachedFromWindow() {\n        super.onDetachedFromWindow();\n        stopTimer();\n    }\n\n    private void startTimer() {\n        if (config.slideChangeInterval > 0) {\n            stopTimer();\n            timer = new Timer();\n            timer.schedule(new SliderTimerTask(), config.slideChangeInterval, config.slideChangeInterval);\n        }\n    }\n\n    private void stopTimer() {\n        if (timer != null) {\n            timer.cancel();\n            timer.purge();\n        }\n    }\n\n    public static void init(ImageLoadingService imageLoadingService) {\n        Slider.imageLoadingService = imageLoadingService;\n    }\n\n    public static ImageLoadingService getImageLoadingService() {\n        if (imageLoadingService == null) {\n            throw new IllegalStateException(\"ImageLoadingService is null, you should call init method first\");\n        }\n        return imageLoadingService;\n    }\n\n    private class SliderTimerTask extends TimerTask {\n        @Override\n        public void run() {\n            if (getContext() instanceof Activity) {\n                ((Activity) getContext()).runOnUiThread(new Runnable() {\n                    @Override\n                    public void run() {\n                        int nextSlidePosition = positionController.getNextSlide(selectedSlidePosition);\n                        recyclerView.smoothScrollToPosition(nextSlidePosition);\n                        onImageSlideChange(nextSlidePosition);\n\n                    }\n                });\n            }\n        }\n    }\n\n    public void setInterval(int interval) {\n        config.slideChangeInterval = interval;\n        stopTimer();\n        startTimer();\n    }\n\n    public void setLoopSlides(boolean loopSlides) {\n        config.loopSlides = loopSlides;\n        adapter.setLoop(loopSlides);\n        positionController.setLoop(loopSlides);\n        adapter.notifyDataSetChanged();\n        recyclerView.scrollToPosition(loopSlides ? 1 : 0);\n        onImageSlideChange(loopSlides ? 1 : 0);\n    }\n\n    public void setAnimateIndicators(boolean shouldAnimate) {\n        config.animateIndicators = shouldAnimate;\n        if (slideIndicatorsGroup != null)\n            slideIndicatorsGroup.setMustAnimateIndicators(shouldAnimate);\n    }\n\n    public void hideIndicators() {\n        config.hideIndicators = true;\n        if (slideIndicatorsGroup != null)\n            slideIndicatorsGroup.setVisibility(GONE);\n    }\n\n    public void showIndicators() {\n        config.hideIndicators = false;\n        if (slideIndicatorsGroup != null)\n            slideIndicatorsGroup.setVisibility(VISIBLE);\n    }\n\n    public void setIndicatorSize(int indicatorSize) {\n        config.indicatorSize = indicatorSize;\n        refreshIndicators();\n    }\n\n    public void setSelectedSlideIndicator(Drawable selectedSlideIndicator) {\n        config.selectedSlideIndicator = selectedSlideIndicator;\n        refreshIndicators();\n    }\n\n    public void setUnSelectedSlideIndicator(Drawable unSelectedSlideIndicator) {\n        config.unselectedSlideIndicator = unSelectedSlideIndicator;\n        refreshIndicators();\n    }\n\n    private void refreshIndicators() {\n        if (!config.hideIndicators && sliderAdapter != null) {\n            if (slideIndicatorsGroup != null) {\n                removeView(slideIndicatorsGroup);\n            }\n            slideIndicatorsGroup = new SlideIndicatorsGroup(getContext(), config.selectedSlideIndicator, config.unselectedSlideIndicator, 0, config.indicatorSize, config.animateIndicators);\n            addView(slideIndicatorsGroup);\n            for (int i = 0; i < sliderAdapter.getItemCount(); i++) {\n                slideIndicatorsGroup.onSlideAdd();\n            }\n        }\n    }\n\n    public void setIndicatorStyle(int indicatorStyle) {\n        switch (indicatorStyle) {\n            case IndicatorShape.CIRCLE:\n                config.selectedSlideIndicator = ContextCompat.getDrawable(getContext(), R.drawable.indicator_circle_selected);\n                config.unselectedSlideIndicator = ContextCompat.getDrawable(getContext(), R.drawable.indicator_circle_unselected);\n                break;\n            case IndicatorShape.SQUARE:\n                config.selectedSlideIndicator = ContextCompat.getDrawable(getContext(), R.drawable.indicator_square_selected);\n                config.unselectedSlideIndicator = ContextCompat.getDrawable(getContext(), R.drawable.indicator_square_unselected);\n                break;\n            case IndicatorShape.DASH:\n                config.selectedSlideIndicator = ContextCompat.getDrawable(getContext(), R.drawable.indicator_dash_selected);\n                config.unselectedSlideIndicator = ContextCompat.getDrawable(getContext(), R.drawable.indicator_dash_unselected);\n                break;\n            case IndicatorShape.ROUND_SQUARE:\n                config.selectedSlideIndicator = ContextCompat.getDrawable(getContext(), R.drawable.indicator_round_square_selected);\n                config.unselectedSlideIndicator = ContextCompat.getDrawable(getContext(), R.drawable.indicator_round_square_unselected);\n                break;\n        }\n\n        refreshIndicators();\n    }\n}\n"
  },
  {
    "path": "bannerslider/src/main/java/ss/com/bannerslider/SsSnapHelper.java",
    "content": "package ss.com.bannerslider;\n\nimport android.support.v7.widget.PagerSnapHelper;\nimport android.support.v7.widget.RecyclerView;\n\n/**\n * @author S.Shahini\n * @since 2/17/18\n */\n\nclass SsSnapHelper extends PagerSnapHelper {\n    private OnSelectedItemChange onSelectedItemChange;\n    private int lastPosition;\n\n    public SsSnapHelper(OnSelectedItemChange onSelectedItemChange) {\n        this.onSelectedItemChange = onSelectedItemChange;\n    }\n\n    @Override\n    public int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int velocityX, int velocityY) {\n        int position = super.findTargetSnapPosition(layoutManager, velocityX, velocityY);\n        if (position != RecyclerView.NO_POSITION && lastPosition != position && position < layoutManager.getItemCount()) {\n            onSelectedItemChange.onSelectedItemChange(position);\n            lastPosition = position;\n        }\n        return position;\n    }\n\n    public interface OnSelectedItemChange {\n        void onSelectedItemChange(int position);\n    }\n}\n"
  },
  {
    "path": "bannerslider/src/main/java/ss/com/bannerslider/adapters/PositionController.java",
    "content": "package ss.com.bannerslider.adapters;\n\nimport android.util.Log;\n\n/**\n * @author S.Shahini\n * @since 4/7/18\n */\n\npublic class PositionController {\n    private static final String TAG = \"PositionController\";\n    private SliderRecyclerViewAdapter recyclerViewAdapter;\n    private SliderAdapter sliderAdapter;\n    private boolean loop;\n\n    public PositionController(SliderAdapter sliderAdapter, boolean loop) {\n        this.sliderAdapter = sliderAdapter;\n        this.loop = loop;\n    }\n\n    public int getUserSlidePosition(int position) {\n        if (loop) {\n            if (position == 0) {\n                return recyclerViewAdapter.getItemCount() - 3;\n            } else if (position == recyclerViewAdapter.getItemCount() - 1) {\n                return 0;\n            } else {\n                return position - 1;\n            }\n        } else {\n            return position;\n        }\n    }\n\n    public int getRealSlidePosition(int position) {\n        if (!loop) {\n            return position;\n        } else {\n            if (position >= 0 && position < sliderAdapter.getItemCount()) {\n                return position + 1;\n            } else {\n                Log.e(TAG, \"setSelectedSlide: Invalid Item Position\");\n                return 1;\n            }\n        }\n    }\n\n    public int getLastUserSlidePosition() {\n        return sliderAdapter.getItemCount() - 1;\n    }\n\n    public int getFirstUserSlidePosition() {\n        return 0;\n    }\n\n    public void setRecyclerViewAdapter(SliderRecyclerViewAdapter recyclerViewAdapter) {\n        this.recyclerViewAdapter = recyclerViewAdapter;\n    }\n\n    public int getNextSlide(int currentPosition) {\n        if (currentPosition < recyclerViewAdapter.getItemCount() - 1) {\n            return currentPosition + 1;\n        } else {\n            return loop ? 1 : 0;\n        }\n    }\n\n    public void setLoop(boolean loop) {\n        this.loop = loop;\n    }\n}\n"
  },
  {
    "path": "bannerslider/src/main/java/ss/com/bannerslider/adapters/SliderAdapter.java",
    "content": "package ss.com.bannerslider.adapters;\n\nimport ss.com.bannerslider.SlideType;\nimport ss.com.bannerslider.viewholder.ImageSlideViewHolder;\n\n/**\n * @author S.Shahini\n * @since 3/4/18\n */\n\npublic abstract class SliderAdapter {\n    public abstract int getItemCount();\n\n    public final SlideType getSlideType(int position) {\n        return SlideType.IMAGE;\n    }\n\n    public abstract void onBindImageSlide(int position, ImageSlideViewHolder imageSlideViewHolder);\n}\n"
  },
  {
    "path": "bannerslider/src/main/java/ss/com/bannerslider/adapters/SliderRecyclerViewAdapter.java",
    "content": "package ss.com.bannerslider.adapters;\n\nimport android.support.v4.content.ContextCompat;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.ImageView;\n\nimport ss.com.bannerslider.SlideType;\nimport ss.com.bannerslider.event.OnSlideClickListener;\nimport ss.com.bannerslider.viewholder.ImageSlideViewHolder;\n\n\n/**\n * @author S.Shahini\n * @since 12/16/17\n */\npublic class SliderRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {\n    private ViewGroup.LayoutParams imageViewLayoutParams;\n    private OnSlideClickListener onSlideClickListener;\n    private SliderAdapter sliderAdapter;\n    private boolean loop;\n    private View.OnTouchListener itemOnTouchListener;\n    private PositionController positionController;\n\n    public SliderRecyclerViewAdapter(SliderAdapter iSliderAdapter, boolean loop, ViewGroup.LayoutParams imageViewLayoutParams, View.OnTouchListener itemOnTouchListener, PositionController positionController) {\n        this.sliderAdapter = iSliderAdapter;\n        this.imageViewLayoutParams = imageViewLayoutParams;\n        this.loop = loop;\n        this.itemOnTouchListener = itemOnTouchListener;\n        this.positionController = positionController;\n    }\n\n    public void setOnSlideClickListener(OnSlideClickListener onSlideClickListener) {\n        this.onSlideClickListener = onSlideClickListener;\n    }\n\n    @Override\n    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n        if (viewType == SlideType.IMAGE.getValue()) {\n            ImageView imageView = new ImageView(parent.getContext());\n            imageView.setLayoutParams(imageViewLayoutParams);\n            imageView.setAdjustViewBounds(true);\n            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);\n            return new ImageSlideViewHolder(imageView);\n        } else {\n            return null;\n        }\n    }\n\n    @Override\n    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {\n        if (!loop) {\n            sliderAdapter.onBindImageSlide(position, (ImageSlideViewHolder) holder);\n        } else {\n            if (position == 0) {\n                sliderAdapter.onBindImageSlide(positionController.getLastUserSlidePosition(), (ImageSlideViewHolder) holder);\n            } else if (position == getItemCount() - 1) {\n                sliderAdapter.onBindImageSlide(positionController.getFirstUserSlidePosition(), (ImageSlideViewHolder) holder);\n            } else {\n                sliderAdapter.onBindImageSlide(position - 1, (ImageSlideViewHolder) holder);\n            }\n        }\n\n        holder.itemView.setOnClickListener(new View.OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                if (onSlideClickListener != null)\n                    onSlideClickListener.onSlideClick(positionController.getUserSlidePosition(holder.getAdapterPosition()));\n            }\n        });\n\n        holder.itemView.setOnTouchListener(itemOnTouchListener);\n    }\n\n    @Override\n    public int getItemCount() {\n        return sliderAdapter.getItemCount() + (loop ? 2 : 0);\n    }\n\n    public void setLoop(boolean loop) {\n        this.loop = loop;\n    }\n\n\n}\n"
  },
  {
    "path": "bannerslider/src/main/java/ss/com/bannerslider/event/OnSlideChangeListener.java",
    "content": "package ss.com.bannerslider.event;\n\n/**\n * @author S.Shahini\n * @since 3/4/18\n */\n\npublic interface OnSlideChangeListener {\n    void onSlideChange(int position);\n}\n"
  },
  {
    "path": "bannerslider/src/main/java/ss/com/bannerslider/event/OnSlideClickListener.java",
    "content": "package ss.com.bannerslider.event;\n\n/**\n * @author S.Shahini\n * @since 3/4/18\n */\n\npublic interface OnSlideClickListener {\n    void onSlideClick(int position);\n}\n"
  },
  {
    "path": "bannerslider/src/main/java/ss/com/bannerslider/indicators/CircleIndicator.java",
    "content": "package ss.com.bannerslider.indicators;\n\nimport android.content.Context;\nimport android.os.Build;\nimport android.support.v4.content.res.ResourcesCompat;\n\nimport ss.com.bannerslider.R;\n\n\n/**\n * @author S.Shahini\n * @since 11/27/16\n */\n\npublic class CircleIndicator extends IndicatorShape {\n\n    public CircleIndicator(Context context, int indicatorSize, boolean mustAnimateChanges) {\n        super(context, indicatorSize, mustAnimateChanges);\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {\n            setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.indicator_circle_unselected, null));\n        } else {\n            setBackgroundDrawable(getResources().getDrawable(R.drawable.indicator_circle_unselected));\n        }\n    }\n\n    @Override\n    public void onCheckedChange(boolean isChecked) {\n        super.onCheckedChange(isChecked);\n        if (isChecked) {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {\n                setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.indicator_circle_selected, null));\n            } else {\n                setBackgroundDrawable(getResources().getDrawable(R.drawable.indicator_circle_selected));\n            }\n        } else {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {\n                setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.indicator_circle_unselected, null));\n            } else {\n                setBackgroundDrawable(getResources().getDrawable(R.drawable.indicator_circle_unselected));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "bannerslider/src/main/java/ss/com/bannerslider/indicators/DashIndicator.java",
    "content": "package ss.com.bannerslider.indicators;\n\nimport android.content.Context;\nimport android.support.v4.content.res.ResourcesCompat;\nimport android.widget.LinearLayout;\n\nimport ss.com.bannerslider.R;\n\n\n/**\n * @author S.Shahini\n * @since 11/27/16\n */\n\npublic class DashIndicator extends IndicatorShape {\n\n\n    public DashIndicator(Context context, int indicatorSize, boolean mustAnimateChanges) {\n        super(context, indicatorSize, mustAnimateChanges);\n        setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.indicator_dash_unselected, null));\n        LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) getLayoutParams();\n        if (layoutParams != null) {\n            layoutParams.width = getResources().getDimensionPixelSize(R.dimen.default_dash_indicator_width);\n            setLayoutParams(layoutParams);\n        }\n    }\n\n    @Override\n    public void onCheckedChange(boolean isChecked) {\n        super.onCheckedChange(isChecked);\n        if (isChecked) {\n            setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.indicator_dash_selected, null));\n        } else {\n            setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.indicator_dash_unselected, null));\n        }\n\n    }\n}\n"
  },
  {
    "path": "bannerslider/src/main/java/ss/com/bannerslider/indicators/IndicatorShape.java",
    "content": "package ss.com.bannerslider.indicators;\n\nimport android.content.Context;\nimport android.view.Gravity;\nimport android.view.animation.Animation;\nimport android.view.animation.ScaleAnimation;\nimport android.widget.ImageView;\nimport android.widget.LinearLayout;\n\nimport ss.com.bannerslider.R;\n\n/**\n * @author S.Shahini\n * @since 11/26/16\n */\npublic abstract class IndicatorShape extends ImageView {\n    private boolean isChecked = false;\n    private int indicatorSize;\n    private boolean mustAnimateChange;\n\n    public static final int CIRCLE = 0;\n    public static final int SQUARE = 1;\n    public static final int ROUND_SQUARE = 2;\n    public static final int DASH = 3;\n\n    private static final int ANIMATION_DURATION = 150;\n\n    public IndicatorShape(Context context, int indicatorSize, boolean mustAnimateChange) {\n        super(context);\n        this.indicatorSize = indicatorSize;\n        this.mustAnimateChange = mustAnimateChange;\n        setup();\n    }\n\n\n    private void setup() {\n        if (this.indicatorSize == 0) {\n            indicatorSize = (int) getResources().getDimension(R.dimen.default_indicator_size);\n        }\n        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(indicatorSize, indicatorSize);\n        int margin = getResources().getDimensionPixelSize(R.dimen.default_indicator_margins);\n        layoutParams.gravity = Gravity.CENTER_VERTICAL;\n        layoutParams.setMargins(margin, 0, margin, 0);\n        setLayoutParams(layoutParams);\n    }\n\n    public void onCheckedChange(boolean isChecked) {\n        if (this.isChecked != isChecked) {\n            if (mustAnimateChange) {\n                if (isChecked) {\n                    scale();\n                } else {\n                    descale();\n                }\n            }else {\n                if (isChecked) {\n                    scale(0);\n                } else {\n                    descale(0);\n                }\n            }\n            this.isChecked = isChecked;\n        }\n    }\n\n    private void scale() {\n        scale(ANIMATION_DURATION);\n    }\n\n    private void scale(int duration) {\n        ScaleAnimation scaleAnimation = new ScaleAnimation(1f, 1.1f, 1f, 1.1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);\n        scaleAnimation.setDuration(duration);\n        scaleAnimation.setFillAfter(true);\n        startAnimation(scaleAnimation);\n    }\n\n\n    private void descale() {\n        descale(ANIMATION_DURATION);\n    }\n\n    private void descale(int duration) {\n        ScaleAnimation scaleAnimation = new ScaleAnimation(1.1f, 1f, 1.1f, 1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);\n        scaleAnimation.setDuration(duration);\n        scaleAnimation.setFillAfter(true);\n        startAnimation(scaleAnimation);\n    }\n\n    public void setMustAnimateChange(boolean mustAnimateChange){\n        this.mustAnimateChange=mustAnimateChange;\n    }\n\n\n}\n"
  },
  {
    "path": "bannerslider/src/main/java/ss/com/bannerslider/indicators/RoundSquareIndicator.java",
    "content": "package ss.com.bannerslider.indicators;\n\nimport android.content.Context;\nimport android.os.Build;\nimport android.support.v4.content.res.ResourcesCompat;\n\nimport ss.com.bannerslider.R;\n\n\n/**\n * @author S.Shahini\n * @since 11/27/16\n */\n\npublic class RoundSquareIndicator extends IndicatorShape {\n\n    public RoundSquareIndicator(Context context, int indicatorSize, boolean mustAnimateChanges) {\n        super(context, indicatorSize, mustAnimateChanges);\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {\n            setBackground(ResourcesCompat.getDrawable(getResources(),R.drawable.indicator_round_square_unselected, null));\n        } else {\n            setBackgroundDrawable(getResources().getDrawable(R.drawable.indicator_round_square_unselected));\n        }\n    }\n\n    @Override\n    public void onCheckedChange(boolean isChecked) {\n        super.onCheckedChange(isChecked);\n        if (isChecked) {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {\n                setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.indicator_round_square_selected, null));\n            } else {\n                setBackgroundDrawable(getResources().getDrawable(R.drawable.indicator_round_square_selected));\n            }\n        } else {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {\n                setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.indicator_round_square_unselected, null));\n            } else {\n                setBackgroundDrawable(getResources().getDrawable(R.drawable.indicator_round_square_unselected));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "bannerslider/src/main/java/ss/com/bannerslider/indicators/SquareIndicator.java",
    "content": "package ss.com.bannerslider.indicators;\n\nimport android.content.Context;\nimport android.os.Build;\nimport android.support.v4.content.res.ResourcesCompat;\n\nimport ss.com.bannerslider.R;\n\n\n/**\n * @author S.Shahini\n * @since 11/27/16\n */\n\npublic class SquareIndicator extends IndicatorShape {\n\n    public SquareIndicator(Context context, int indicatorSize, boolean mustAnimateChanges) {\n        super(context, indicatorSize, mustAnimateChanges);\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {\n            setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.indicator_square_unselected, null));\n        } else {\n            setBackgroundDrawable(getResources().getDrawable(R.drawable.indicator_square_unselected));\n        }\n    }\n\n    @Override\n    public void onCheckedChange(boolean isChecked) {\n        super.onCheckedChange(isChecked);\n        if (isChecked) {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {\n                setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.indicator_square_selected, null));\n            } else {\n                setBackgroundDrawable(getResources().getDrawable(R.drawable.indicator_square_selected));\n            }\n        } else {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {\n                setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.indicator_square_unselected, null));\n            } else {\n                setBackgroundDrawable(getResources().getDrawable(R.drawable.indicator_square_unselected));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "bannerslider/src/main/java/ss/com/bannerslider/viewholder/ImageSlideViewHolder.java",
    "content": "package ss.com.bannerslider.viewholder;\n\nimport android.support.annotation.DrawableRes;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.View;\nimport android.widget.ImageView;\n\nimport ss.com.bannerslider.Slider;\n\npublic class ImageSlideViewHolder extends RecyclerView.ViewHolder {\n    public ImageView imageView;\n\n    public ImageSlideViewHolder(View itemView) {\n        super(itemView);\n        this.imageView = (ImageView) itemView;\n    }\n\n    public void bindImageSlide(String imageUrl) {\n        if (imageUrl != null) {\n            Slider.getImageLoadingService().loadImage(imageUrl, imageView);\n        }\n    }\n\n    public void bindImageSlide(@DrawableRes int imageResourceId) {\n        Slider.getImageLoadingService().loadImage(imageResourceId, imageView);\n    }\n\n    public void bindImageSlide(String url, @DrawableRes int placeHolder, @DrawableRes int error) {\n        Slider.getImageLoadingService().loadImage(url, placeHolder, error, imageView);\n    }\n\n}"
  },
  {
    "path": "bannerslider/src/main/res/drawable/indicator_circle_selected.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\" android:shape=\"oval\">\n    <solid android:color=\"@color/default_indicator_color_selected\"/>\n</shape>"
  },
  {
    "path": "bannerslider/src/main/res/drawable/indicator_circle_unselected.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\" android:shape=\"oval\">\n    <solid android:color=\"@color/default_indicator_color_unselected\"/>\n</shape>"
  },
  {
    "path": "bannerslider/src/main/res/drawable/indicator_dash_selected.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\" android:shape=\"rectangle\">\n    <size android:height=\"3dp\" android:width=\"12dp\" />\n    <solid android:color=\"@color/default_indicator_color_selected\"/>\n    <corners android:radius=\"1dp\"/>\n</shape>"
  },
  {
    "path": "bannerslider/src/main/res/drawable/indicator_dash_unselected.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\" android:shape=\"rectangle\" >\n    <size android:height=\"3dp\"  android:width=\"12dp\"/>\n    <solid android:color=\"@color/default_indicator_color_unselected\"/>\n    <corners android:radius=\"1dp\"/>\n</shape>"
  },
  {
    "path": "bannerslider/src/main/res/drawable/indicator_round_square_selected.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\" android:shape=\"rectangle\">\n    <solid android:color=\"@color/default_indicator_color_selected\"/>\n    <corners android:radius=\"@dimen/round_square_indicator_radius\"/>\n</shape>"
  },
  {
    "path": "bannerslider/src/main/res/drawable/indicator_round_square_unselected.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\" android:shape=\"rectangle\">\n    <solid android:color=\"@color/default_indicator_color_unselected\"/>\n    <corners android:radius=\"@dimen/round_square_indicator_radius\"/>\n</shape>"
  },
  {
    "path": "bannerslider/src/main/res/drawable/indicator_square_selected.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\" android:shape=\"rectangle\">\n    <solid android:color=\"@color/default_indicator_color_selected\"/>\n</shape>"
  },
  {
    "path": "bannerslider/src/main/res/drawable/indicator_square_unselected.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\" android:shape=\"rectangle\">\n    <solid android:color=\"@color/default_indicator_color_unselected\"/>\n</shape>"
  },
  {
    "path": "bannerslider/src/main/res/layout/item_slide_image.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ImageView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:adjustViewBounds=\"true\"\n    android:scaleType=\"centerCrop\">\n\n</ImageView>"
  },
  {
    "path": "bannerslider/src/main/res/values/attrs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <declare-styleable name=\"Slider\">\n        <attr name=\"slider_hideIndicators\" format=\"boolean\" />\n        <attr name=\"slider_indicatorSize\" format=\"dimension\" />\n        <attr name=\"slider_selectedSlideIndicator\" format=\"reference\" />\n        <attr name=\"slider_unselectedSlideIndicator\" format=\"reference\" />\n        <attr name=\"slider_animateIndicators\" format=\"boolean\" />\n        <attr name=\"slider_interval\" format=\"integer\" />\n        <attr name=\"slider_loopSlides\" format=\"boolean\" />\n        <attr name=\"slider_defaultBanner\" format=\"integer\" />\n        <attr name=\"slider_emptyView\" format=\"reference\" />\n    </declare-styleable>\n</resources>"
  },
  {
    "path": "bannerslider/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"default_indicator_color_selected\">#eeee</color>\n    <color name=\"default_indicator_color_unselected\">#66eeeeee</color>\n</resources>"
  },
  {
    "path": "bannerslider/src/main/res/values/dimens.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <dimen name=\"default_indicator_size\">8dp</dimen>\n    <dimen name=\"default_indicator_margins\">5dp</dimen>\n    <dimen name=\"default_dash_indicator_width\">12dp</dimen>\n    <dimen name=\"round_square_indicator_radius\">2dp</dimen>\n    <dimen name=\"max_slider_indicator_size\">16dp</dimen>\n</resources>"
  },
  {
    "path": "bannerslider/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">BannerSlider</string>\n</resources>\n"
  },
  {
    "path": "build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\nbuildscript {\n    repositories {\n        google()\n        jcenter()\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.0.1'\n\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n\n}\n\nallprojects {\n    repositories {\n        google()\n        jcenter()\n    }\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}\n\n\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Wed Apr 04 15:05:26 IRDT 2018\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-4.1-all.zip\n"
  },
  {
    "path": "gradle.properties",
    "content": "## Project-wide Gradle settings.\n#\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n#\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx1024m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n#\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n#Sat Apr 07 10:07:45 IRDT 2018\nsystemProp.http.proxyPassword=\nsystemProp.http.proxyHost=92.222.252.193\norg.gradle.jvmargs=-Xmx1536m\nsystemProp.http.proxyUser=s.shahini\nsystemProp.http.proxyPort=6060\n"
  },
  {
    "path": "gradlew",
    "content": "#!/usr/bin/env bash\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS=\"\"\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn ( ) {\n    echo \"$*\"\n}\n\ndie ( ) {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\nesac\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=$((i+1))\n    done\n    case $i in\n        (0) set -- ;;\n        (1) set -- \"$args0\" ;;\n        (2) set -- \"$args0\" \"$args1\" ;;\n        (3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        (4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        (5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        (6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        (7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        (8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        (9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules\nfunction splitJvmOpts() {\n    JVM_OPTS=(\"$@\")\n}\neval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\nJVM_OPTS[${#JVM_OPTS[*]}]=\"-Dorg.gradle.appname=$APP_BASE_NAME\"\n\nexec \"$JAVACMD\" \"${JVM_OPTS[@]}\" -classpath \"$CLASSPATH\" org.gradle.wrapper.GradleWrapperMain \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto init\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto init\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:init\n@rem Get command-line arguments, handling Windowz variants\n\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\nif \"%@eval[2+2]\" == \"4\" goto 4NT_args\n\n:win9xME_args\n@rem Slurp the command line arguments.\nset CMD_LINE_ARGS=\nset _SKIP=2\n\n:win9xME_args_slurp\nif \"x%~1\" == \"x\" goto execute\n\nset CMD_LINE_ARGS=%*\ngoto execute\n\n:4NT_args\n@rem Get arguments from the 4NT Shell from JP Software\nset CMD_LINE_ARGS=%$\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "settings.gradle",
    "content": "include ':app', ':bannerslider'\n"
  }
]