/*
* Copyright (C) 2015 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.
*/

apply plugin: "com.android.application"

android {
    sourceSets {
        main {
            manifest.srcFile "AndroidManifest.xml"
            java.srcDir "src"
            res.srcDir "res"
            assets.srcDir "assets"
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    dependencies {
        compile (project(":android-opt-datetimepicker")) {
            exclude module: "support-v4"
        }
        compile project(":support-v7-appcompat")
        compile project(":support-v7-gridlayout")
        compile project(":support-v13")
    }
}
