[
  {
    "path": ".gitignore",
    "content": "# Built application files\n*.apk\n*.ap_\n\n# Files for the ART/Dalvik VM\n*.dex\n\n# Java class files\n*.class\n\n# Generated files\nbin/\ngen/\nout/\n\n# Gradle files\n.gradle/\nbuild/\n\n# Local configuration file (sdk path, etc)\nlocal.properties\n\n# Proguard folder generated by Eclipse\nproguard/\n\n# Log Files\n*.log\n\n# Android Studio Navigation editor temp files\n.navigation/\n\n# Android Studio captures folder\ncaptures/\n\n# Intellij\n*.iml\n.idea/\n.idea/workspace.xml\n\n# Keystore files\n*.jks\n\n# Mac \n.DS_Store\n\n# Other\n.externalNativeBuild\ngoogle-services.json\n"
  },
  {
    "path": "README.md",
    "content": "# Firebase MLKit\nA collection of real life apps built using [Firebase ML Kit](https://firebase.google.com/products/ml-kit/) APIs.\n\n# Setup Instructions\n\n1. Clone the project\n2. Add it to your Firebase Console\n3. Profit!\n\n# Blogposts covering the making of this app\n\n* [Creating a Google Lens clone using Firebase MLKit](https://medium.com/coding-blocks/google-lens-firebase-54d34d7e1505)\n* [Creating a Credit Card Scanner using Firebase MLKit](https://medium.com/coding-blocks/creating-a-credit-card-scanner-using-firebase-mlkit-5345140f6a5c)\n* [Creating a Barcode Scanner using Firebase MLKit](https://medium.com/coding-blocks/creating-a-qr-code-reader-using-firebase-mlkit-60bb882f95f9)\n* [Identifying Places in a provided Image using Firebase MLKit](https://medium.com/coding-blocks/identifying-places-in-a-provided-image-using-firebase-mlkit-fe3c918756da)\n* [Building “Pokédex” in Android using TensorFlow Lite and Firebase’s ML Kit](https://heartbeat.fritz.ai/building-pok%C3%A9dex-in-android-using-tensorflow-lite-and-firebase-cc780848395)\n\n# Screenshots : \n![image01](https://raw.githubusercontent.com/the-dagger/MLKitAndroid/master/art/screen01.png)\n\n# Libraries\n\n* [CameraKit Android](https://github.com/CameraKit/camerakit-android)\n* [FAB Progress to show progress](https://github.com/JorgeCastilloPrz/FABProgressCircle)\n* [Picking Image from camera/gallery](https://github.com/jkwiecien/EasyImage)\n\nBuilt with ❤️ by [@the-dagger](https://github.com/the-dagger)\n"
  },
  {
    "path": "app/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "app/build.gradle",
    "content": "apply plugin: 'com.android.application'\n\napply plugin: 'kotlin-android'\napply plugin: 'kotlin-android-extensions'\n\nandroid {\n    compileSdkVersion 28\n    defaultConfig {\n        applicationId \"io.github.the_dagger.mlkit\"\n        minSdkVersion 21\n        targetSdkVersion 28\n        versionCode 1\n        versionName \"1.0\"\n        testInstrumentationRunner \"android.support.test.runner.AndroidJUnitRunner\"\n        aaptOptions {\n            noCompress \"tflite\"\n        }\n    }\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: 'libs', include: ['*.jar'])\n    implementation \"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version\"\n    implementation 'com.android.support:appcompat-v7:28.0.0'\n    implementation 'com.android.support:exifinterface:28.0.0'\n    implementation 'com.android.support:support-media-compat:28.0.0'\n    implementation 'com.android.support:support-v4:28.0.0'\n    implementation 'com.android.support:design:28.0.0'\n    implementation 'com.android.support:cardview-v7:28.0.0'\n    implementation 'com.android.support.constraint:constraint-layout:1.1.3'\n    implementation 'com.google.firebase:firebase-ml-vision-image-label-model:15.0.0'\n    implementation \"com.google.firebase:firebase-ml-model-interpreter:16.2.0\"\n    implementation \"com.google.firebase:firebase-ml-vision:17.0.0\"\n    implementation 'com.google.firebase:firebase-core:16.0.3'\n    implementation 'com.google.firebase:firebase-crash:16.2.0'\n    testImplementation 'junit:junit:4.12'\n    androidTestImplementation 'com.android.support.test:runner:1.0.2'\n    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'\n    implementation 'com.wonderkiln:camerakit:0.13.1'\n    implementation 'com.github.jorgecastilloprz:fabprogresscircle:1.01@aar'\n    implementation 'com.github.jkwiecien:EasyImage:1.3.1'\n}\n\napply plugin: 'com.google.gms.google-services'\n"
  },
  {
    "path": "app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\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"
  },
  {
    "path": "app/release/output.json",
    "content": "[{\"outputType\":{\"type\":\"APK\"},\"apkInfo\":{\"type\":\"MAIN\",\"splits\":[],\"versionCode\":1,\"versionName\":\"1.0\",\"enabled\":true,\"outputFile\":\"app-release.apk\",\"fullName\":\"release\",\"baseName\":\"release\"},\"path\":\"app-release.apk\",\"properties\":{}}]"
  },
  {
    "path": "app/src/androidTest/java/io/github/the_dagger/mlkit/ExampleInstrumentedTest.kt",
    "content": "package io.github.the_dagger.mlkit\n\nimport android.support.test.InstrumentationRegistry\nimport android.support.test.runner.AndroidJUnit4\n\nimport org.junit.Test\nimport org.junit.runner.RunWith\n\nimport org.junit.Assert.*\n\n/**\n * Instrumented test, which will execute on an Android device.\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\n@RunWith(AndroidJUnit4::class)\nclass ExampleInstrumentedTest {\n    @Test\n    fun useAppContext() {\n        // Context of the app under test.\n        val appContext = InstrumentationRegistry.getTargetContext()\n        assertEquals(\"io.github.the_dagger.mlkit\", appContext.packageName)\n    }\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=\"io.github.the_dagger.mlkit\">\n\n    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />\n\n    <application\n        android:allowBackup=\"true\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style/AppTheme\">\n        <meta-data\n            android:name=\"preloaded_fonts\"\n            android:resource=\"@array/preloaded_fonts\" />\n\n        <activity\n            android:name=\".activity.CardScannerActivity\"\n            android:theme=\"@style/AppThemeNoActionbar\">\n            <meta-data\n                android:name=\"com.google.firebase.ml.vision.DEPENDENCIES\"\n                android:value=\"text\" />\n        </activity>\n        <activity\n            android:name=\".activity.ImageLabelActivity\"\n            android:theme=\"@style/AppThemeNoActionbar\">\n            <meta-data\n                android:name=\"com.google.firebase.ml.vision.DEPENDENCIES\"\n                android:value=\"label\" />\n        </activity>\n        <activity\n            android:name=\".activity.FaceDetectionActivity\"\n            android:theme=\"@style/AppThemeNoActionbar\">\n            <meta-data\n                android:name=\"com.google.firebase.ml.vision.DEPENDENCIES\"\n                android:value=\"face\" />\n        </activity>\n        <activity\n            android:name=\".activity.HomeActivity\"\n            android:launchMode=\"singleTop\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n        <activity\n            android:name=\".activity.BarCodeReaderActivity\"\n            android:theme=\"@style/AppThemeNoActionbar\">\n            <meta-data\n                android:name=\"com.google.firebase.ml.vision.DEPENDENCIES\"\n                android:value=\"barcode\" />\n        </activity>\n        <activity\n            android:name=\".activity.LandmarkDetectorActivity\"\n            android:parentActivityName=\".activity.HomeActivity\">\n\n        </activity>\n        <activity android:name=\".activity.PokemonDetectorActivity\"\n            android:theme=\"@style/Theme.AppCompat.Light.NoActionBar\"/>\n\n    </application>\n</manifest>"
  },
  {
    "path": "app/src/main/assets/pokelist.txt",
    "content": "\"abra\",\n\"aerodactyl\",\n\"alakazam\",\n\"arbok\",\n\"arcanine\",\n\"articuno\",\n\"beedrill\",\n\"bellsprout\",\n\"blastoise\",\n\"bulbasaur\",\n\"butterfree\",\n\"caterpie\",\n\"chansey\",\n\"charizard\",\n\"charmander\",\n\"charmeleon\",\n\"clefable\",\n\"clefairy\",\n\"cloyster\",\n\"cubone\",\n\"dewgong\",\n\"diglett\",\n\"ditto\",\n\"dodrio\",\n\"doduo\",\n\"dragonair\",\n\"dragonite\",\n\"dratini\",\n\"drowzee\",\n\"dugtrio\",\n\"eevee\",\n\"ekans\",\n\"electabuzz\",\n\"electrode\",\n\"exeggcute\",\n\"exeggutor\",\n\"farfetchd\",\n\"fearow\",\n\"flareon\",\n\"gastly\",\n\"gengar\",\n\"geodude\",\n\"gloom\",\n\"golbat\",\n\"goldeen\",\n\"golduck\",\n\"golem\",\n\"graveler\",\n\"grimer\",\n\"growlithe\",\n\"gyarados\",\n\"haunter\",\n\"hitmonchan\",\n\"hitmonlee\",\n\"horsea\",\n\"hypno\",\n\"ivysaur\",\n\"jigglypuff\",\n\"jolteon\",\n\"jynx\",\n\"kabuto\",\n\"kabutops\",\n\"kadabra\",\n\"kakuna\",\n\"kangaskhan\",\n\"kingler\",\n\"koffing\",\n\"krabby\",\n\"lapras\",\n\"lickitung\",\n\"machamp\",\n\"machoke\",\n\"machop\",\n\"magikarp\",\n\"magmar\",\n\"magnemite\",\n\"magneton\",\n\"mankey\",\n\"marowak\",\n\"meowth\",\n\"metapod\",\n\"mew\",\n\"mewtwo\",\n\"moltres\",\n\"mrmime\",\n\"muk\",\n\"nidoking\",\n\"nidoqueen\",\n\"nidorina\",\n\"nidorino\",\n\"ninetales\",\n\"oddish\",\n\"omanyte\",\n\"omastar\",\n\"onix\",\n\"paras\",\n\"parasect\",\n\"persian\",\n\"pidgeot\",\n\"pidgeotto\",\n\"pidgey\",\n\"pikachu\",\n\"pinsir\",\n\"poliwag\",\n\"poliwhirl\",\n\"poliwrath\",\n\"ponyta\",\n\"porygon\",\n\"primeape\",\n\"psyduck\",\n\"raichu\",\n\"rapidash\",\n\"raticate\",\n\"rattata\",\n\"rhydon\",\n\"rhyhorn\",\n\"sandshrew\",\n\"sandslash\",\n\"scyther\",\n\"seadra\",\n\"seaking\",\n\"seel\",\n\"shellder\",\n\"slowbro\",\n\"slowpoke\",\n\"snorlax\",\n\"spearow\",\n\"squirtle\",\n\"starmie\",\n\"staryu\",\n\"tangela\",\n\"tauros\",\n\"tentacool\",\n\"tentacruel\",\n\"vaporeon\",\n\"venomoth\",\n\"venonat\",\n\"venusaur\",\n\"victreebel\",\n\"vileplume\",\n\"voltorb\",\n\"vulpix\",\n\"wartortle\",\n\"weedle\",\n\"weepinbell\",\n\"weezing\",\n\"wigglytuff\",\n\"zapdos\",\n\"zubat\"\n"
  },
  {
    "path": "app/src/main/java/io/github/the_dagger/mlkit/activity/BarCodeReaderActivity.kt",
    "content": "package io.github.the_dagger.mlkit.activity\n\nimport android.graphics.Bitmap\nimport android.os.Bundle\nimport android.support.design.widget.BottomSheetBehavior\nimport android.view.View\nimport android.widget.Toast\nimport com.google.firebase.ml.vision.FirebaseVision\nimport com.google.firebase.ml.vision.barcode.FirebaseVisionBarcode\nimport com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetectorOptions\nimport com.google.firebase.ml.vision.common.FirebaseVisionImage\nimport io.github.the_dagger.mlkit.R\nimport kotlinx.android.synthetic.main.activity_main.*\nimport kotlinx.android.synthetic.main.layout_qr_code_reader.*\n\n\nclass BarCodeReaderActivity : BaseCameraActivity() {\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setupBottomSheet(R.layout.layout_qr_code_reader)\n    }\n\n    override fun onClick(v: View) {\n        fabProgressCircle.show()\n        cameraView.captureImage { cameraKitImage ->\n            // Get the Bitmap from the captured shot\n            getQRCodeDetails(cameraKitImage.bitmap)\n            runOnUiThread {\n                showPreview()\n                imagePreview.setImageBitmap(cameraKitImage.bitmap)\n            }\n        }\n    }\n\n    private fun getQRCodeDetails(bitmap: Bitmap) {\n        val options = FirebaseVisionBarcodeDetectorOptions.Builder()\n                .setBarcodeFormats(\n                        FirebaseVisionBarcode.FORMAT_ALL_FORMATS)\n                .build()\n        val detector = FirebaseVision.getInstance().getVisionBarcodeDetector(options)\n        val image = FirebaseVisionImage.fromBitmap(bitmap)\n        detector.detectInImage(image)\n                .addOnSuccessListener {\n                    for (firebaseBarcode in it) {\n\n                        codeData.text = firebaseBarcode.displayValue //Display contents inside the barcode\n\n                        when (firebaseBarcode.valueType) {\n                        //Handle the URL here\n                            FirebaseVisionBarcode.TYPE_URL -> firebaseBarcode.url\n                        // Handle the contact info here, i.e. address, name, phone, etc.\n                            FirebaseVisionBarcode.TYPE_CONTACT_INFO -> firebaseBarcode.contactInfo\n                        // Handle the wifi here, i.e. firebaseBarcode.wifi.ssid, etc.\n                            FirebaseVisionBarcode.TYPE_WIFI -> firebaseBarcode.wifi\n                        //Handle more type of Barcodes\n                        }\n\n                    }\n                }\n                .addOnFailureListener {\n                    it.printStackTrace()\n                    Toast.makeText(baseContext, \"Sorry, something went wrong!\", Toast.LENGTH_SHORT).show()\n                }\n                .addOnCompleteListener {\n                    fabProgressCircle.hide()\n                    sheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED\n                }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/io/github/the_dagger/mlkit/activity/BaseCameraActivity.kt",
    "content": "package io.github.the_dagger.mlkit.activity\n\nimport android.os.Bundle\nimport android.support.annotation.LayoutRes\nimport android.support.design.widget.BottomSheetBehavior\nimport android.support.design.widget.CoordinatorLayout\nimport android.support.v7.app.AppCompatActivity\nimport android.view.Gravity\nimport android.view.View\nimport io.github.the_dagger.mlkit.R\nimport kotlinx.android.synthetic.main.activity_main.*\n\nabstract class BaseCameraActivity : AppCompatActivity(), View.OnClickListener {\n\n    lateinit var sheetBehavior: BottomSheetBehavior<*>\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n        btnRetry.setOnClickListener {\n            if (cameraView.visibility == View.VISIBLE) showPreview() else hidePreview()\n        }\n        fab_take_photo.setOnClickListener(this)\n    }\n\n    fun setupBottomSheet(@LayoutRes id : Int){\n        //Using a ViewStub since changing the layout of an <include> tag dynamically wasn't possible\n        stubView.layoutResource = id\n        val inflatedView = stubView.inflate()\n        //Set layout parameters for the inflated bottomsheet\n        val lparam = inflatedView.layoutParams as CoordinatorLayout.LayoutParams\n        lparam.behavior = BottomSheetBehavior<View>()\n        inflatedView.layoutParams = lparam\n        sheetBehavior = BottomSheetBehavior.from(inflatedView)\n        sheetBehavior.peekHeight = 224\n        //Anchor the FAB to the end of inflated bottom sheet\n        val lp = fabProgressCircle.layoutParams as CoordinatorLayout.LayoutParams\n        lp.anchorId = inflatedView.id\n        lp.anchorGravity = Gravity.END\n        fabProgressCircle.layoutParams = lp\n        //Hide the fab as bottomSheet is expanded\n        sheetBehavior.setBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() {\n            override fun onStateChanged(bottomSheet: View, newState: Int) {}\n            override fun onSlide(bottomSheet: View, slideOffset: Float) {\n                fab_take_photo.animate().scaleX(1 - slideOffset).scaleY(1 - slideOffset).setDuration(0).start()\n            }\n        })\n    }\n\n    override fun onResume() {\n        super.onResume()\n        cameraView.start()\n    }\n\n    override fun onPause() {\n        cameraView.stop()\n        super.onPause()\n    }\n\n    protected fun showPreview() {\n        framePreview.visibility = View.VISIBLE\n        cameraView.visibility = View.GONE\n    }\n\n    protected fun hidePreview() {\n        framePreview.visibility = View.GONE\n        cameraView.visibility = View.VISIBLE\n    }\n}"
  },
  {
    "path": "app/src/main/java/io/github/the_dagger/mlkit/activity/CardScannerActivity.kt",
    "content": "package io.github.the_dagger.mlkit.activity\n\nimport android.graphics.Bitmap\nimport android.os.Bundle\nimport android.support.design.widget.BottomSheetBehavior\nimport android.util.Log\nimport android.view.View\nimport android.widget.Toast\nimport com.google.firebase.ml.vision.FirebaseVision\nimport com.google.firebase.ml.vision.common.FirebaseVisionImage\nimport io.github.the_dagger.mlkit.R\nimport kotlinx.android.synthetic.main.activity_main.*\nimport kotlinx.android.synthetic.main.layout_card_scanner.*\n\n\nclass CardScannerActivity : BaseCameraActivity() {\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setupBottomSheet(R.layout.layout_card_scanner)\n    }\n\n    override fun onClick(v: View?) {\n        fabProgressCircle.show()\n        cameraView.captureImage { cameraKitImage ->\n            // Get the Bitmap from the captured shot\n            getCardDetailsFromCloud(cameraKitImage.bitmap)\n            runOnUiThread {\n                showPreview()\n                imagePreview.setImageBitmap(cameraKitImage.bitmap)\n            }\n        }\n    }\n\n    private fun getCardDetailsFromCloud(bitmap: Bitmap) {\n        val image = FirebaseVisionImage.fromBitmap(bitmap)\n        val firebaseVisionTextDetector = FirebaseVision.getInstance().cloudTextRecognizer\n\n        firebaseVisionTextDetector.processImage(image)\n                .addOnSuccessListener {\n                    Log.e(\"TAG\", it.text)\n                    val words = it.text.split(\"\\n\")\n                    for (word in words) {\n                        Log.e(\"TAG\", word)\n                        //REGEX for detecting a credit card\n                        if (word.replace(\" \", \"\").matches(Regex(\"^(?:4[0-9]{12}(?:[0-9]{3})?|[25][1-7][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\\\d{3})\\\\d{11})\\$\")))\n                            tvCardNumber.text = word\n                        //Find a better way to do this\n                        if (word.contains(\"/\")) {\n                            for (year in word.split(\" \")) {\n                                if (year.contains(\"/\"))\n                                    tvCardExpiry.text = year\n                            }\n                        }\n                    }\n                    sheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED\n                }\n                .addOnFailureListener {\n                    Toast.makeText(baseContext, \"Sorry, something went wrong!\", Toast.LENGTH_SHORT).show()\n                }\n                .addOnCompleteListener {\n                    fabProgressCircle.hide()\n                }\n    }\n}"
  },
  {
    "path": "app/src/main/java/io/github/the_dagger/mlkit/activity/FaceDetectionActivity.kt",
    "content": "package io.github.the_dagger.mlkit.activity\n\nimport android.graphics.Bitmap\nimport android.os.Bundle\nimport android.support.design.widget.BottomSheetBehavior\nimport android.support.v7.widget.LinearLayoutManager\nimport android.view.View\nimport android.widget.Toast\nimport com.google.firebase.ml.vision.FirebaseVision\nimport com.google.firebase.ml.vision.common.FirebaseVisionImage\nimport com.google.firebase.ml.vision.face.FirebaseVisionFace\nimport com.google.firebase.ml.vision.face.FirebaseVisionFaceDetector\nimport com.google.firebase.ml.vision.face.FirebaseVisionFaceDetectorOptions\nimport com.wonderkiln.camerakit.CameraKit\nimport io.github.the_dagger.mlkit.R\nimport io.github.the_dagger.mlkit.R.id.*\nimport io.github.the_dagger.mlkit.activity.BaseCameraActivity\nimport io.github.the_dagger.mlkit.adapter.FaceAdapter\nimport kotlinx.android.synthetic.main.activity_main.*\nimport kotlinx.android.synthetic.main.layout_image_label.*\n\nclass FaceDetectionActivity : BaseCameraActivity() {\n\n    private val detectedFaces = arrayListOf<FirebaseVisionFace>()\n    private val adapter = FaceAdapter(detectedFaces)\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n//        cameraView.facing = CameraKit.Constants.FACING_FRONT\n        setupBottomSheet(R.layout.layout_image_label)\n        rvLabel.layoutManager = LinearLayoutManager(this)\n\n        rvLabel.adapter = adapter\n    }\n\n    private fun getFaceDetails(bitmap: Bitmap) {\n        val options: FirebaseVisionFaceDetectorOptions = FirebaseVisionFaceDetectorOptions.Builder()\n                .setLandmarkType(FirebaseVisionFaceDetectorOptions.ALL_LANDMARKS)\n                .setClassificationType(FirebaseVisionFaceDetectorOptions.ALL_CLASSIFICATIONS)\n                .setModeType(FirebaseVisionFaceDetectorOptions.FAST_MODE)\n                .build()\n        val image: FirebaseVisionImage = FirebaseVisionImage.fromBitmap(bitmap)\n        val faceDetector = FirebaseVision.getInstance().getVisionFaceDetector(options)\n\n        faceDetector.detectInImage(image)\n                .addOnSuccessListener {\n                    detectedFaces.clear()\n                    detectedFaces.addAll(it)\n                    adapter.notifyDataSetChanged()\n                }\n                .addOnFailureListener {\n                    Toast.makeText(this, \"Sorry, an error occurred\", Toast.LENGTH_SHORT).show()\n                }\n                .addOnCompleteListener {\n                    sheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED\n                    fabProgressCircle.hide()\n                }\n    }\n\n    override fun onClick(v: View?) {\n        fabProgressCircle.show()\n        cameraView.captureImage { cameraKitImage ->\n            // Get the Bitmap from the captured shot\n            getFaceDetails(cameraKitImage.bitmap)\n            runOnUiThread {\n                showPreview()\n                imagePreview.setImageBitmap(cameraKitImage.bitmap)\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/io/github/the_dagger/mlkit/activity/HomeActivity.kt",
    "content": "package io.github.the_dagger.mlkit.activity\n\nimport android.support.v7.app.AppCompatActivity\nimport android.os.Bundle\nimport android.support.v7.widget.LinearLayoutManager\nimport io.github.the_dagger.mlkit.adapter.HomeAdapter\nimport io.github.the_dagger.mlkit.model.PojoApi\nimport io.github.the_dagger.mlkit.R\nimport kotlinx.android.synthetic.main.activity_home.*\n\nclass HomeActivity : AppCompatActivity() {\n\n    private val apiList by lazy {\n        ArrayList<PojoApi>()\n    }\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_home)\n        with(apiList) {\n            add(PojoApi(R.drawable.image_labelling, getString(R.string.title_labelling), getString(R.string.desc_labelling), 0))\n            add(PojoApi(R.drawable.text_recognition, getString(R.string.title_text), getString(R.string.desc_text), 1))\n            add(PojoApi(R.drawable.barcode_scanning, getString(R.string.title_barcode), getString(R.string.desc_barcode), 2))\n            add(PojoApi(R.drawable.landmark_identification, getString(R.string.title_landmark), getString(R.string.desc_landmark), 3))\n            add(PojoApi(R.drawable.face_detection, getString(R.string.title_face), getString(R.string.desc_face), 4))\n        }\n\n        rvHome.layoutManager = LinearLayoutManager(this)\n        rvHome.adapter = HomeAdapter(apiList)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/io/github/the_dagger/mlkit/activity/ImageLabelActivity.kt",
    "content": "package io.github.the_dagger.mlkit.activity\n\nimport android.graphics.Bitmap\nimport android.os.Bundle\nimport android.support.design.widget.BottomSheetBehavior\nimport android.support.v7.widget.LinearLayoutManager\nimport android.view.View\nimport android.widget.Toast\nimport com.google.firebase.ml.vision.FirebaseVision\nimport com.google.firebase.ml.vision.common.FirebaseVisionImage\nimport io.github.the_dagger.mlkit.R\nimport io.github.the_dagger.mlkit.adapter.ImageLabelAdapter\nimport kotlinx.android.synthetic.main.activity_main.*\nimport kotlinx.android.synthetic.main.layout_image_label.*\n\nclass ImageLabelActivity : BaseCameraActivity() {\n\n    private var itemsList: ArrayList<Any> = ArrayList()\n    private lateinit var itemAdapter: ImageLabelAdapter\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setupBottomSheet(R.layout.layout_image_label)\n        rvLabel.layoutManager = LinearLayoutManager(this)\n    }\n\n    private fun getLabelsFromDevice(bitmap: Bitmap) {\n        val image = FirebaseVisionImage.fromBitmap(bitmap)\n        val detector = FirebaseVision.getInstance().visionLabelDetector\n        itemsList.clear()\n        detector.detectInImage(image)\n                .addOnSuccessListener {\n                    // Task completed successfully\n                    fabProgressCircle.hide()\n                    itemsList.addAll(it)\n                    itemAdapter = ImageLabelAdapter(itemsList, false)\n                    rvLabel.adapter = itemAdapter\n                    sheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED)\n                }\n                .addOnFailureListener {\n                    // Task failed with an exception\n                    fabProgressCircle.hide()\n                    Toast.makeText(baseContext,\"Sorry, something went wrong!\",Toast.LENGTH_SHORT).show()\n                }\n    }\n\n    private fun getLabelsFromClod(bitmap: Bitmap) {\n        val image = FirebaseVisionImage.fromBitmap(bitmap)\n        val detector = FirebaseVision.getInstance()\n                .visionCloudLabelDetector\n        itemsList.clear()\n        detector.detectInImage(image)\n                .addOnSuccessListener {\n                    // Task completed successfully\n                    fabProgressCircle.hide()\n                    itemsList.addAll(it)\n                    itemAdapter = ImageLabelAdapter(itemsList, true)\n                    rvLabel.adapter = itemAdapter\n                    sheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED)\n                }\n                .addOnFailureListener {\n                    // Task failed with an exception\n                    fabProgressCircle.hide()\n                    Toast.makeText(baseContext,\"Sorry, something went wrong!\",Toast.LENGTH_SHORT).show()\n                }\n    }\n\n    override fun onClick(v: View?) {\n        fabProgressCircle.show()\n        cameraView.captureImage { cameraKitImage ->\n            // Get the Bitmap from the captured shot\n            getLabelsFromClod(cameraKitImage.bitmap)\n            runOnUiThread {\n                showPreview()\n                imagePreview.setImageBitmap(cameraKitImage.bitmap)\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/io/github/the_dagger/mlkit/activity/LandmarkDetectorActivity.kt",
    "content": "package io.github.the_dagger.mlkit.activity\n\nimport android.Manifest\nimport android.content.Intent\nimport android.content.pm.PackageManager\nimport android.graphics.Bitmap\nimport android.graphics.BitmapFactory\nimport android.os.Bundle\nimport android.support.design.widget.BottomSheetBehavior\nimport android.support.v4.app.ActivityCompat\nimport android.util.Log\nimport android.view.View\nimport android.widget.Toast\nimport com.google.firebase.ml.vision.FirebaseVision\nimport com.google.firebase.ml.vision.common.FirebaseVisionImage\nimport io.github.the_dagger.mlkit.R\nimport kotlinx.android.synthetic.main.activity_main.*\nimport kotlinx.android.synthetic.main.layout_landmark.*\nimport pl.aprilapps.easyphotopicker.DefaultCallback\nimport pl.aprilapps.easyphotopicker.EasyImage\nimport java.io.File\n\n\nclass LandmarkDetectorActivity : BaseCameraActivity() {\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setupBottomSheet(R.layout.layout_landmark)\n        cameraView.visibility = View.GONE\n        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)\n                == PackageManager.PERMISSION_DENIED) {\n            ActivityCompat.requestPermissions(this, Array<String>(1) { Manifest.permission.WRITE_EXTERNAL_STORAGE }, 12345)\n            fab_take_photo.setOnClickListener(null)\n        } else {\n            fab_take_photo.setOnClickListener(this)\n        }\n    }\n\n    override fun onClick(v: View?) {\n        //onClick attribute for the FloatingActionButton\n        startIntentForPicker()\n    }\n\n    private fun startIntentForPicker() {\n        EasyImage.openGallery(this, 0)\n    }\n\n    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {\n        super.onRequestPermissionsResult(requestCode, permissions, grantResults)\n        if (requestCode == 12345) {\n            if (grantResults[0] == PackageManager.PERMISSION_GRANTED)\n            //The library requires write access to the External Storage,\n            //so ensure that the permission is granted\n                fab_take_photo.setOnClickListener(this)\n        }\n    }\n\n\n    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {\n        super.onActivityResult(requestCode, resultCode, data)\n        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)\n                == PackageManager.PERMISSION_GRANTED) {\n            EasyImage.handleActivityResult(requestCode, resultCode, data, this, object : DefaultCallback() {\n\n                override fun onImagePicked(imageFile: File?, source: EasyImage.ImageSource?, type: Int) {\n                    val bitmap = BitmapFactory.decodeFile(imageFile?.path)\n                    getLandmarkFromCloud(bitmap)\n                    imagePreview.setImageBitmap(bitmap)\n                    framePreview.visibility = View.VISIBLE\n                    btnRetry.visibility = View.GONE\n                }\n\n                override fun onImagePickerError(e: Exception?, source: EasyImage.ImageSource?, type: Int) {\n                    //Some error handling since no image was picked\n                }\n            })\n        }\n    }\n\n    private fun getLandmarkFromCloud(bitmap: Bitmap) {\n        val image = FirebaseVisionImage.fromBitmap(bitmap)\n        val detector = FirebaseVision.getInstance()\n                .visionCloudLandmarkDetector\n\n        detector.detectInImage(image)\n                .addOnCompleteListener {\n                    Log.e(\"TAG\", \"completed\")\n                    for (firebaseVisionLandmarks in it.result) {\n                        val landmark = firebaseVisionLandmarks.landmark\n                        tvLocationName.text = landmark\n                        for (location in firebaseVisionLandmarks.locations) {\n                            val lat = location.latitude\n                            val long = location.longitude\n                            tvLatitude.text = lat.toString()\n                            tvLongitude.text = long.toString()\n                        }\n                        tvAccuracy.text = (firebaseVisionLandmarks.confidence * 100).toInt().toString()\n                    }\n                }\n                .addOnFailureListener {\n                    Toast.makeText(this, \"Something went wrong\", Toast.LENGTH_SHORT).show()\n                }\n                .addOnCompleteListener {\n                    sheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED\n                }\n    }\n\n}"
  },
  {
    "path": "app/src/main/java/io/github/the_dagger/mlkit/activity/PokemonDetectorActivity.kt",
    "content": "package io.github.the_dagger.mlkit.activity\n\nimport android.graphics.Bitmap\nimport android.os.Bundle\nimport android.support.design.widget.BottomSheetBehavior\nimport android.support.v7.widget.LinearLayoutManager\nimport android.view.View\nimport com.google.firebase.ml.custom.*\nimport com.google.firebase.ml.custom.model.FirebaseLocalModelSource\nimport io.github.the_dagger.mlkit.model.Pokemon\nimport io.github.the_dagger.mlkit.R\nimport io.github.the_dagger.mlkit.adapter.PokemonAdapter\nimport kotlinx.android.synthetic.main.activity_main.*\nimport kotlinx.android.synthetic.main.layout_image_label.*\nimport java.nio.ByteBuffer\nimport java.nio.ByteOrder\nimport com.google.firebase.ml.custom.FirebaseModelManager\nimport com.google.firebase.ml.custom.model.FirebaseCloudModelSource\n\nclass PokemonDetectorActivity : BaseCameraActivity() {\n    private val pokeArray: Array<String> = arrayOf(\"abra\", \"aerodactyl\", \"alakazam\", \"arbok\", \"arcanine\", \"articuno\", \"beedrill\", \"bellsprout\",\n            \"blastoise\", \"bulbasaur\", \"butterfree\", \"caterpie\", \"chansey\", \"charizard\", \"charmander\", \"charmeleon\", \"clefable\", \"clefairy\", \"cloyster\", \"cubone\", \"dewgong\",\n            \"diglett\", \"ditto\", \"dodrio\", \"doduo\", \"dragonair\", \"dragonite\", \"dratini\", \"drowzee\", \"dugtrio\", \"eevee\", \"ekans\", \"electabuzz\",\n            \"electrode\", \"exeggcute\", \"exeggutor\", \"farfetchd\", \"fearow\", \"flareon\", \"gastly\", \"gengar\", \"geodude\", \"gloom\",\n            \"golbat\", \"goldeen\", \"golduck\", \"golem\", \"graveler\", \"grimer\", \"growlithe\", \"gyarados\", \"haunter\", \"hitmonchan\",\n            \"hitmonlee\", \"horsea\", \"hypno\", \"ivysaur\", \"jigglypuff\", \"jolteon\", \"jynx\", \"kabuto\",\n            \"kabutops\", \"kadabra\", \"kakuna\", \"kangaskhan\", \"kingler\", \"koffing\", \"krabby\", \"lapras\", \"lickitung\", \"machamp\",\n            \"machoke\", \"machop\", \"magikarp\", \"magmar\", \"magnemite\", \"magneton\", \"mankey\", \"marowak\", \"meowth\", \"metapod\",\n            \"mew\", \"mewtwo\", \"moltres\", \"mrmime\", \"muk\", \"nidoking\", \"nidoqueen\", \"nidorina\", \"nidorino\", \"ninetales\",\n            \"oddish\", \"omanyte\", \"omastar\", \"onix\", \"paras\", \"parasect\", \"persian\", \"pidgeot\", \"pidgeotto\", \"pidgey\",\n            \"pikachu\", \"pinsir\", \"poliwag\", \"poliwhirl\", \"poliwrath\", \"ponyta\", \"porygon\", \"primeape\", \"psyduck\", \"raichu\",\n            \"rapidash\", \"raticate\", \"rattata\", \"rhydon\", \"rhyhorn\", \"sandshrew\", \"sandslash\", \"scyther\", \"seadra\",\n            \"seaking\", \"seel\", \"shellder\", \"slowbro\", \"slowpoke\", \"snorlax\", \"spearow\", \"squirtle\", \"starmie\", \"staryu\",\n            \"tangela\", \"tauros\", \"tentacool\", \"tentacruel\", \"vaporeon\", \"venomoth\", \"venonat\", \"venusaur\", \"victreebel\",\n            \"vileplume\", \"voltorb\", \"vulpix\", \"wartortle\", \"weedle\", \"weepinbell\", \"weezing\", \"wigglytuff\", \"zapdos\", \"zubat\")\n\n    companion object {\n        /** Dimensions of inputs.  */\n        const val DIM_IMG_SIZE_X = 224\n        const val DIM_IMG_SIZE_Y = 224\n        const val DIM_BATCH_SIZE = 1\n        const val DIM_PIXEL_SIZE = 3\n        const val IMAGE_MEAN = 128\n        private const val IMAGE_STD = 128.0f\n    }\n\n    private val intValues = IntArray(DIM_IMG_SIZE_X * DIM_IMG_SIZE_Y)\n    private lateinit var imgData: ByteBuffer\n    private lateinit var fireBaseInterpreter: FirebaseModelInterpreter\n    private lateinit var inputOutputOptions: FirebaseModelInputOutputOptions\n\n    private lateinit var itemAdapter: PokemonAdapter\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setupBottomSheet(R.layout.layout_image_label)\n        imgData = ByteBuffer.allocateDirect(\n                4 * DIM_BATCH_SIZE * DIM_IMG_SIZE_X * DIM_IMG_SIZE_Y * DIM_PIXEL_SIZE);\n        imgData.order(ByteOrder.nativeOrder())\n\n        rvLabel.layoutManager = LinearLayoutManager(this)\n\n        //Load a cloud model using the FirebaseCloudModelSource Builder class\n        val cloudSource = FirebaseCloudModelSource.Builder(\"pokedex\")\n                .enableModelUpdates(true)\n                .build()\n\n        //Registering the cloud model loaded above with the ModelManager Singleton\n        FirebaseModelManager.getInstance().registerCloudModelSource(cloudSource)\n\n        //Load a local model using the FirebaseLocalModelSource Builder class\n        val fireBaseLocalModelSource = FirebaseLocalModelSource.Builder(\"pokedex\")\n                .setAssetFilePath(\"pokedex.tflite\")\n                .build()\n\n        //Registering the model loaded above with the ModelManager Singleton\n        FirebaseModelManager.getInstance().registerLocalModelSource(fireBaseLocalModelSource)\n\n        val firebaseModelOptions = FirebaseModelOptions.Builder()\n                .setLocalModelName(\"pokedex\")\n                .setCloudModelName(\"pokedex\")\n                .build()\n\n        fireBaseInterpreter = FirebaseModelInterpreter.getInstance(firebaseModelOptions)!!\n\n        //Input and Output options for the model\n        inputOutputOptions = FirebaseModelInputOutputOptions.Builder()\n                .setInputFormat(0, FirebaseModelDataType.FLOAT32, intArrayOf(1, 224, 224, 3))\n                .setOutputFormat(0, FirebaseModelDataType.FLOAT32, intArrayOf(1, 149))\n                .build()\n    }\n\n    override fun onClick(v: View?) {\n        fabProgressCircle.show()\n        cameraView.captureImage { cameraKitImage ->\n            // Get the Bitmap from the captured shot\n\n            val scaledBitmap = Bitmap.createScaledBitmap(cameraKitImage.bitmap, 224, 224, false)\n            getPokemonFromBitmap(scaledBitmap)\n            runOnUiThread {\n                showPreview()\n                imagePreview.setImageBitmap(cameraKitImage.bitmap)\n            }\n        }\n    }\n\n    private fun convertBitmapToByteBuffer(bitmap: Bitmap?): ByteBuffer {\n        //Clear the Bytebuffer for a new image\n        imgData.rewind()\n        bitmap?.getPixels(intValues, 0, bitmap.width, 0, 0, bitmap.width, bitmap.height)\n        // Convert the image to floating point.\n        var pixel = 0\n        for (i in 0 until DIM_IMG_SIZE_X) {\n            for (j in 0 until DIM_IMG_SIZE_Y) {\n                val currPixel = intValues[pixel++]\n                imgData.putFloat(((currPixel shr 16 and 0xFF) - IMAGE_MEAN) / IMAGE_STD)\n                imgData.putFloat(((currPixel shr 8 and 0xFF) - IMAGE_MEAN) / IMAGE_STD)\n                imgData.putFloat(((currPixel and 0xFF) - IMAGE_MEAN) / IMAGE_STD)\n            }\n        }\n        return imgData\n    }\n\n    private fun getPokemonFromBitmap(bitmap: Bitmap?) {\n        //Creating a FirebaseModelInput object that takes in the ByteBuffer as an input\n        val inputs = FirebaseModelInputs.Builder()\n                .add(convertBitmapToByteBuffer(bitmap))\n                .build()\n\n        //Provide the firebaseModelInput to the FirebaseInterpreter\n        fireBaseInterpreter.run(inputs, inputOutputOptions)\n                ?.addOnSuccessListener {\n                    val pokeList = mutableListOf<Pokemon>()\n                    /**\n                     * Run a foreach loop through the output float array containing the probabilities\n                     * corresponding to each label\n                     * @see pokeArray to know what labels are supported\n                     */\n                    it.getOutput<Array<FloatArray>>(0)[0].forEachIndexed { index, fl ->\n                        //Only consider a pokemon when the accuracy is more than 30%\n                        if (fl > .20)\n                            pokeList.add(Pokemon(pokeArray[index], fl))\n                    }\n\n                    rvLabel.layoutManager = LinearLayoutManager(this)\n                    fabProgressCircle.hide()\n                    itemAdapter = PokemonAdapter(pokeList)\n                    rvLabel.adapter = itemAdapter\n                    sheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED)\n                }\n                ?.addOnFailureListener {\n                    it.printStackTrace()\n                    fabProgressCircle.hide()\n                }\n    }\n\n}"
  },
  {
    "path": "app/src/main/java/io/github/the_dagger/mlkit/adapter/FaceAdapter.kt",
    "content": "package io.github.the_dagger.mlkit.adapter\n\nimport android.support.v7.widget.RecyclerView\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport com.google.firebase.ml.vision.face.FirebaseVisionFace\nimport io.github.the_dagger.mlkit.R\nimport kotlinx.android.synthetic.main.face_row.view.*\n\nclass FaceAdapter(private val faces: List<FirebaseVisionFace>) : RecyclerView.Adapter<FaceAdapter.FaceHolder>() {\n\n    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FaceHolder {\n        return FaceHolder(LayoutInflater.from(parent.context).inflate(R.layout.face_row, parent, false))\n    }\n\n    override fun getItemCount() = faces.size\n\n    override fun onBindViewHolder(faceholder: FaceHolder, position: Int) {\n        val face = faces[position]\n\n        faceholder.itemView.smilingPro.text = face.smilingProbability.toString()\n        faceholder.itemView.leftEyeClose.text = face.leftEyeOpenProbability.toString()\n        faceholder.itemView.rightEyeClosed.text = face.rightEyeOpenProbability.toString()\n\n\n    }\n\n    class FaceHolder(itemView: View) : RecyclerView.ViewHolder(itemView)\n\n}"
  },
  {
    "path": "app/src/main/java/io/github/the_dagger/mlkit/adapter/HomeAdapter.kt",
    "content": "package io.github.the_dagger.mlkit.adapter\n\nimport android.content.Context\nimport android.content.Intent\nimport android.support.v7.widget.RecyclerView\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.Toast\nimport io.github.the_dagger.mlkit.model.PojoApi\nimport io.github.the_dagger.mlkit.R\nimport io.github.the_dagger.mlkit.activity.*\nimport kotlinx.android.synthetic.main.item_row_home.view.*\n\nclass HomeAdapter(private val apiList: List<PojoApi>) : RecyclerView.Adapter<HomeAdapter.HomeHolder>() {\n\n    private lateinit var context: Context\n\n    class HomeHolder(itemView: View) : RecyclerView.ViewHolder(itemView)\n\n    override fun onBindViewHolder(holder: HomeHolder, position: Int) {\n        val currItem = apiList[position]\n        with(holder.itemView) {\n            tViewApiName.text = currItem.title\n            tViewApiDesc.text = currItem.desc\n            iViewApi.setImageResource(currItem.imageId)\n            cViewHome.setOnClickListener {\n                when (currItem.id) {\n                    0 -> context.startActivity(Intent(context, ImageLabelActivity::class.java))\n                    1 -> context.startActivity(Intent(context, CardScannerActivity::class.java))\n                    2 -> context.startActivity(Intent(context, BarCodeReaderActivity::class.java))\n                    3 -> context.startActivity(Intent(context, LandmarkDetectorActivity::class.java))\n                    4 -> context.startActivity(Intent(context, FaceDetectionActivity::class.java))\n                }\n            }\n        }\n    }\n\n    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HomeHolder {\n        context = parent.context\n        return HomeHolder(LayoutInflater.from(context).inflate(R.layout.item_row_home, parent, false))\n    }\n\n    override fun getItemCount() = apiList.size\n}"
  },
  {
    "path": "app/src/main/java/io/github/the_dagger/mlkit/adapter/ImageLabelAdapter.kt",
    "content": "package io.github.the_dagger.mlkit.adapter\n\nimport android.content.Context\nimport android.support.v4.content.ContextCompat\nimport android.support.v7.widget.RecyclerView\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport com.google.firebase.ml.vision.cloud.label.FirebaseVisionCloudLabel\nimport com.google.firebase.ml.vision.label.FirebaseVisionLabel\nimport io.github.the_dagger.mlkit.R\nimport kotlinx.android.synthetic.main.item_row.view.*\n\nclass ImageLabelAdapter(private val firebaseVisionList: List<Any>, private val isCloud: Boolean) : RecyclerView.Adapter<ImageLabelAdapter.ItemHolder>() {\n    lateinit var context: Context\n\n    inner class ItemHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {\n\n        fun bindCloud(currentItem: FirebaseVisionCloudLabel) {\n            when {\n                currentItem.confidence > .70 -> itemView.itemAccuracy.setTextColor(ContextCompat.getColor(context, R.color.green))\n                currentItem.confidence < .30 -> itemView.itemAccuracy.setTextColor(ContextCompat.getColor(context, R.color.red))\n                else -> itemView.itemAccuracy.setTextColor(ContextCompat.getColor(context, R.color.orange))\n            }\n            itemView.itemName.text = currentItem.label\n            itemView.itemAccuracy.text = \"Probability : ${(currentItem.confidence * 100).toInt()}%\"\n        }\n\n        fun bindDevice(currentItem: FirebaseVisionLabel) {\n            when {\n                currentItem.confidence > .70 -> itemView.itemAccuracy.setTextColor(ContextCompat.getColor(context, R.color.green))\n                currentItem.confidence < .30 -> itemView.itemAccuracy.setTextColor(ContextCompat.getColor(context, R.color.red))\n                else -> itemView.itemAccuracy.setTextColor(ContextCompat.getColor(context, R.color.orange))\n            }\n            itemView.itemName.text = currentItem.label\n            itemView.itemAccuracy.text = \"Probability : ${(currentItem.confidence * 100).toInt()}%\"\n        }\n\n    }\n\n    override fun onBindViewHolder(holder: ItemHolder, position: Int) {\n        val currentItem = firebaseVisionList[position]\n        if (isCloud)\n            holder.bindCloud(currentItem as FirebaseVisionCloudLabel)\n        else\n            holder.bindDevice(currentItem as FirebaseVisionLabel)\n    }\n\n    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemHolder {\n        context = parent.context\n        return ItemHolder(LayoutInflater.from(context).inflate(R.layout.item_row, parent, false))\n    }\n\n    override fun getItemCount() = firebaseVisionList.size\n}"
  },
  {
    "path": "app/src/main/java/io/github/the_dagger/mlkit/adapter/PokemonAdapter.kt",
    "content": "package io.github.the_dagger.mlkit.adapter\n\nimport android.content.Context\nimport android.support.v4.content.ContextCompat\nimport android.support.v7.widget.RecyclerView\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport io.github.the_dagger.mlkit.model.Pokemon\nimport io.github.the_dagger.mlkit.R\nimport kotlinx.android.synthetic.main.item_row.view.*\n\nclass PokemonAdapter(private val pokeList: List<Pokemon>) : RecyclerView.Adapter<PokemonAdapter.PokeHolder>() {\n\n    private lateinit var context: Context\n\n    class PokeHolder(itemView: View) : RecyclerView.ViewHolder(itemView)\n\n    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PokeHolder {\n        context = parent.context\n        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_row, parent, false)\n        return PokeHolder(view)\n    }\n\n    override fun getItemCount() = pokeList.size\n\n    override fun onBindViewHolder(holder: PokeHolder, position: Int) {\n\n        val currentItem = pokeList[position]\n\n        when {\n            currentItem.accuracy > .70 -> holder.itemView.itemAccuracy.setTextColor(ContextCompat.getColor(context, R.color.green))\n            currentItem.accuracy < .30 -> holder.itemView.itemAccuracy.setTextColor(ContextCompat.getColor(context, R.color.red))\n            else -> holder.itemView.itemAccuracy.setTextColor(ContextCompat.getColor(context, R.color.orange))\n        }\n        holder.itemView.itemName.text = currentItem.name\n        holder.itemView.itemAccuracy.text = \"Probability : ${(currentItem.accuracy * 100).toInt()}%\"\n    }\n\n}"
  },
  {
    "path": "app/src/main/java/io/github/the_dagger/mlkit/model/PojoApi.kt",
    "content": "package io.github.the_dagger.mlkit.model\n\nclass PojoApi(val imageId: Int, val title: String, val desc: String, val id : Int)"
  },
  {
    "path": "app/src/main/java/io/github/the_dagger/mlkit/model/Pokemon.kt",
    "content": "package io.github.the_dagger.mlkit.model\n\ndata class Pokemon(val name: String, val accuracy: Float)"
  },
  {
    "path": "app/src/main/res/drawable/ic_arrow_upward.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24.0\" android:viewportWidth=\"24.0\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#FF000000\" android:pathData=\"M4,12l1.41,1.41L11,7.83V20h2V7.83l5.58,5.59L20,12l-8,-8 -8,8z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_camera.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24.0\" android:viewportWidth=\"24.0\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#FF000000\" android:pathData=\"M12,12m-3.2,0a3.2,3.2 0,1 1,6.4 0a3.2,3.2 0,1 1,-6.4 0\"/>\n    <path android:fillColor=\"#FF000000\" android:pathData=\"M9,2L7.17,4L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2h-3.17L15,2L9,2zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_launcher_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportHeight=\"108\"\n    android:viewportWidth=\"108\">\n    <path\n        android:fillColor=\"#26A69A\"\n        android:pathData=\"M0,0h108v108h-108z\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M9,0L9,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,0L19,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M29,0L29,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M39,0L39,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M49,0L49,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M59,0L59,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M69,0L69,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M79,0L79,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M89,0L89,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M99,0L99,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,9L108,9\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,19L108,19\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,29L108,29\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,39L108,39\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,49L108,49\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,59L108,59\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,69L108,69\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,79L108,79\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,89L108,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,99L108,99\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,29L89,29\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,39L89,39\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,49L89,49\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,59L89,59\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,69L89,69\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,79L89,79\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M29,19L29,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M39,19L39,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M49,19L49,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M59,19L59,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M69,19L69,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M79,19L79,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_refresh.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24.0\" android:viewportWidth=\"24.0\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#FF000000\" android:pathData=\"M17.65,6.35C16.2,4.9 14.21,4 12,4c-4.42,0 -7.99,3.58 -7.99,8s3.57,8 7.99,8c3.73,0 6.84,-2.55 7.73,-6h-2.08c-0.82,2.33 -3.04,4 -5.65,4 -3.31,0 -6,-2.69 -6,-6s2.69,-6 6,-6c1.66,0 3.14,0.69 4.22,1.78L13,11h7V4l-2.35,2.35z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/font/roboto_medium.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<font-family xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n        app:fontProviderAuthority=\"com.google.android.gms.fonts\"\n        app:fontProviderPackage=\"com.google.android.gms\"\n        app:fontProviderQuery=\"name=Roboto&amp;weight=500\"\n        app:fontProviderCerts=\"@array/com_google_android_gms_fonts_certs\">\n</font-family>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_home.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v7.widget.RecyclerView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/rvHome\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\" />"
  },
  {
    "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    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <com.wonderkiln.camerakit.CameraView\n        android:id=\"@+id/cameraView\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:adjustViewBounds=\"true\" />\n\n    <FrameLayout\n        android:id=\"@+id/framePreview\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:visibility=\"gone\">\n\n        <ImageView\n            android:scaleType=\"centerCrop\"\n            android:id=\"@+id/imagePreview\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\" />\n\n        <ImageButton\n            android:id=\"@+id/btnRetry\"\n            android:layout_width=\"120dp\"\n            android:layout_height=\"120dp\"\n            android:layout_gravity=\"center\"\n            android:background=\"@null\"\n            android:scaleType=\"centerCrop\"\n            android:src=\"@drawable/ic_refresh\" />\n\n    </FrameLayout>\n\n    <ViewStub\n        android:id=\"@+id/stubView\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:inflatedId=\"@+id/bottomLayout\"\n        android:visibility=\"visible\" />\n\n    <com.github.jorgecastilloprz.FABProgressCircle\n        android:id=\"@+id/fabProgressCircle\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        app:arcColor=\"@color/colorAccent\"\n        app:arcWidth=\"4dp\">\n\n        <android.support.design.widget.FloatingActionButton\n            android:id=\"@+id/fab_take_photo\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentBottom=\"true\"\n            android:layout_centerHorizontal=\"true\"\n            android:layout_margin=\"16dp\"\n            android:src=\"@drawable/ic_camera\"\n            app:backgroundTint=\"@color/colorPrimary\"\n            app:fabSize=\"normal\"\n            app:rippleColor=\"@color/colorAccent\" />\n\n    </com.github.jorgecastilloprz.FABProgressCircle>\n</android.support.design.widget.CoordinatorLayout>"
  },
  {
    "path": "app/src/main/res/layout/face_row.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v7.widget.CardView 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:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_margin=\"8dp\"\n    app:elevation=\"8dp\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:foreground=\"?attr/selectableItemBackground\"\n        android:orientation=\"vertical\">\n\n        <TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:fontFamily=\"@font/roboto_medium\"\n            android:paddingLeft=\"8dp\"\n            android:paddingTop=\"4dp\"\n            android:paddingRight=\"8dp\"\n            android:textSize=\"16sp\"\n            android:text=\"Smiling Probability\" />\n\n        <TextView\n            android:id=\"@+id/smilingPro\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:fontFamily=\"@font/roboto_medium\"\n            android:paddingLeft=\"8dp\"\n            android:paddingRight=\"8dp\"\n            android:paddingBottom=\"4dp\"\n            android:textSize=\"16sp\" />\n\n        <TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:fontFamily=\"@font/roboto_medium\"\n            android:paddingLeft=\"8dp\"\n            android:paddingTop=\"4dp\"\n            android:paddingRight=\"8dp\"\n            android:textSize=\"16sp\"\n            android:text=\"Left eye open Probability\" />\n\n        <TextView\n            android:id=\"@+id/leftEyeClose\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:fontFamily=\"@font/roboto_medium\"\n            android:paddingLeft=\"8dp\"\n            android:paddingRight=\"8dp\"\n            android:paddingBottom=\"4dp\"\n            android:textSize=\"16sp\" />\n\n        <TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:fontFamily=\"@font/roboto_medium\"\n            android:paddingLeft=\"8dp\"\n            android:paddingTop=\"4dp\"\n            android:paddingRight=\"8dp\"\n            android:textSize=\"16sp\"\n            android:text=\"Right eye open Probability\" />\n\n        <TextView\n            android:id=\"@+id/rightEyeClosed\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:fontFamily=\"@font/roboto_medium\"\n            android:paddingLeft=\"8dp\"\n            android:paddingRight=\"8dp\"\n            android:paddingBottom=\"4dp\"\n            android:textSize=\"16sp\" />\n\n    </LinearLayout>\n\n</android.support.v7.widget.CardView>"
  },
  {
    "path": "app/src/main/res/layout/item_row.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v7.widget.CardView android:layout_margin=\"8dp\"\n    app:elevation=\"8dp\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <LinearLayout\n        android:foreground=\"?attr/selectableItemBackground\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\">\n\n        <TextView\n            android:id=\"@+id/itemName\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:fontFamily=\"@font/roboto_medium\"\n            android:paddingLeft=\"8dp\"\n            android:paddingRight=\"8dp\"\n            android:paddingTop=\"8dp\"\n            android:textSize=\"20sp\"\n            tools:text=\"Item #1\" />\n\n        <TextView\n            android:id=\"@+id/itemAccuracy\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:fontFamily=\"@font/roboto_medium\"\n            android:paddingLeft=\"8dp\"\n            android:paddingRight=\"8dp\"\n            android:paddingBottom=\"8dp\"\n            android:textSize=\"16sp\" />\n\n    </LinearLayout>\n    \n</android.support.v7.widget.CardView>"
  },
  {
    "path": "app/src/main/res/layout/item_row_home.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v7.widget.CardView\n    android:id=\"@+id/cViewHome\"\n    android:foreground=\"?attr/selectableItemBackground\"\n    android:layout_margin=\"8dp\"\n    xmlns:android=\"http://schemas.android.com/apk/res/android\" android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n        <ImageView\n            android:scaleType=\"centerCrop\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"184dp\"\n            android:id=\"@+id/iViewApi\"/>\n\n        <TextView\n            android:padding=\"8dp\"\n            android:id=\"@+id/tViewApiName\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:fontFamily=\"@font/roboto_medium\"\n            android:textSize=\"24sp\"\n            android:textStyle=\"bold\" />\n\n        <TextView\n            android:paddingStart=\"8dp\"\n            android:paddingEnd=\"8dp\"\n            android:paddingBottom=\"8dp\"\n            android:textSize=\"16sp\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:id=\"@+id/tViewApiDesc\"\n            android:fontFamily=\"@font/roboto_medium\" />\n\n    </LinearLayout>\n\n</android.support.v7.widget.CardView>"
  },
  {
    "path": "app/src/main/res/layout/layout_card_scanner.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:padding=\"16dp\"\n    android:background=\"#ffffff\"\n    android:orientation=\"vertical\"\n    app:layout_behavior=\"android.support.design.widget.BottomSheetBehavior\">\n\n    <TextView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"Card Number\"\n        android:textSize=\"24sp\"\n        android:textStyle=\"bold\" />\n\n    <TextView\n        android:id=\"@+id/tvCardNumber\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:textSize=\"20sp\"\n        tools:text=\"Card Number\" />\n\n    <TextView\n        android:layout_marginTop=\"16dp\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"Card Expiry\"\n        android:textSize=\"24sp\"\n        android:textStyle=\"bold\" />\n\n    <TextView\n        android:id=\"@+id/tvCardExpiry\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:textSize=\"20sp\"\n        tools:text=\"Card Expiry\" />\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_image_label.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"500dp\"\n    android:background=\"#FAFAFA\"\n    android:orientation=\"vertical\"\n    app:layout_behavior=\"android.support.design.widget.BottomSheetBehavior\">\n\n    <TextView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:fontFamily=\"@font/roboto_medium\"\n        android:padding=\"16dp\"\n        android:text=\"@string/detected_items\"\n        android:textSize=\"24sp\" />\n\n    <android.support.v7.widget.RecyclerView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n        android:id=\"@+id/rvLabel\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:paddingLeft=\"8dp\"\n        android:paddingRight=\"8dp\" />\n\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/layout_landmark.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout 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:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:background=\"#ffffff\"\n    android:orientation=\"vertical\"\n    android:padding=\"16dp\"\n    app:layout_behavior=\"android.support.design.widget.BottomSheetBehavior\">\n\n    <TextView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"@string/location\"\n        android:textSize=\"24sp\"\n        android:textStyle=\"bold\" />\n\n    <TextView\n        android:id=\"@+id/tvLocationName\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:textSize=\"20sp\"\n        tools:text=\"Card Number\" />\n\n    <TextView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"16dp\"\n        android:text=\"@string/latitude\"\n        android:textSize=\"24sp\"\n        android:textStyle=\"bold\" />\n\n    <TextView\n        android:id=\"@+id/tvLatitude\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:textSize=\"20sp\"\n        tools:text=\"Card Expiry\" />\n\n    <TextView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"16dp\"\n        android:text=\"@string/longitude\"\n        android:textSize=\"24sp\"\n        android:textStyle=\"bold\" />\n\n    <TextView\n        android:id=\"@+id/tvLongitude\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:textSize=\"20sp\"\n        tools:text=\"Card Expiry\" />\n\n    <TextView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"16dp\"\n        android:text=\"@string/accuracy\"\n        android:textSize=\"24sp\"\n        android:textStyle=\"bold\" />\n\n    <TextView\n        android:id=\"@+id/tvAccuracy\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:textSize=\"20sp\"\n        tools:text=\"Card Expiry\" />\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_qr_code_reader.xml",
    "content": "<LinearLayout 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:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:background=\"#ffffff\"\n    android:orientation=\"vertical\"\n    android:padding=\"16dp\"\n    app:layout_behavior=\"android.support.design.widget.BottomSheetBehavior\">\n\n    <TextView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"QR Code Data\"\n        android:textSize=\"24sp\"\n        android:textStyle=\"bold\" />\n\n    <TextView\n        android:id=\"@+id/codeData\"\n        android:autoLink=\"all\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:textSize=\"20sp\"\n        tools:text=\"Card Number\" />\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"colorPrimary\">#384954</color>\n    <color name=\"colorPrimaryDark\">#10222b</color>\n    <color name=\"colorAccent\">#F0AD43</color>\n    <color name=\"green\">#4CAF50</color>\n    <color name=\"red\">#f44336</color>\n    <color name=\"orange\">#FF9800</color>\n    <color name=\"blue\">#58ADEA</color>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/font_certs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <array name=\"com_google_android_gms_fonts_certs\">\n        <item>@array/com_google_android_gms_fonts_certs_dev</item>\n        <item>@array/com_google_android_gms_fonts_certs_prod</item>\n    </array>\n    <string-array name=\"com_google_android_gms_fonts_certs_dev\">\n        <item>\n            MIIEqDCCA5CgAwIBAgIJANWFuGx90071MA0GCSqGSIb3DQEBBAUAMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAeFw0wODA0MTUyMzM2NTZaFw0zNTA5MDEyMzM2NTZaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBANbOLggKv+IxTdGNs8/TGFy0PTP6DHThvbbR24kT9ixcOd9W+EaBPWW+wPPKQmsHxajtWjmQwWfna8mZuSeJS48LIgAZlKkpFeVyxW0qMBujb8X8ETrWy550NaFtI6t9+u7hZeTfHwqNvacKhp1RbE6dBRGWynwMVX8XW8N1+UjFaq6GCJukT4qmpN2afb8sCjUigq0GuMwYXrFVee74bQgLHWGJwPmvmLHC69EH6kWr22ijx4OKXlSIx2xT1AsSHee70w5iDBiK4aph27yH3TxkXy9V89TDdexAcKk/cVHYNnDBapcavl7y0RiQ4biu8ymM8Ga/nmzhRKya6G0cGw8CAQOjgfwwgfkwHQYDVR0OBBYEFI0cxb6VTEM8YYY6FbBMvAPyT+CyMIHJBgNVHSMEgcEwgb6AFI0cxb6VTEM8YYY6FbBMvAPyT+CyoYGapIGXMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbYIJANWFuGx90071MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADggEBABnTDPEF+3iSP0wNfdIjIz1AlnrPzgAIHVvXxunW7SBrDhEglQZBbKJEk5kT0mtKoOD1JMrSu1xuTKEBahWRbqHsXclaXjoBADb0kkjVEJu/Lh5hgYZnOjvlba8Ld7HCKePCVePoTJBdI4fvugnL8TsgK05aIskyY0hKI9L8KfqfGTl1lzOv2KoWD0KWwtAWPoGChZxmQ+nBli+gwYMzM1vAkP+aayLe0a1EQimlOalO762r0GXO0ks+UeXde2Z4e+8S/pf7pITEI/tP+MxJTALw9QUWEv9lKTk+jkbqxbsh8nfBUapfKqYn0eidpwq2AzVp3juYl7//fKnaPhJD9gs=\n        </item>\n    </string-array>\n    <string-array name=\"com_google_android_gms_fonts_certs_prod\">\n        <item>\n            MIIEQzCCAyugAwIBAgIJAMLgh0ZkSjCNMA0GCSqGSIb3DQEBBAUAMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAeFw0wODA4MjEyMzEzMzRaFw0zNjAxMDcyMzEzMzRaMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAKtWLgDYO6IIrgqWbxJOKdoR8qtW0I9Y4sypEwPpt1TTcvZApxsdyxMJZ2JORland2qSGT2y5b+3JKkedxiLDmpHpDsz2WCbdxgxRczfey5YZnTJ4VZbH0xqWVW/8lGmPav5xVwnIiJS6HXk+BVKZF+JcWjAsb/GEuq/eFdpuzSqeYTcfi6idkyugwfYwXFU1+5fZKUaRKYCwkkFQVfcAs1fXA5V+++FGfvjJ/CxURaSxaBvGdGDhfXE28LWuT9ozCl5xw4Yq5OGazvV24mZVSoOO0yZ31j7kYvtwYK6NeADwbSxDdJEqO4k//0zOHKrUiGYXtqw/A0LFFtqoZKFjnkCAQOjgdkwgdYwHQYDVR0OBBYEFMd9jMIhF1Ylmn/Tgt9r45jk14alMIGmBgNVHSMEgZ4wgZuAFMd9jMIhF1Ylmn/Tgt9r45jk14aloXikdjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIEluYy4xEDAOBgNVBAsTB0FuZHJvaWQxEDAOBgNVBAMTB0FuZHJvaWSCCQDC4IdGZEowjTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4IBAQBt0lLO74UwLDYKqs6Tm8/yzKkEu116FmH4rkaymUIE0P9KaMftGlMexFlaYjzmB2OxZyl6euNXEsQH8gjwyxCUKRJNexBiGcCEyj6z+a1fuHHvkiaai+KL8W1EyNmgjmyy8AW7P+LLlkR+ho5zEHatRbM/YAnqGcFh5iZBqpknHf1SKMXFh4dd239FJ1jWYfbMDMy3NS5CTMQ2XFI1MvcyUTdZPErjQfTbQe3aDQsQcafEQPD+nqActifKZ0Np0IS9L9kR/wbNvyz6ENwPiTrjV2KRkEjH78ZMcUQXg0L3BYHJ3lc69Vs5Ddf9uUGGMYldX3WfMBEmh/9iFBDAaTCK\n        </item>\n    </string-array>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/preloaded_fonts.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <array name=\"preloaded_fonts\" translatable=\"false\">\n        <item>@font/roboto_medium</item>\n    </array>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">MlKit</string>\n    <string name=\"detected_items\">Detected Items</string>\n    <string name=\"desc_text\">A simple credit card scanner that reads the card number and expiry date</string>\n    <string name=\"desc_face\">Load and run a custom TensorflowLite model</string>\n    <string name=\"desc_barcode\">A simple QR code scanner</string>\n    <string name=\"desc_labelling\">Google Lens clone using MLKit</string>\n    <string name=\"desc_landmark\">Identify popular landmarks in an image</string>\n    <string name=\"title_text\">Text recognition</string>\n    <string name=\"title_custom\">Custom Model</string>\n    <string name=\"title_barcode\">Barcode scanning</string>\n    <string name=\"title_labelling\">Image labeling</string>\n    <string name=\"title_landmark\">Landmark recognition</string>\n    <string name=\"location\">Location</string>\n    <string name=\"latitude\">Latitude</string>\n    <string name=\"longitude\">Longitude</string>\n    <string name=\"accuracy\">Accuracy</string>\n    <string name=\"title_face\">Face Detection</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/styles.xml",
    "content": "<resources>\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.DarkActionBar\">\n        <item name=\"colorPrimary\">@color/colorPrimary</item>\n        <item name=\"colorPrimaryDark\">@color/colorPrimaryDark</item>\n        <item name=\"colorAccent\">@color/colorAccent</item>\n    </style>\n\n    <style name=\"AppThemeNoActionbar\" 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        <item name=\"android:windowTranslucentStatus\">true</item>\n    </style>\n</resources>\n"
  },
  {
    "path": "app/src/test/java/io/github/the_dagger/mlkit/ExampleUnitTest.kt",
    "content": "package io.github.the_dagger.mlkit\n\nimport org.junit.Test\n\nimport org.junit.Assert.*\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\nclass ExampleUnitTest {\n    @Test\n    fun addition_isCorrect() {\n        assertEquals(4, 2 + 2)\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    ext.kotlin_version = '1.2.70'\n    ext.mlkit_version = '16.0.0'\n    repositories {\n        google()\n        jcenter()\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.3.0-alpha10'\n        classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version\"\n\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n        classpath 'com.google.gms:google-services:4.0.1'\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        jcenter()\n        maven { url \"https://jitpack.io\" }\n    }\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Mon Sep 24 15:00:31 IST 2018\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-4.10-all.zip\n"
  },
  {
    "path": "gradle.properties",
    "content": "# Project-wide Gradle settings.\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\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# 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 sh\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\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\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\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\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\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\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\" -a \"$nonstop\" = \"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# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=$(save \"$@\")\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\n# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong\nif [ \"$(uname)\" = \"Darwin\" ] && [ \"$HOME\" = \"$PWD\" ]; then\n  cd \"$(dirname \"$0\")\"\nfi\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\r\n@rem ##########################################################################\r\n@rem\r\n@rem  Gradle startup script for Windows\r\n@rem\r\n@rem ##########################################################################\r\n\r\n@rem Set local scope for the variables with windows NT shell\r\nif \"%OS%\"==\"Windows_NT\" setlocal\r\n\r\nset DIRNAME=%~dp0\r\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\r\nset APP_BASE_NAME=%~n0\r\nset APP_HOME=%DIRNAME%\r\n\r\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\r\nset DEFAULT_JVM_OPTS=\r\n\r\n@rem Find java.exe\r\nif defined JAVA_HOME goto findJavaFromJavaHome\r\n\r\nset JAVA_EXE=java.exe\r\n%JAVA_EXE% -version >NUL 2>&1\r\nif \"%ERRORLEVEL%\" == \"0\" goto init\r\n\r\necho.\r\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:findJavaFromJavaHome\r\nset JAVA_HOME=%JAVA_HOME:\"=%\r\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\r\n\r\nif exist \"%JAVA_EXE%\" goto init\r\n\r\necho.\r\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:init\r\n@rem Get command-line arguments, handling Windows variants\r\n\r\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\r\n\r\n:win9xME_args\r\n@rem Slurp the command line arguments.\r\nset CMD_LINE_ARGS=\r\nset _SKIP=2\r\n\r\n:win9xME_args_slurp\r\nif \"x%~1\" == \"x\" goto execute\r\n\r\nset CMD_LINE_ARGS=%*\r\n\r\n:execute\r\n@rem Setup the command line\r\n\r\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n\r\n@rem Execute Gradle\r\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%\r\n\r\n:end\r\n@rem End local scope for the variables with windows NT shell\r\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\r\n\r\n:fail\r\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\r\nrem the _cmd.exe /c_ return code!\r\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\r\nexit /b 1\r\n\r\n:mainEnd\r\nif \"%OS%\"==\"Windows_NT\" endlocal\r\n\r\n:omega\r\n"
  },
  {
    "path": "settings.gradle",
    "content": "include ':app'\n"
  }
]