buildscript {
    repositories {
        jcenter()
        mavenCentral()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
    }
}

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    buildToolsVersion "28.0.0"
    defaultConfig {
        applicationId "com.android.wallpaper"
        minSdkVersion 26
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        debug {
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    flavorDimensions "default"

    productFlavors {
        aosp {
            dimension "default"
            applicationId 'com.android.wallpaper'
            testApplicationId 'com.android.wallpaper.tests'
        }
    }

    sourceSets {
        main {
            java.srcDirs = ["src", "src_override"]
            res.srcDirs = ["res"]
            manifest.srcFile "AndroidManifest.xml"
        }

        androidTest {
            res.srcDirs = ["tests/res"]
            java.srcDirs = ["tests/src"]
            manifest.srcFile "tests/AndroidManifest.xml"
        }
    }

    lintOptions {
        abortOnError false
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

final String SUPPORT_LIBS_VERSION = '28.0.0-SNAPSHOT'


repositories {
    maven { url "../../../prebuilts/maven_repo/bumptech" }
    mavenCentral()
    google()
    jcenter()
    mavenCentral()
}

dependencies {
    implementation "com.android.support:support-v4:${SUPPORT_LIBS_VERSION}"
    implementation "com.android.support:recyclerview-v7:${SUPPORT_LIBS_VERSION}"
    implementation "com.android.support:cardview-v7:${SUPPORT_LIBS_VERSION}"
    implementation "com.android.support:appcompat-v7:${SUPPORT_LIBS_VERSION}"
    implementation "com.android.support:design:${SUPPORT_LIBS_VERSION}"
    implementation "com.android.support:exifinterface:${SUPPORT_LIBS_VERSION}"
    implementation 'com.android.volley:volley:1.0.0'
    implementation 'com.github.bumptech.glide:glide:SNAPSHOT'
    implementation 'com.github.bumptech.glide:disklrucache:SNAPSHOT'
    implementation 'com.github.bumptech.glide:gifdecoder:SNAPSHOT'
    implementation 'com.davemorrissey.labs:subsampling-scale-image-view:3.9.0'


    androidTestImplementation('junit:junit:4.12')
    androidTestImplementation('com.android.support.test:runner:1.0.1')
    androidTestImplementation('org.robolectric:robolectric:3.4.2') {
        exclude group: 'xmlpull'
    }
    androidTestImplementation('com.thoughtworks.xstream:xstream:1.4.8');
    androidTestImplementation 'org.mockito:mockito-core:1.10.19'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-intents:3.0.1'
}
