Merge "Conditionally sets OnCreateContextMenuListener" into androidx-master-dev
diff --git a/build.gradle b/build.gradle
index 394c42c..cd5ad2d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -15,8 +15,7 @@
  */
 
 import androidx.build.AndroidXPlugin
-import androidx.build.DacOptions
-import androidx.build.PublishDocsRulesKt
+import androidx.build.SdkHelperKt
 import androidx.build.jacoco.Jacoco
 
 def currentJvmVersion = org.gradle.api.JavaVersion.current()
@@ -32,8 +31,8 @@
     apply from: 'buildSrc/repos.gradle'
     apply from: 'buildSrc/init.gradle'
     apply from: 'buildSrc/build_dependencies.gradle'
-    init.setSdkInLocalPropertiesFile()
     repos.addMavenRepositories(repositories)
+    SdkHelperKt.setSdkInLocalPropertiesFile(ext.supportRootFolder)
 
     dependencies {
         classpath build_libs.gradle
diff --git a/buildSrc/init.gradle b/buildSrc/init.gradle
index 3866c18..e13b62f 100644
--- a/buildSrc/init.gradle
+++ b/buildSrc/init.gradle
@@ -21,7 +21,6 @@
 import androidx.build.license.CheckExternalDependencyLicensesTask
 import com.android.build.gradle.internal.coverage.JacocoReportTask
 import com.android.build.gradle.internal.tasks.DeviceProviderInstrumentTestTask
-import org.gradle.api.logging.configuration.ShowStacktrace
 
 def supportRoot = ext.supportRootFolder
 if (supportRoot == null) {
@@ -35,71 +34,6 @@
 
 apply from: "${supportRoot}/buildSrc/dependencies.gradle"
 apply from: "${supportRoot}/buildSrc/build_dependencies.gradle"
-apply from: "${supportRoot}/buildSrc/unbundled_check.gradle"
-
-
-def getFullSdkPath() {
-    if (isUnbundledBuild(ext.supportRootFolder)) {
-        Properties properties = new Properties()
-        File propertiesFile = new File('local.properties')
-        if (propertiesFile.exists()) {
-            propertiesFile.withInputStream {
-                properties.load(it)
-            }
-        }
-        File location = findSdkLocation(properties, supportRootFolder)
-        return location.getAbsolutePath()
-    } else {
-        final String osName = System.getProperty("os.name").toLowerCase();
-        final boolean isMacOsX =
-                osName.contains("mac os x") || osName.contains("darwin") || osName.contains("osx");
-        final String platform = isMacOsX ? 'darwin' : 'linux'
-        return "${repos.prebuiltsRoot}/fullsdk-${platform}"
-    }
-}
-
-/**
- * Adapted from com.android.build.gradle.internal.SdkHandler
- */
-public static File findSdkLocation(Properties properties, File rootDir) {
-    String sdkDirProp = properties.getProperty("sdk.dir");
-    if (sdkDirProp != null) {
-        File sdk = new File(sdkDirProp);
-        if (!sdk.isAbsolute()) {
-            sdk = new File(rootDir, sdkDirProp);
-        }
-        return sdk
-    }
-
-    sdkDirProp = properties.getProperty("android.dir");
-    if (sdkDirProp != null) {
-        return new File(rootDir, sdkDirProp);
-    }
-
-    String envVar = System.getenv("ANDROID_HOME");
-    if (envVar != null) {
-        return new File(envVar);
-    }
-
-    String property = System.getProperty("android.home");
-    if (property != null) {
-        return new File(property);
-    }
-    return null;
-}
-
-def setSdkInLocalPropertiesFile() {
-    final File fullSdkPath = file(getFullSdkPath())
-    if (fullSdkPath.exists()) {
-        project.ext.fullSdkPath = fullSdkPath
-        File props = file("local.properties")
-        props.write "sdk.dir=${fullSdkPath.getAbsolutePath()}"
-        ext.usingFullSdk = true
-    } else {
-        throw Exception("You are using non ub-supportlib-* checkout. You need to check out "
-                + "ub-supportlib-* to work on support library. See go/supportlib for details.")
-    }
-}
 
 def setupRepoOutAndBuildNumber() {
     // common support repo folder which works well for prebuilts.
@@ -301,7 +235,6 @@
     }
 }
 
-ext.init.setSdkInLocalPropertiesFile = this.&setSdkInLocalPropertiesFile
 ext.init.setupRepoOutAndBuildNumber = this.&setupRepoOutAndBuildNumber
 ext.init.configureSubProjects = this.&configureSubProjects
 ext.init.configureBuildOnServer = this.&configureBuildOnServer
diff --git a/buildSrc/src/main/kotlin/androidx/build/DiffAndDocs.kt b/buildSrc/src/main/kotlin/androidx/build/DiffAndDocs.kt
index 32c68bc..2140927 100644
--- a/buildSrc/src/main/kotlin/androidx/build/DiffAndDocs.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/DiffAndDocs.kt
@@ -21,12 +21,12 @@
 import androidx.build.checkapi.ApiXmlConversionTask
 import androidx.build.checkapi.CheckApiTask
 import androidx.build.checkapi.UpdateApiTask
-import androidx.build.doclava.DoclavaTask
-import androidx.build.doclava.DEFAULT_DOCLAVA_CONFIG
 import androidx.build.doclava.CHECK_API_CONFIG_DEVELOP
-import androidx.build.doclava.CHECK_API_CONFIG_RELEASE
 import androidx.build.doclava.CHECK_API_CONFIG_PATCH
+import androidx.build.doclava.CHECK_API_CONFIG_RELEASE
 import androidx.build.doclava.ChecksConfig
+import androidx.build.doclava.DEFAULT_DOCLAVA_CONFIG
+import androidx.build.doclava.DoclavaTask
 import androidx.build.docs.ConcatenateFilesTask
 import androidx.build.docs.GenerateDocsTask
 import androidx.build.jdiff.JDiffTask
@@ -46,24 +46,11 @@
 import org.gradle.api.tasks.compile.JavaCompile
 import org.gradle.api.tasks.javadoc.Javadoc
 import java.io.File
+import java.net.URLClassLoader
 import java.time.LocalDateTime
 import java.time.format.DateTimeFormatter
-import kotlin.collections.Collection
-import kotlin.collections.List
-import kotlin.collections.MutableMap
-import kotlin.collections.emptyList
-import kotlin.collections.filter
-import kotlin.collections.find
-import kotlin.collections.forEach
-import kotlin.collections.listOf
-import kotlin.collections.mapNotNull
-import kotlin.collections.minus
-import kotlin.collections.mutableMapOf
-import kotlin.collections.plus
-import kotlin.collections.set
-import kotlin.collections.toSet
-import java.net.URLClassLoader
 import javax.tools.ToolProvider
+import kotlin.collections.set
 
 private const val DOCLAVA_DEPENDENCY = "com.android:doclava:1.0.6"
 
@@ -799,10 +786,10 @@
         create(name, taskClass) { task -> task.config() }
 
 fun androidJarFile(project: Project): FileCollection =
-        project.files(arrayOf(File(project.fullSdkPath(),
+        project.files(arrayOf(File(project.sdkPath(),
                 "platforms/android-${SupportConfig.CURRENT_SDK_VERSION}/android.jar")))
 
-private fun androidSrcJarFile(project: Project): File = File(project.fullSdkPath(),
+private fun androidSrcJarFile(project: Project): File = File(project.sdkPath(),
         "platforms/android-${SupportConfig.CURRENT_SDK_VERSION}/android-stubs-src.jar")
 
 private fun PublishDocsRules.resolve(extension: SupportLibraryExtension): DocsRule? {
@@ -818,7 +805,7 @@
 // Nasty part. Get rid of that eventually!
 private fun Project.docsDir(): File = properties["docsDir"] as File
 
-private fun Project.fullSdkPath(): File = rootProject.properties["fullSdkPath"] as File
+private fun Project.sdkPath(): File = getSdkPath(rootProject.projectDir)
 
 private fun Project.version() = Version(project.version as String)
 
diff --git a/buildSrc/src/main/kotlin/androidx/build/SdkHelper.kt b/buildSrc/src/main/kotlin/androidx/build/SdkHelper.kt
new file mode 100644
index 0000000..6d4d95c
--- /dev/null
+++ b/buildSrc/src/main/kotlin/androidx/build/SdkHelper.kt
@@ -0,0 +1,91 @@
+/*
+ * Copyright 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.
+ */
+
+package androidx.build
+
+import java.io.File
+import java.util.Properties
+
+/**
+ * Writes the appropriate SDK path to local.properties file.
+ */
+fun setSdkInLocalPropertiesFile(supportRoot: File) {
+    val sdkPath = getSdkPath(supportRoot)
+    if (sdkPath.exists()) {
+        val props = File(supportRoot, "local.properties")
+        props.printWriter().use { out ->
+            out.println("sdk.dir=${sdkPath.getAbsolutePath()}")
+        }
+    } else {
+        throw Exception("You are using non androidx-master-dev checkout. You need to check out " +
+                "androidx-master-dev to work on support library. See go/androidx for details.")
+    }
+}
+
+/**
+ * Returns the appropriate SDK path.
+ */
+fun getSdkPath(supportRoot: File): File {
+    if (isUnbundledBuild(supportRoot)) {
+        val properties = Properties()
+        val propertiesFile = File("local.properties")
+        if (propertiesFile.exists()) {
+            properties.load(propertiesFile.inputStream())
+        }
+        return findSdkLocation(properties, supportRoot)
+    } else {
+        val osName = System.getProperty("os.name").toLowerCase()
+        val isMacOsX = osName.contains("mac os x") || osName.contains("darwin") ||
+                osName.contains("osx")
+        val platform = if (isMacOsX) "darwin" else "linux"
+        // Making an assumption that prebuilts directory is in ../../prebuilts/
+        return File(supportRoot.parentFile.parentFile, "prebuilts/fullsdk-$platform")
+    }
+}
+
+/**
+ * Adapted from com.android.build.gradle.internal.SdkHandler
+ */
+private fun findSdkLocation(properties: Properties, rootDir: File): File {
+    var sdkDirProp = properties.getProperty("sdk.dir")
+    if (sdkDirProp != null) {
+        var sdk = File(sdkDirProp)
+        if (!sdk.isAbsolute()) {
+            sdk = File(rootDir, sdkDirProp)
+        }
+        return sdk
+    }
+
+    sdkDirProp = properties.getProperty("android.dir")
+    if (sdkDirProp != null) {
+        return File(rootDir, sdkDirProp)
+    }
+
+    val envVar = System.getenv("ANDROID_HOME")
+    if (envVar != null) {
+        return File(envVar)
+    }
+
+    val property = System.getProperty("android.home")
+    if (property != null) {
+        return File(property)
+    }
+    throw Exception("Could not find your SDK")
+}
+
+private fun isUnbundledBuild(supportRoot: File): Boolean {
+    return (File(supportRoot, "unbundled-build")).exists()
+}
\ No newline at end of file