/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


/*
 * Experimental gradle configuration.  This file may not be up to date.
 */

apply plugin: 'com.android.library'
apply plugin: 'com.google.protobuf'

android {
    compileSdkVersion 29
    buildToolsVersion '29.0.2'

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

    lintOptions {
        abortOnError false
    }

    defaultConfig {
        minSdkVersion 23
        resConfigs "en"
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        debug {
            minifyEnabled false
        }
        release {
            minifyEnabled true
        }
    }

    sourceSets {
        main {
            res.srcDirs = ['res']
            java.srcDirs = ['src']
            manifest.srcFile 'AndroidManifest.xml'
            proto {
                srcDir 'proto'
            }
        }
    }
}

dependencies {
    implementation      'androidx.annotation:annotation:1.1.0'
    implementation      'androidx.appcompat:appcompat:1.1.0'
    implementation      'androidx.leanback:leanback:1.1.0-alpha02'
    implementation      'androidx.recyclerview:recyclerview:1.1.0'
    implementation      'androidx.recyclerview:recyclerview-selection:1.0.0'
    implementation      'androidx.tvprovider:tvprovider:1.0.0'

    implementation      'com.google.android.exoplayer:exoplayer:r1.5.16'
    api                 'com.google.android.exoplayer:exoplayer-core:2.10.1'
    implementation      'com.google.android.exoplayer:exoplayer-ui:2.10.1'
    annotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta7'
    implementation      'com.google.auto.factory:auto-factory:1.0-beta7'
    implementation      'com.google.dagger:dagger:2.23'
    implementation      'com.google.dagger:dagger-android:2.23'
    annotationProcessor 'com.google.dagger:dagger-android-processor:2.23'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.23'
    implementation      'com.google.guava:guava:28.1-jre'
    implementation      'com.google.protobuf:protobuf-javalite:3.11.0'

    implementation      project(':common')
}

protobuf {
    protoc {
        artifact = 'com.google.protobuf:protoc:3.11.0'
    }
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                java {
                    option "lite"
                }
            }
        }
    }
}
