[
  {
    "path": ".gitignore",
    "content": "*.iml\n.gradle\n/local.properties\n/.idea/\n.DS_Store\n/build\n/captures\n.externalNativeBuild\n"
  },
  {
    "path": "README.MD",
    "content": "[![BuddyBuild Continuous Integration](https://dashboard.buddybuild.com/api/statusImage?appID=5902e07342b8090001523d74&branch=master&build=latest)](https://dashboard.buddybuild.com/apps/5902e07342b8090001523d74/build/latest?branch=master)\n\n# Dagger Android Injector\n\n### [Kotlin branch here](https://github.com/rakshakhegde/DaggerAndroidInjector/tree/kotlin)\n\n**Update**: Latest Dagger 2.11 has provided some helper classes. Check out [**App.java**](https://github.com/rakshakhegde/DaggerAndroidInjector/blob/master/app/src/main/java/me/rakshakhegde/dagger_android_injector/App.java) for the updated simplified usage.\n\n[**Reddit discussion**](https://www.reddit.com/r/androiddev/comments/68jowo/dependency_injection_for_android_how_to_use/)\n\nSample project to demonstrate how to use the new [**dagger-android**](https://google.github.io/dagger/android.html) module in latest Dagger [v2.11](https://github.com/google/dagger/releases). Along with [Proguard rules](https://github.com/rakshakhegde/DaggerAndroidInjector/blob/master/app/proguard-rules.pro#L27). Also shows [MVVM pattern](https://labs.ribot.co.uk/approaching-android-with-mvvm-8ceec02d5442) and [Unit Test](https://github.com/rakshakhegde/DaggerAndroidInjector/blob/master/app/src/test/java/me/rakshakhegde/dagger_android_injector/screens/main_screen/MainViewModelTest.java#L13) setup with [Mockito](https://github.com/rakshakhegde/DaggerAndroidInjector/blob/master/app/build.gradle#L44) on the side.\n\n### Show some :heart:\n[![GitHub stars](https://img.shields.io/github/stars/rakshakhegde/DaggerAndroidInjector.svg?style=social&label=Star)](https://github.com/rakshakhegde/DaggerAndroidInjector) [![GitHub forks](https://img.shields.io/github/forks/rakshakhegde/DaggerAndroidInjector.svg?style=social&label=Fork)](https://github.com/rakshakhegde/DaggerAndroidInjector/fork) [![GitHub watchers](https://img.shields.io/github/watchers/rakshakhegde/DaggerAndroidInjector.svg?style=social&label=Watch)](https://github.com/rakshakhegde/DaggerAndroidInjector) [![GitHub followers](https://img.shields.io/github/followers/rakshakhegde.svg?style=social&label=Follow)](https://github.com/rakshakhegde)  \n[![Twitter Follow](https://img.shields.io/twitter/follow/rakshakhegde.svg?style=social)](https://twitter.com/rakshakhegde)\n\n## Motivation\nRight now you maybe getting the Application instance from Activity and injecting (\"hydrating\") instances based off of that. But the latest version of dagger basically decouples your Activity from knowing who your `Injector` is.\n\nSo this sample project was built because I myself spent a bit of time getting **dagger-android** module setup at my company [Instavans](http://www.instavans.com/). There are things like getting all the correct library versions to work together. So here is a working starting point on how to use Dagger's `@ContributesAndroidInjector` which you can build upon.\n\n*(click on the images to go to the source)*\n\n<p align=\"center\">\n\n<a href=\"https://github.com/rakshakhegde/DaggerAndroidInjector/blob/master/app/src/main/java/me/rakshakhegde/dagger_android_injector/screens/main_screen/MainActivity.java#L30\">\n<img alt=\"MainActivity Demo\" src=\"/ART/main_activity.png\" width=600\"></img>\n</a>\n\n<a href=\"https://github.com/rakshakhegde/DaggerAndroidInjector/blob/master/app/src/main/java/me/rakshakhegde/dagger_android_injector/dependencies/InjectorsModule.java#L14\">\n<img alt=\"Injectors Module Demo\" src=\"/ART/injectors_module.png\" width=\"600\"></img>\n</a>\n\n</p>\n\n\n## License\n\n```txt\nCopyright 2017 Rakshak R.Hegde\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"
  },
  {
    "path": "app/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "app/build.gradle",
    "content": "apply plugin: 'com.android.application'\n\nandroid {\n\tcompileSdkVersion 25\n\tbuildToolsVersion \"25.0.2\"\n\tdefaultConfig {\n\t\tapplicationId \"me.rakshakhegde.dagger_android_injector\"\n\t\tminSdkVersion 14\n\t\ttargetSdkVersion 25\n\t\tversionCode 1\n\t\tversionName \"1.0\"\n\t\ttestInstrumentationRunner \"android.support.test.runner.AndroidJUnitRunner\"\n\t}\n\tbuildTypes {\n\t\trelease {\n\t\t\tminifyEnabled true\n\t\t\tproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n\t\t}\n\t}\n\n\tdataBinding.enabled = true\n}\n\next {\n\tdaggerVersion = \"2.11\"\n\tjsr305Version = \"3.0.1\"\n}\n\ndependencies {\n\tcompile fileTree(dir: 'libs', include: ['*.jar'])\n\tcompile 'com.android.support:appcompat-v7:25.3.1'\n\tcompile 'com.android.support.constraint:constraint-layout:1.0.2'\n\n//\tUncomment if you're not using support library and remove 'dagger-android-support' below\n//\tcompile \"com.google.dagger:dagger-android:$daggerVersion\"\n\tcompile \"com.google.dagger:dagger-android-support:$daggerVersion\"\n\tannotationProcessor \"com.google.dagger:dagger-compiler:$daggerVersion\"\n\tannotationProcessor \"com.google.dagger:dagger-android-processor:$daggerVersion\"\n\n\tcompile \"com.google.code.findbugs:jsr305:$jsr305Version\"\n\n\n\ttestCompile 'junit:junit:4.12'\n\ttestCompile \"org.mockito:mockito-core:2.8.9\"\n\n\n\tandroidTestCompile \"com.google.code.findbugs:jsr305:$jsr305Version\"\n\tandroidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {\n\t\texclude group: 'com.android.support', module: 'support-annotations'\n\t})\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 /Users/rakshakhegde/Library/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\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile\n\n-dontwarn com.google.errorprone.annotations.*\n"
  },
  {
    "path": "app/src/androidTest/java/me/rakshakhegde/dagger_android_injector/ExampleInstrumentedTest.java",
    "content": "package me.rakshakhegde.dagger_android_injector;\n\nimport android.content.Context;\nimport android.support.test.InstrumentationRegistry;\nimport android.support.test.runner.AndroidJUnit4;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\n\nimport static org.junit.Assert.*;\n\n/**\n * Instrumentation test, which will execute on an Android device.\n *\n * @see <a href=\"http://d.android.com/tools/testing\">Testing documentation</a>\n */\n@RunWith(AndroidJUnit4.class)\npublic class ExampleInstrumentedTest {\n\t@Test\n\tpublic void useAppContext() throws Exception {\n\t\t// Context of the app under test.\n\t\tContext appContext = InstrumentationRegistry.getTargetContext();\n\n\t\tassertEquals(\"me.rakshakhegde.dagger_android_injector\", appContext.getPackageName());\n\t}\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          package=\"me.rakshakhegde.dagger_android_injector\">\n\n\t<application\n\t\tandroid:name=\".App\"\n\t\tandroid:allowBackup=\"true\"\n\t\tandroid:icon=\"@mipmap/ic_launcher\"\n\t\tandroid:label=\"@string/app_name\"\n\t\tandroid:roundIcon=\"@mipmap/ic_launcher_round\"\n\t\tandroid:supportsRtl=\"true\"\n\t\tandroid:theme=\"@style/AppTheme\">\n\t\t<activity android:name=\".screens.main_screen.MainActivity\">\n\t\t\t<intent-filter>\n\t\t\t\t<action android:name=\"android.intent.action.MAIN\"/>\n\n\t\t\t\t<category android:name=\"android.intent.category.LAUNCHER\"/>\n\t\t\t</intent-filter>\n\t\t</activity>\n\t</application>\n\n</manifest>\n"
  },
  {
    "path": "app/src/main/java/me/rakshakhegde/dagger_android_injector/App.java",
    "content": "package me.rakshakhegde.dagger_android_injector;\n\nimport dagger.android.AndroidInjector;\nimport dagger.android.DaggerApplication;\nimport me.rakshakhegde.dagger_android_injector.dependencies.DaggerAppComponent;\n\n/**\n * Created by rakshakhegde on 26/04/17.\n */\n\npublic class App extends DaggerApplication {\n\n\t@Override\n\tprotected AndroidInjector<App> applicationInjector() {\n\t\treturn DaggerAppComponent.builder().create(this);\n\t}\n}\n"
  },
  {
    "path": "app/src/main/java/me/rakshakhegde/dagger_android_injector/dependencies/AppComponent.java",
    "content": "package me.rakshakhegde.dagger_android_injector.dependencies;\n\nimport javax.inject.Singleton;\n\nimport dagger.Component;\nimport dagger.android.AndroidInjector;\nimport dagger.android.support.AndroidSupportInjectionModule;\nimport me.rakshakhegde.dagger_android_injector.App;\n\n/**\n * Created by rakshakhegde on 26/04/17.\n */\n\n@Singleton\n@Component(modules = {\n\t\tAndroidSupportInjectionModule.class,\n\t\tInjectorsModule.class\n})\npublic interface AppComponent extends AndroidInjector<App> {\n\n\t@Component.Builder\n\tabstract class Builder extends AndroidInjector.Builder<App> {\n\t}\n}\n"
  },
  {
    "path": "app/src/main/java/me/rakshakhegde/dagger_android_injector/dependencies/InjectorsModule.java",
    "content": "package me.rakshakhegde.dagger_android_injector.dependencies;\n\nimport dagger.Module;\nimport dagger.android.ContributesAndroidInjector;\nimport me.rakshakhegde.dagger_android_injector.screens.main_screen.MainActivity;\nimport me.rakshakhegde.dagger_android_injector.screens.main_screen.MainModule;\n\n/**\n * Created by rakshakhegde on 26/04/17.\n */\n@Module\nabstract class InjectorsModule {\n\n\t@ContributesAndroidInjector(modules = {MainModule.class})\n\tabstract MainActivity mainActivity();\n\n//\tAdd more ContributesAndroidInjector here...\n}\n"
  },
  {
    "path": "app/src/main/java/me/rakshakhegde/dagger_android_injector/screens/main_screen/MainActivity.java",
    "content": "package me.rakshakhegde.dagger_android_injector.screens.main_screen;\n\nimport android.databinding.DataBindingUtil;\nimport android.os.Bundle;\nimport android.support.v7.app.AppCompatActivity;\nimport android.widget.Toast;\n\nimport javax.inject.Inject;\n\nimport dagger.android.AndroidInjection;\nimport me.rakshakhegde.dagger_android_injector.R;\nimport me.rakshakhegde.dagger_android_injector.databinding.ActivityMainBinding;\n\npublic class MainActivity extends AppCompatActivity implements MainView {\n\n\t/**\n\t * MVVM pattern\n\t */\n\t@Inject\n\tMainViewModel VM;\n\n\t@Override\n\tprotected void onCreate(Bundle savedInstanceState) {\n\n\t\t/*\n\t\t  Make sure you're injecting before onCreate. Order matters if using Fragments.\n\t\t  On Activity restore, if injection is done after onCreate, app could crash if Fragments\n\t\t  try to inject first.\n\t\t */\n\t\tAndroidInjection.inject(this);\n\n\t\tsuper.onCreate(savedInstanceState);\n\n\t\tActivityMainBinding binding = DataBindingUtil.setContentView(this,\n\t\t\t\tR.layout.activity_main);\n\t\tbinding.setVM(VM);\n\t}\n\n\t@Override\n\tpublic void showMessage(int message) {\n\t\tToast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();\n\t}\n}\n"
  },
  {
    "path": "app/src/main/java/me/rakshakhegde/dagger_android_injector/screens/main_screen/MainModule.java",
    "content": "package me.rakshakhegde.dagger_android_injector.screens.main_screen;\n\nimport dagger.Binds;\nimport dagger.Module;\nimport dagger.Provides;\n\n/**\n * Created by rakshakhegde on 26/04/17.\n */\n@Module\npublic abstract class MainModule {\n\n\t@Binds\n\tabstract MainView mainView(MainActivity act);\n\n\t@Provides\n\tstatic String providesUnusedData() {\n\t\treturn \"Unused Data\";\n\t}\n\n\t// Add more @Provides here\n}\n"
  },
  {
    "path": "app/src/main/java/me/rakshakhegde/dagger_android_injector/screens/main_screen/MainView.java",
    "content": "package me.rakshakhegde.dagger_android_injector.screens.main_screen;\n\n/**\n * Created by rakshakhegde on 26/04/17.\n */\n\npublic interface MainView {\n\tvoid showMessage(int message);\n}\n"
  },
  {
    "path": "app/src/main/java/me/rakshakhegde/dagger_android_injector/screens/main_screen/MainViewModel.java",
    "content": "package me.rakshakhegde.dagger_android_injector.screens.main_screen;\n\nimport javax.inject.Inject;\n\nimport me.rakshakhegde.dagger_android_injector.R;\n\n/**\n * Created by rakshakhegde on 26/04/17.\n */\n\npublic class MainViewModel {\n\n\tprivate MainView V;\n\n\t@Inject\n\tMainViewModel(MainView V) {\n\t\tthis.V = V;\n\t}\n\n\tpublic void showBtnClicked() {\n\t\tV.showMessage(R.string.showing_toast);\n\t}\n}\n"
  },
  {
    "path": "app/src/main/res/layout/activity_main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout>\n\n\t<data>\n\n\t\t<variable\n\t\t\tname=\"VM\"\n\t\t\ttype=\"me.rakshakhegde.dagger_android_injector.screens.main_screen.MainViewModel\"/>\n\t</data>\n<android.support.constraint.ConstraintLayout\n\txmlns:android=\"http://schemas.android.com/apk/res/android\"\n\txmlns:app=\"http://schemas.android.com/apk/res-auto\"\n\txmlns:tools=\"http://schemas.android.com/tools\"\n\tandroid:layout_width=\"match_parent\"\n\tandroid:layout_height=\"match_parent\"\n\ttools:context=\"me.rakshakhegde.dagger_android_injector.screens.main_screen.MainActivity\">\n\n\t<Button\n\t\tandroid:layout_width=\"wrap_content\"\n\t\tandroid:layout_height=\"wrap_content\"\n\t\tandroid:onClick=\"@{() -> VM.showBtnClicked()}\"\n\t\tandroid:text=\"@string/show_toast\"\n\t\tapp:layout_constraintBottom_toBottomOf=\"parent\"\n\t\tapp:layout_constraintLeft_toLeftOf=\"parent\"\n\t\tapp:layout_constraintRight_toRightOf=\"parent\"\n\t\tapp:layout_constraintTop_toTopOf=\"parent\"/>\n\n</android.support.constraint.ConstraintLayout>\n</layout>\n"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<color name=\"colorPrimary\">#3F51B5</color>\n\t<color name=\"colorPrimaryDark\">#303F9F</color>\n\t<color name=\"colorAccent\">#FF4081</color>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "content": "<resources>\n\t<string name=\"app_name\">Dagger AndroidInjector</string>\n\t<string name=\"show_toast\">Show Toast</string>\n\t<string name=\"showing_toast\">Showing Toast ^_^</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n\t<!-- Base application theme. -->\n\t<style name=\"AppTheme\" parent=\"Theme.AppCompat.Light\">\n\t\t<!-- Customize your theme here. -->\n\t\t<item name=\"colorPrimary\">@color/colorPrimary</item>\n\t\t<item name=\"colorPrimaryDark\">@color/colorPrimaryDark</item>\n\t\t<item name=\"colorAccent\">@color/colorAccent</item>\n\t</style>\n\n</resources>\n"
  },
  {
    "path": "app/src/test/java/me/rakshakhegde/dagger_android_injector/screens/main_screen/MainViewModelTest.java",
    "content": "package me.rakshakhegde.dagger_android_injector.screens.main_screen;\n\nimport org.junit.Test;\n\nimport me.rakshakhegde.dagger_android_injector.R;\n\nimport static org.mockito.Mockito.mock;\nimport static org.mockito.Mockito.verify;\n\n/**\n * Created by rakshakhegde on 27/04/17.\n */\npublic class MainViewModelTest {\n\n\t@Test\n\tpublic void showBtnClicked() {\n\t\t// Setup\n\t\tMainView mockView = mock(MainView.class);\n\n\t\t// Wiring\n\t\tMainViewModel VM = new MainViewModel(mockView);\n\t\tVM.showBtnClicked();\n\n\t\t// Verify\n\t\tverify(mockView).showMessage(R.string.showing_toast);\n\t}\n\n}\n"
  },
  {
    "path": "build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n\text {\n\t\tcompiler_version = \"2.3.1\"\n\t}\n\trepositories {\n\t\tjcenter()\n\t}\n\tdependencies {\n\t\tclasspath \"com.android.tools.build:gradle:$compiler_version\"\n\n\t\t// NOTE: Do not place your application dependencies here; they belong\n\t\t// in the individual module build.gradle files\n\t}\n}\n\nallprojects {\n\trepositories {\n\t\tjcenter()\n\t}\n}\n\ntask clean(type: Delete) {\n\tdelete rootProject.buildDir\n}\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Wed Apr 26 11:14:35 IST 2017\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-3.5-all.zip\n"
  },
  {
    "path": "gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\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.\norg.gradle.jvmargs=-Xmx1536m\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"
  },
  {
    "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'\n"
  }
]