Browse Source

Update project Gradle script structure

Aidan Follestad 5 years ago
parent
commit
43e4e3b9f9

+ 3 - 0
.editorconfig

@@ -0,0 +1,3 @@
+[*.kt]
+indent_size = 2
+continuation_indent_size=4

+ 0 - 53
bintrayconfig.gradle

@@ -1,53 +0,0 @@
-// Set default
-ext.modulePackageId = ""
-
-if (!project.rootProject.file('local.properties').exists()) {
-  println "Not applying bintrayconfig.gradle"
-  return
-}
-apply plugin: 'com.novoda.bintray-release'
-
-def getBintrayUserAndKey() {
-  Properties properties = new Properties()
-  properties.load(project.rootProject.file('local.properties').newDataInputStream())
-  return [
-      properties.getProperty("bintray.user"),
-      properties.getProperty("bintray.apikey")
-  ]
-}
-
-if (shard == null) {
-  throw new IllegalStateException("Must specify a shard in module's build.gradle")
-} else if (versions == null || versions.publishVersion == null) {
-  throw new IllegalStateException("Unable to reference publishVersion")
-}
-
-task checkBintrayConfig {
-  doLast {
-    def (user, key) = getBintrayUserAndKey()
-    if (user == null || user.isEmpty() ||
-        key == null || key.isEmpty()) {
-      throw new IllegalStateException("Must specify Bintray user/API key in your local.properties.")
-    }
-  }
-}
-
-afterEvaluate {
-  bintrayUpload.dependsOn checkBintrayConfig
-}
-
-def (user, key) = getBintrayUserAndKey()
-publish {
-  bintrayUser = user
-  bintrayKey = key
-  userOrg = 'drummer-aidan'
-  groupId = 'com.afollestad.material-dialogs'
-  uploadName = "material-dialogs:$shard"
-  artifactId = shard
-  publishVersion = versions.publishVersion
-  desc = 'A beautiful, fluid, and customizable dialogs API.'
-  website = 'https://github.com/afollestad/material-dialogs'
-  dryRun = false
-}
-
-ext.modulePackageId = publish.groupId + '.' + publish.artifactId

+ 7 - 38
bottomsheets/build.gradle

@@ -1,42 +1,11 @@
-apply plugin: 'com.android.library'
-apply plugin: 'kotlin-android'
-apply from: '../dependencies.gradle'
+ext.module_group = "com.afollestad.material-dialogs"
+ext.module_name = "bottomsheets"
 
-ext.shard = 'bottomsheets'
-apply from: '../bintrayconfig.gradle'
-
-android {
-  compileSdkVersion versions.compileSdk
-  buildToolsVersion versions.buildTools
-
-  compileOptions {
-    if (modulePackageId != null && modulePackageId != '') {
-      logger.warn('Package for current module: ' + modulePackageId)
-      kotlinOptions.freeCompilerArgs += ['-module-name', modulePackageId]
-    } else {
-      logger.warn('Skipping setting compiler module name, no package to use.')
-    }
-  }
-
-  defaultConfig {
-    minSdkVersion versions.minSdk
-    targetSdkVersion versions.compileSdk
-    versionCode versions.publishVersionCode
-    versionName versions.publishVersion
-  }
-
-  sourceSets {
-    main.res.srcDirs = [
-        'src/main/res',
-        'src/main/res-public'
-    ]
-  }
-}
+apply from: rootProject.file("gradle/android_library_config.gradle")
 
 dependencies {
-  implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:' + versions.kotlin
-  implementation project(':core')
-  implementation 'com.google.android.material:material:' + versions.androidxMaterial
-}
+  api project(':core')
 
-apply from: '../spotless.gradle'
+  implementation deps.kotlin.stdlib8
+  implementation deps.google_material
+}

+ 17 - 12
build.gradle

@@ -1,32 +1,37 @@
-apply from: './dependencies.gradle'
-apply from: './versionsPlugin.gradle'
+apply from: rootProject.file("gradle/versions_plugin_config.gradle")
 
 buildscript {
-  apply from: './dependencies.gradle'
+  apply from: rootProject.file("dependencies.gradle")
 
   repositories {
-    maven { url "https://dl.bintray.com/drummer-aidan/maven" }
     google()
     jcenter()
   }
 
   dependencies {
-    classpath 'com.android.tools.build:gradle:' + versions.gradlePlugin
-    classpath 'com.diffplug.spotless:spotless-plugin-gradle:' + versions.spotlessPlugin
-    classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:' + versions.kotlin
-    classpath 'com.github.ben-manes:gradle-versions-plugin:' + versions.versionPlugin
-    classpath 'com.novoda:bintray-release:' + versions.bintrayPlugin
+    classpath deps.gradle_plugins.android
+    classpath deps.gradle_plugins.bintray_release
+    classpath deps.gradle_plugins.kotlin
+    classpath deps.gradle_plugins.spotless
+    classpath deps.gradle_plugins.versions
   }
 }
 
 allprojects {
   repositories {
-    maven { url "https://dl.bintray.com/drummer-aidan/maven" }
     google()
     jcenter()
   }
+}
 
-  tasks.withType(Javadoc).all {
-    enabled = false
+subprojects {
+  tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
+    kotlinOptions {
+      freeCompilerArgs += ['-module-name', project.path.replace('/', '.').replace(':', '_')]
+    }
   }
 }
+
+task clean(type: Delete) {
+  delete rootProject.buildDir
+}

+ 6 - 40
color/build.gradle

@@ -1,45 +1,11 @@
-apply plugin: 'com.android.library'
-apply plugin: 'kotlin-android'
-apply from: '../dependencies.gradle'
+ext.module_group = "com.afollestad.material-dialogs"
+ext.module_name = "color"
 
-ext.shard = 'color'
-apply from: '../bintrayconfig.gradle'
-
-android {
-  compileSdkVersion versions.compileSdk
-  buildToolsVersion versions.buildTools
-
-  compileOptions {
-    if (modulePackageId != null && modulePackageId != '') {
-      logger.warn('Package for current module: ' + modulePackageId)
-      kotlinOptions.freeCompilerArgs += ['-module-name', modulePackageId]
-    } else {
-      logger.warn('Skipping setting compiler module name, no package to use.')
-    }
-  }
-
-  defaultConfig {
-    minSdkVersion versions.minSdk
-    targetSdkVersion versions.compileSdk
-    versionCode versions.publishVersionCode
-    versionName versions.publishVersion
-  }
-
-  sourceSets {
-    main.res.srcDirs = [
-        'src/main/res',
-        'src/main/res-public'
-    ]
-  }
-}
+apply from: rootProject.file("gradle/android_library_config.gradle")
 
 dependencies {
-  implementation 'androidx.recyclerview:recyclerview:' + versions.androidxRecyclerView
-  implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:' + versions.kotlin
-
-  implementation 'com.afollestad:viewpagerdots:' + versions.dotsIndicator
+  api project(':core')
 
-  implementation project(':core')
+  implementation deps.kotlin.stdlib8
+  implementation deps.afollestad.dots_indicator
 }
-
-apply from: '../spotless.gradle'

+ 7 - 39
core/build.gradle

@@ -1,44 +1,12 @@
-apply plugin: 'com.android.library'
-apply plugin: 'kotlin-android'
-apply from: '../dependencies.gradle'
+ext.module_group = "com.afollestad.material-dialogs"
+ext.module_name = "core"
 
-ext.shard = 'core'
-apply from: '../bintrayconfig.gradle'
-
-android {
-  compileSdkVersion versions.compileSdk
-  buildToolsVersion versions.buildTools
-
-  compileOptions {
-    if (modulePackageId != null && modulePackageId != '') {
-      logger.warn('Package for current module: ' + modulePackageId)
-      kotlinOptions.freeCompilerArgs += ['-module-name', modulePackageId]
-    } else {
-      logger.warn('Skipping setting compiler module name, no package to use.')
-    }
-  }
-
-  defaultConfig {
-    minSdkVersion versions.minSdk
-    targetSdkVersion versions.compileSdk
-    versionCode versions.publishVersionCode
-    versionName versions.publishVersion
-  }
-
-  sourceSets {
-    main.res.srcDirs = [
-        'src/main/res',
-        'src/main/res-public'
-    ]
-  }
-}
+apply from: rootProject.file("gradle/android_library_config.gradle")
 
 dependencies {
-  api 'androidx.appcompat:appcompat:' + versions.androidxCore
-  api 'androidx.annotation:annotation:' + versions.androidxAnnotation
+  api deps.androidx.core
+  api deps.androidx.recycler_view
+  compileOnly deps.androidx.annotations
 
-  implementation 'androidx.recyclerview:recyclerview:' + versions.androidxRecyclerView
-  implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:' + versions.kotlin
+  implementation deps.kotlin.stdlib8
 }
-
-apply from: '../spotless.gradle'

+ 1 - 1
core/src/main/java/com/afollestad/materialdialogs/internal/list/DialogRecyclerView.kt

@@ -24,8 +24,8 @@ import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
 import com.afollestad.materialdialogs.MaterialDialog
 import com.afollestad.materialdialogs.internal.main.DialogLayout
-import com.afollestad.materialdialogs.utils.invalidateDividers
 import com.afollestad.materialdialogs.utils.MDUtil.waitForWidth
+import com.afollestad.materialdialogs.utils.invalidateDividers
 
 typealias InvalidateDividersDelegate = (scrolledDown: Boolean, atBottom: Boolean) -> Unit
 

+ 1 - 1
core/src/main/java/com/afollestad/materialdialogs/internal/list/MultiChoiceDialogAdapter.kt

@@ -30,8 +30,8 @@ import com.afollestad.materialdialogs.actions.setActionButtonEnabled
 import com.afollestad.materialdialogs.list.MultiChoiceListener
 import com.afollestad.materialdialogs.list.getItemSelector
 import com.afollestad.materialdialogs.utils.MDUtil.createColorSelector
-import com.afollestad.materialdialogs.utils.MDUtil.maybeSetTextColor
 import com.afollestad.materialdialogs.utils.MDUtil.inflate
+import com.afollestad.materialdialogs.utils.MDUtil.maybeSetTextColor
 import com.afollestad.materialdialogs.utils.appendAll
 import com.afollestad.materialdialogs.utils.pullIndices
 import com.afollestad.materialdialogs.utils.removeAll

+ 1 - 1
core/src/main/java/com/afollestad/materialdialogs/internal/list/PlainListDialogAdapter.kt

@@ -27,8 +27,8 @@ import com.afollestad.materialdialogs.actions.hasActionButton
 import com.afollestad.materialdialogs.actions.hasActionButtons
 import com.afollestad.materialdialogs.list.ItemListener
 import com.afollestad.materialdialogs.list.getItemSelector
-import com.afollestad.materialdialogs.utils.MDUtil.maybeSetTextColor
 import com.afollestad.materialdialogs.utils.MDUtil.inflate
+import com.afollestad.materialdialogs.utils.MDUtil.maybeSetTextColor
 
 private const val KEY_ACTIVATED_INDEX = "activated_index"
 

+ 1 - 1
core/src/main/java/com/afollestad/materialdialogs/internal/message/DialogContentLayout.kt

@@ -38,8 +38,8 @@ import com.afollestad.materialdialogs.R
 import com.afollestad.materialdialogs.internal.button.DialogActionButtonLayout
 import com.afollestad.materialdialogs.internal.list.DialogRecyclerView
 import com.afollestad.materialdialogs.internal.main.DialogLayout
-import com.afollestad.materialdialogs.internal.main.DialogTitleLayout
 import com.afollestad.materialdialogs.internal.main.DialogScrollView
+import com.afollestad.materialdialogs.internal.main.DialogTitleLayout
 import com.afollestad.materialdialogs.message.DialogMessageSettings
 import com.afollestad.materialdialogs.utils.MDUtil.maybeSetTextColor
 import com.afollestad.materialdialogs.utils.MDUtil.updatePadding

+ 1 - 1
core/src/main/java/com/afollestad/materialdialogs/list/DialogMultiChoiceExt.kt

@@ -23,9 +23,9 @@ import androidx.annotation.CheckResult
 import com.afollestad.materialdialogs.MaterialDialog
 import com.afollestad.materialdialogs.WhichButton.POSITIVE
 import com.afollestad.materialdialogs.actions.setActionButtonEnabled
-import com.afollestad.materialdialogs.utils.MDUtil.assertOneSet
 import com.afollestad.materialdialogs.internal.list.DialogAdapter
 import com.afollestad.materialdialogs.internal.list.MultiChoiceDialogAdapter
+import com.afollestad.materialdialogs.utils.MDUtil.assertOneSet
 import com.afollestad.materialdialogs.utils.MDUtil.getStringArray
 
 /**

+ 1 - 1
core/src/main/java/com/afollestad/materialdialogs/list/DialogSingleChoiceExt.kt

@@ -23,9 +23,9 @@ import androidx.annotation.CheckResult
 import com.afollestad.materialdialogs.MaterialDialog
 import com.afollestad.materialdialogs.WhichButton.POSITIVE
 import com.afollestad.materialdialogs.actions.setActionButtonEnabled
-import com.afollestad.materialdialogs.utils.MDUtil.assertOneSet
 import com.afollestad.materialdialogs.internal.list.DialogAdapter
 import com.afollestad.materialdialogs.internal.list.SingleChoiceDialogAdapter
+import com.afollestad.materialdialogs.utils.MDUtil.assertOneSet
 import com.afollestad.materialdialogs.utils.MDUtil.getStringArray
 
 /**

+ 8 - 44
datetime/build.gradle

@@ -1,49 +1,13 @@
-apply plugin: 'com.android.library'
-apply plugin: 'kotlin-android'
-apply from: '../dependencies.gradle'
+ext.module_group = "com.afollestad.material-dialogs"
+ext.module_name = "datetime"
 
-ext.shard = 'datetime'
-apply from: '../bintrayconfig.gradle'
-
-android {
-  compileSdkVersion versions.compileSdk
-  buildToolsVersion versions.buildTools
-
-  compileOptions {
-    if (modulePackageId != null && modulePackageId != '') {
-      logger.warn('Package for current module: ' + modulePackageId)
-      kotlinOptions.freeCompilerArgs += ['-module-name', modulePackageId]
-    } else {
-      logger.warn('Skipping setting compiler module name, no package to use.')
-    }
-  }
-
-  defaultConfig {
-    minSdkVersion versions.minSdk
-    targetSdkVersion versions.compileSdk
-    versionCode versions.publishVersionCode
-    versionName versions.publishVersion
-  }
-
-  sourceSets {
-    main.res.srcDirs = [
-        'src/main/res',
-        'src/main/res-public'
-    ]
-  }
-}
+apply from: rootProject.file("gradle/android_library_config.gradle")
 
 dependencies {
-  api 'androidx.appcompat:appcompat:' + versions.androidxCore
-  api 'androidx.annotation:annotation:' + versions.androidxAnnotation
-  api 'com.afollestad:date-picker:' + versions.datePicker
-
-  implementation 'androidx.recyclerview:recyclerview:' + versions.androidxRecyclerView
-  implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:' + versions.kotlin
+  api project(':core')
+  api deps.afollestad.date_picker
+  compileOnly deps.androidx.annotations
 
-  implementation 'com.afollestad:viewpagerdots:' + versions.dotsIndicator
-
-  implementation project(':core')
+  implementation deps.afollestad.dots_indicator
+  implementation deps.kotlin.stdlib8
 }
-
-apply from: '../spotless.gradle'

+ 38 - 26
dependencies.gradle

@@ -1,33 +1,45 @@
 ext.versions = [
-    // Project
-    minSdk              : 16,
-    compileSdk          : 29,
-    buildTools          : '29.0.0',
-    publishVersion      : '3.1.1',
-    publishVersionCode  : 259,
+    min_sdk: 16,
+    compile_sdk: 29,
+    build_tools: "29.0.0",
+    publish_version: "3.1.1",
+    publish_version_code: 259
+]
+
+ext.deps = [
+    gradle_plugins: [
+        android: "com.android.tools.build:gradle:3.5.2",
+        kotlin: "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.61",
+        spotless: "com.diffplug.spotless:spotless-plugin-gradle:3.26.1",
+        versions: "com.github.ben-manes:gradle-versions-plugin:0.27.0",
+        bintray_release: "com.novoda:bintray-release:0.9.1",
+    ],
 
-    // Plugins
-    gradlePlugin        : '3.5.0',
-    spotlessPlugin      : '3.24.2',
-    versionPlugin       : '0.24.0',
-    bintrayPlugin       : '0.9.1',
+    androidx: [
+        annotations: "androidx.annotation:annotation:1.1.0",
+        core: "androidx.appcompat:appcompat:1.1.0",
+        grid_layout: "androidx.gridlayout:gridlayout:1.0.0",
+        lifecycle: [
+            runtime: "androidx.lifecycle:lifecycle-runtime:2.1.0",
+            compiler: "androidx.lifecycle:lifecycle-compiler:2.1.0"
+        ],
+        recycler_view: "androidx.recyclerview:recyclerview:1.1.0"
+    ],
 
-    // AndroidX
-    androidxCore        : '1.1.0',
-    androidxAnnotation  : '1.1.0',
-    androidxRecyclerView: '1.0.0',
-    androidxMaterial    : '1.0.0',
-    lifecycle           : '2.1.0',
+    google_material: "com.google.android.material:material:1.0.0",
 
-    // Kotlin
-    kotlin              : '1.3.50',
-    coroutines          : '1.3.1',
+    kotlin: [
+        stdlib8: "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
+        coroutines: [
+            core: "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.2"
+        ]
+    ],
 
-    // afollestad
-    assent              : '2.3.1',
-    dotsIndicator       : '1.0.0',
-    datePicker          : '0.6.1',
+    afollestad: [
+        assent: "com.afollestad:assent:2.3.1",
+        dots_indicator: "com.afollestad:viewpagerdots:1.0.0",
+        date_picker: "com.afollestad:date-picker:0.6.1"
+    ],
 
-    // Other
-    leakCanary          : '2.0-beta-3'
+    leak_canary: "com.squareup.leakcanary:leakcanary-android:2.0-beta-3"
 ]

+ 7 - 44
files/build.gradle

@@ -1,49 +1,12 @@
-apply plugin: 'com.android.library'
-apply plugin: 'kotlin-android'
-apply from: '../dependencies.gradle'
+ext.module_group = "com.afollestad.material-dialogs"
+ext.module_name = "files"
 
-ext.shard = 'files'
-apply from: '../bintrayconfig.gradle'
-
-android {
-  compileSdkVersion versions.compileSdk
-  buildToolsVersion versions.buildTools
-
-  compileOptions {
-    if (modulePackageId != null && modulePackageId != '') {
-      logger.warn('Package for current module: ' + modulePackageId)
-      kotlinOptions.freeCompilerArgs += ['-module-name', modulePackageId]
-    } else {
-      logger.warn('Skipping setting compiler module name, no package to use.')
-    }
-  }
-
-  defaultConfig {
-    minSdkVersion versions.minSdk
-    targetSdkVersion versions.compileSdk
-    versionCode versions.publishVersionCode
-    versionName versions.publishVersion
-  }
-
-  sourceSets {
-    main.res.srcDirs = [
-        'src/main/res',
-        'src/main/res-public'
-    ]
-  }
-
-  packagingOptions {
-    exclude 'META-INF/atomicfu.kotlin_module'
-  }
-}
+apply from: rootProject.file("gradle/android_library_config.gradle")
 
 dependencies {
-  implementation 'androidx.recyclerview:recyclerview:' + versions.androidxRecyclerView
-  implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:' + versions.kotlin
-  implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:' + versions.coroutines
+  api project(':core')
+  api project(':input')
 
-  implementation project(':core')
-  implementation project(':input')
+  implementation deps.kotlin.coroutines.core
+  implementation deps.kotlin.stdlib8
 }
-
-apply from: '../spotless.gradle'

+ 2 - 2
files/src/main/java/com/afollestad/materialdialogs/files/FileChooserAdapter.kt

@@ -37,14 +37,14 @@ import com.afollestad.materialdialogs.list.getItemSelector
 import com.afollestad.materialdialogs.utils.MDUtil.isColorDark
 import com.afollestad.materialdialogs.utils.MDUtil.maybeSetTextColor
 import com.afollestad.materialdialogs.utils.MDUtil.resolveColor
+import java.io.File
+import java.util.Locale
 import kotlinx.coroutines.Dispatchers.IO
 import kotlinx.coroutines.Dispatchers.Main
 import kotlinx.coroutines.GlobalScope
 import kotlinx.coroutines.Job
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
-import java.io.File
-import java.util.Locale
 
 internal class FileChooserViewHolder(
   itemView: View,

+ 8 - 0
gradle/android_application_config.gradle

@@ -0,0 +1,8 @@
+apply plugin: "com.android.application"
+apply from: rootProject.file("gradle/android_common_config.gradle")
+
+if (module_package_id == null) {
+  throw new IllegalStateException("module_package_id is missing!")
+}
+
+android.defaultConfig.applicationId = module_package_id.replace('-', '')

+ 48 - 0
gradle/android_bintray_config.gradle

@@ -0,0 +1,48 @@
+if (!project.rootProject.file('local.properties').exists()) {
+  logger.warn("local.properties not found. Skipping Bintray Release setup.")
+  return
+}
+apply plugin: "com.novoda.bintray-release"
+
+def getBintrayUserAndKey() {
+  Properties properties = new Properties()
+  properties.load(project.rootProject.file("local.properties").newDataInputStream())
+  return [
+      properties.getProperty("bintray.user"),
+      properties.getProperty("bintray.apikey")
+  ]
+}
+
+if (versions == null || versions.publish_version == null) {
+  throw new IllegalStateException("Unable to reference publish_version!")
+} else if (module_group == null || module_name == null) {
+  throw new IllegalStateException("Must provide module_group and module_name!")
+}
+
+task checkBintrayConfig {
+  doLast {
+    def (user, key) = getBintrayUserAndKey()
+    if (user == null || user.isEmpty() ||
+        key == null || key.isEmpty()) {
+      throw new IllegalStateException("Must specify Bintray user/API key in your local.properties.")
+    }
+  }
+}
+
+afterEvaluate {
+  bintrayUpload.dependsOn checkBintrayConfig
+}
+
+def (user, key) = getBintrayUserAndKey()
+publish {
+  bintrayUser = user
+  bintrayKey = key
+  userOrg = "drummer-aidan"
+  groupId = module_group
+  uploadName = "material-dialogs:$module_name"
+  artifactId = module_name
+  publishVersion = versions.publish_version
+  desc = "A beautiful, fluid, and customizable dialogs API."
+  website = "https://github.com/afollestad/material-dialogs"
+  dryRun = false
+}

+ 34 - 0
gradle/android_common_config.gradle

@@ -0,0 +1,34 @@
+ext.module_package_id = "${module_group}.${module_name}"
+logger.info("Package ID: $module_package_id")
+
+apply plugin: "kotlin-android"
+apply from: rootProject.file("dependencies.gradle")
+apply from: rootProject.file("gradle/spotless_plugin_config.gradle")
+
+android {
+  compileSdkVersion versions.compile_sdk
+  buildToolsVersion versions.build_tools
+
+  compileOptions {
+    sourceCompatibility 1.8
+    targetCompatibility 1.8
+  }
+
+  defaultConfig {
+    minSdkVersion versions.min_sdk
+    targetSdkVersion versions.compile_sdk
+    versionCode versions.publish_version_code
+    versionName versions.publish_version
+  }
+
+  sourceSets {
+    main.res.srcDirs = [
+        "src/main/res",
+        "src/main/res-public"
+    ]
+  }
+
+  packagingOptions {
+    exclude 'META-INF/atomicfu.kotlin_module'
+  }
+}

+ 4 - 0
gradle/android_library_config.gradle

@@ -0,0 +1,4 @@
+apply plugin: "com.android.library"
+
+apply from: rootProject.file("gradle/android_common_config.gradle")
+apply from: rootProject.file("gradle/android_bintray_config.gradle")

+ 2 - 2
spotless.gradle → gradle/spotless_plugin_config.gradle

@@ -9,8 +9,8 @@ spotless {
   }
   kotlin {
     target "**/*.kt"
-    ktlint().userData(['indent_size': '2', 'continuation_indent_size': '2'])
-    licenseHeaderFile '../spotless.license.kt'
+    ktlint().userData(["indent_size": "2", "continuation_indent_size": "2"])
+    licenseHeaderFile rootProject.file("spotless.license.kt")
     trimTrailingWhitespace()
     endWithNewline()
   }

+ 0 - 0
versionsPlugin.gradle → gradle/versions_plugin_config.gradle


+ 7 - 38
input/build.gradle

@@ -1,42 +1,11 @@
-apply plugin: 'com.android.library'
-apply plugin: 'kotlin-android'
-apply from: '../dependencies.gradle'
+ext.module_group = "com.afollestad.material-dialogs"
+ext.module_name = "input"
 
-ext.shard = 'input'
-apply from: '../bintrayconfig.gradle'
-
-android {
-  compileSdkVersion versions.compileSdk
-  buildToolsVersion versions.buildTools
-
-  compileOptions {
-    if (modulePackageId != null && modulePackageId != '') {
-      logger.warn('Package for current module: ' + modulePackageId)
-      kotlinOptions.freeCompilerArgs += ['-module-name', modulePackageId]
-    } else {
-      logger.warn('Skipping setting compiler module name, no package to use.')
-    }
-  }
-
-  defaultConfig {
-    minSdkVersion versions.minSdk
-    targetSdkVersion versions.compileSdk
-    versionCode versions.publishVersionCode
-    versionName versions.publishVersion
-  }
-
-  sourceSets {
-    main.res.srcDirs = [
-        'src/main/res',
-        'src/main/res-public'
-    ]
-  }
-}
+apply from: rootProject.file("gradle/android_library_config.gradle")
 
 dependencies {
-  implementation 'com.google.android.material:material:' + versions.androidxMaterial
-  implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:' + versions.kotlin
-  implementation project(':core')
-}
+  api project(':core')
 
-apply from: '../spotless.gradle'
+  implementation deps.google_material
+  implementation deps.kotlin.stdlib8
+}

+ 7 - 39
lifecycle/build.gradle

@@ -1,44 +1,12 @@
-apply plugin: 'com.android.library'
-apply plugin: 'kotlin-android'
-apply from: '../dependencies.gradle'
+ext.module_group = "com.afollestad.material-dialogs"
+ext.module_name = "lifecycle"
 
-ext.shard = 'lifecycle'
-apply from: '../bintrayconfig.gradle'
-
-android {
-  compileSdkVersion versions.compileSdk
-  buildToolsVersion versions.buildTools
-
-  compileOptions {
-    if (modulePackageId != null && modulePackageId != '') {
-      logger.warn('Package for current module: ' + modulePackageId)
-      kotlinOptions.freeCompilerArgs += ['-module-name', modulePackageId]
-    } else {
-      logger.warn('Skipping setting compiler module name, no package to use.')
-    }
-  }
-
-  defaultConfig {
-    minSdkVersion versions.minSdk
-    targetSdkVersion versions.compileSdk
-    versionCode versions.publishVersionCode
-    versionName versions.publishVersion
-  }
-
-  sourceSets {
-    main.res.srcDirs = [
-        'src/main/res',
-        'src/main/res-public'
-    ]
-  }
-}
+apply from: rootProject.file("gradle/android_library_config.gradle")
 
 dependencies {
-  implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:' + versions.kotlin
-  implementation project(':core')
+  api project(':core')
 
-  implementation 'androidx.lifecycle:lifecycle-runtime:' + versions.lifecycle
-  annotationProcessor 'androidx.lifecycle:lifecycle-compiler:' + versions.lifecycle
+  implementation deps.kotlin.stdlib8
+  implementation deps.androidx.lifecycle.runtime
+  annotationProcessor deps.androidx.lifecycle.compiler
 }
-
-apply from: '../spotless.gradle'

+ 10 - 29
sample/build.gradle

@@ -1,24 +1,7 @@
-apply from: '../dependencies.gradle'
-apply plugin: 'com.android.application'
-apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
+ext.module_group = "com.afollestad.material-dialogs"
+ext.module_name = "sample"
 
-android {
-  compileSdkVersion versions.compileSdk
-  buildToolsVersion versions.buildTools
-
-  defaultConfig {
-    applicationId "com.afollestad.materialdialogssample"
-    minSdkVersion versions.minSdk
-    targetSdkVersion versions.compileSdk
-    versionCode versions.publishVersionCode
-    versionName versions.publishVersion
-  }
-
-  packagingOptions {
-    exclude 'META-INF/atomicfu.kotlin_module'
-  }
-}
+apply from: rootProject.file("gradle/android_application_config.gradle")
 
 dependencies {
   implementation project(':core')
@@ -29,16 +12,14 @@ dependencies {
   implementation project(':bottomsheets')
   implementation project(':lifecycle')
 
-  implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:' + versions.kotlin
+  implementation deps.kotlin.stdlib8
 
-  implementation 'androidx.appcompat:appcompat:' + versions.androidxCore
-  implementation 'androidx.gridlayout:gridlayout:' + versions.androidxRecyclerView
-  implementation 'androidx.recyclerview:recyclerview:' + versions.androidxRecyclerView
-  implementation 'com.google.android.material:material:' + versions.androidxMaterial
+  implementation deps.androidx.core
+  implementation deps.androidx.grid_layout
+  implementation deps.androidx.recycler_view
+  implementation deps.google_material
 
-  implementation 'com.afollestad:assent:' + versions.assent
+  implementation deps.afollestad.assent
 
-  debugImplementation 'com.squareup.leakcanary:leakcanary-android:' + versions.leakCanary
+  debugImplementation deps.leak_canary
 }
-
-apply from: '../spotless.gradle'

+ 64 - 115
sample/src/main/java/com/afollestad/materialdialogssample/MainActivity.kt

@@ -26,6 +26,7 @@ import android.text.method.PasswordTransformationMethod
 import android.view.Menu
 import android.view.MenuItem
 import android.webkit.WebView
+import android.widget.Button
 import android.widget.CheckBox
 import android.widget.EditText
 import androidx.appcompat.app.AppCompatActivity
@@ -57,63 +58,6 @@ import com.afollestad.materialdialogs.lifecycle.lifecycleOwner
 import com.afollestad.materialdialogs.list.listItems
 import com.afollestad.materialdialogs.list.listItemsMultiChoice
 import com.afollestad.materialdialogs.list.listItemsSingleChoice
-import kotlinx.android.synthetic.main.activity_main.basic
-import kotlinx.android.synthetic.main.activity_main.basic_buttons
-import kotlinx.android.synthetic.main.activity_main.basic_checkbox_titled_buttons
-import kotlinx.android.synthetic.main.activity_main.basic_html_content
-import kotlinx.android.synthetic.main.activity_main.basic_icon
-import kotlinx.android.synthetic.main.activity_main.basic_long_titled_buttons
-import kotlinx.android.synthetic.main.activity_main.basic_stacked_buttons
-import kotlinx.android.synthetic.main.activity_main.basic_titled
-import kotlinx.android.synthetic.main.activity_main.basic_titled_buttons
-import kotlinx.android.synthetic.main.activity_main.bottomsheet_colorPicker
-import kotlinx.android.synthetic.main.activity_main.bottomsheet_customView
-import kotlinx.android.synthetic.main.activity_main.bottomsheet_dateTimePicker
-import kotlinx.android.synthetic.main.activity_main.bottomsheet_grid
-import kotlinx.android.synthetic.main.activity_main.bottomsheet_info
-import kotlinx.android.synthetic.main.activity_main.bottomsheet_list
-import kotlinx.android.synthetic.main.activity_main.buttons_callbacks
-import kotlinx.android.synthetic.main.activity_main.buttons_neutral
-import kotlinx.android.synthetic.main.activity_main.buttons_stacked
-import kotlinx.android.synthetic.main.activity_main.buttons_stacked_checkboxPrompt
-import kotlinx.android.synthetic.main.activity_main.colorChooser_accent
-import kotlinx.android.synthetic.main.activity_main.colorChooser_customColors
-import kotlinx.android.synthetic.main.activity_main.colorChooser_customColorsNoSub
-import kotlinx.android.synthetic.main.activity_main.colorChooser_primary
-import kotlinx.android.synthetic.main.activity_main.colorChooser_primary_customArgb
-import kotlinx.android.synthetic.main.activity_main.colorChooser_primary_customRgb
-import kotlinx.android.synthetic.main.activity_main.custom_view
-import kotlinx.android.synthetic.main.activity_main.custom_view_webview
-import kotlinx.android.synthetic.main.activity_main.date_picker
-import kotlinx.android.synthetic.main.activity_main.datetime_picker
-import kotlinx.android.synthetic.main.activity_main.file_chooser
-import kotlinx.android.synthetic.main.activity_main.file_chooser_buttons
-import kotlinx.android.synthetic.main.activity_main.file_chooser_filter
-import kotlinx.android.synthetic.main.activity_main.folder_chooser_buttons
-import kotlinx.android.synthetic.main.activity_main.folder_chooser_filter
-import kotlinx.android.synthetic.main.activity_main.input
-import kotlinx.android.synthetic.main.activity_main.input_check_prompt
-import kotlinx.android.synthetic.main.activity_main.input_counter
-import kotlinx.android.synthetic.main.activity_main.input_message
-import kotlinx.android.synthetic.main.activity_main.list
-import kotlinx.android.synthetic.main.activity_main.list_buttons
-import kotlinx.android.synthetic.main.activity_main.list_checkPrompt_buttons
-import kotlinx.android.synthetic.main.activity_main.list_dont_wait_positive
-import kotlinx.android.synthetic.main.activity_main.list_long
-import kotlinx.android.synthetic.main.activity_main.list_long_titled
-import kotlinx.android.synthetic.main.activity_main.list_titled
-import kotlinx.android.synthetic.main.activity_main.list_titled_buttons
-import kotlinx.android.synthetic.main.activity_main.list_titled_message_buttons
-import kotlinx.android.synthetic.main.activity_main.misc_dialog_callbacks
-import kotlinx.android.synthetic.main.activity_main.multiple_choice
-import kotlinx.android.synthetic.main.activity_main.multiple_choice_buttons
-import kotlinx.android.synthetic.main.activity_main.multiple_choice_disabled_items
-import kotlinx.android.synthetic.main.activity_main.multiple_choice_long_items
-import kotlinx.android.synthetic.main.activity_main.single_choice_buttons_titled
-import kotlinx.android.synthetic.main.activity_main.single_choice_disabled_items
-import kotlinx.android.synthetic.main.activity_main.single_choice_long_items
-import kotlinx.android.synthetic.main.activity_main.single_choice_titled
-import kotlinx.android.synthetic.main.activity_main.time_picker
 
 /** @author Aidan Follestad (afollestad) */
 class MainActivity : AppCompatActivity() {
@@ -134,7 +78,7 @@ class MainActivity : AppCompatActivity() {
     super.onCreate(savedInstanceState)
     setContentView(R.layout.activity_main)
 
-    basic.onClickDebounced {
+    R.id.basic.onClickDebounced {
       MaterialDialog(this).show {
         message(R.string.shareLocationPrompt)
         debugMode(debugMode)
@@ -142,7 +86,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    basic_titled.onClickDebounced {
+    R.id.basic_titled.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.useGoogleLocationServices)
         message(R.string.useGoogleLocationServicesPrompt)
@@ -151,7 +95,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    basic_buttons.onClickDebounced {
+    R.id.basic_buttons.onClickDebounced {
       MaterialDialog(this).show {
         message(R.string.useGoogleLocationServicesPrompt)
         positiveButton(R.string.agree)
@@ -161,7 +105,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    basic_stacked_buttons.onClickDebounced {
+    R.id.basic_stacked_buttons.onClickDebounced {
       MaterialDialog(this).show {
         message(R.string.useGoogleLocationServicesPrompt)
         positiveButton(text = "This is a long button")
@@ -170,7 +114,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    basic_titled_buttons.onClickDebounced {
+    R.id.basic_titled_buttons.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.useGoogleLocationServices)
         message(R.string.useGoogleLocationServicesPrompt)
@@ -181,7 +125,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    basic_html_content.onClickDebounced {
+    R.id.basic_html_content.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.app_name)
         message(R.string.htmlContent) {
@@ -195,7 +139,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    basic_long_titled_buttons.onClickDebounced {
+    R.id.basic_long_titled_buttons.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.useGoogleLocationServices)
         message(R.string.loremIpsum)
@@ -206,7 +150,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    basic_icon.onClickDebounced {
+    R.id.basic_icon.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.useGoogleLocationServices)
         icon(R.mipmap.ic_launcher)
@@ -218,7 +162,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    basic_checkbox_titled_buttons.onClickDebounced {
+    R.id.basic_checkbox_titled_buttons.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.useGoogleLocationServices)
         message(R.string.useGoogleLocationServicesPrompt)
@@ -232,7 +176,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    list.onClickDebounced {
+    R.id.list.onClickDebounced {
       MaterialDialog(this).show {
         listItems(R.array.socialNetworks) { _, index, text ->
           toast("Selected item $text at index $index")
@@ -242,7 +186,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    list_buttons.onClickDebounced {
+    R.id.list_buttons.onClickDebounced {
       MaterialDialog(this).show {
         listItems(R.array.socialNetworks) { _, index, text ->
           toast("Selected item $text at index $index")
@@ -254,7 +198,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    list_dont_wait_positive.onClickDebounced {
+    R.id.list_dont_wait_positive.onClickDebounced {
       MaterialDialog(this).show {
         listItems(R.array.socialNetworks, waitForPositiveButton = false) { _, index, text ->
           toast("Selected item $text at index $index")
@@ -265,7 +209,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    list_titled.onClickDebounced {
+    R.id.list_titled.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.socialNetworks)
         listItems(R.array.socialNetworks) { _, index, text ->
@@ -276,7 +220,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    list_titled_buttons.onClickDebounced {
+    R.id.list_titled_buttons.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.socialNetworks)
         listItems(R.array.socialNetworks) { _, index, text ->
@@ -289,7 +233,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    list_titled_message_buttons.onClickDebounced {
+    R.id.list_titled_message_buttons.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.socialNetworks)
         message(R.string.useGoogleLocationServices)
@@ -303,7 +247,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    list_long.onClickDebounced {
+    R.id.list_long.onClickDebounced {
       MaterialDialog(this).show {
         listItems(R.array.states) { _, index, text ->
           toast("Selected item $text at index $index")
@@ -313,7 +257,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    list_long_titled.onClickDebounced {
+    R.id.list_long_titled.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.states)
         listItems(R.array.states) { _, index, text ->
@@ -324,7 +268,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    list_checkPrompt_buttons.onClickDebounced {
+    R.id.list_checkPrompt_buttons.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.socialNetworks)
         listItems(R.array.socialNetworks_longItems) { _, index, text ->
@@ -340,7 +284,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    single_choice_titled.onClickDebounced {
+    R.id.single_choice_titled.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.socialNetworks)
         listItemsSingleChoice(R.array.socialNetworks, initialSelection = 1) { _, index, text ->
@@ -351,7 +295,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    single_choice_buttons_titled.onClickDebounced {
+    R.id.single_choice_buttons_titled.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.socialNetworks)
         listItemsSingleChoice(R.array.socialNetworks, initialSelection = 2) { _, index, text ->
@@ -363,7 +307,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    single_choice_long_items.onClickDebounced {
+    R.id.single_choice_long_items.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.socialNetworks)
         listItemsSingleChoice(R.array.socialNetworks_longItems) { _, index, text ->
@@ -375,7 +319,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    single_choice_disabled_items.onClickDebounced {
+    R.id.single_choice_disabled_items.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.socialNetworks)
         listItemsSingleChoice(
@@ -389,7 +333,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    multiple_choice.onClickDebounced {
+    R.id.multiple_choice.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.socialNetworks)
         listItemsMultiChoice(
@@ -402,7 +346,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    multiple_choice_buttons.onClickDebounced {
+    R.id.multiple_choice_buttons.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.socialNetworks)
         listItemsMultiChoice(
@@ -416,7 +360,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    multiple_choice_long_items.onClickDebounced {
+    R.id.multiple_choice_long_items.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.socialNetworks)
         listItemsMultiChoice(
@@ -430,7 +374,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    multiple_choice_disabled_items.onClickDebounced {
+    R.id.multiple_choice_disabled_items.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.socialNetworks)
         listItemsMultiChoice(
@@ -446,7 +390,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    buttons_stacked.onClickDebounced {
+    R.id.buttons_stacked.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.useGoogleLocationServices)
         message(R.string.useGoogleLocationServicesPrompt)
@@ -458,7 +402,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    buttons_stacked_checkboxPrompt.onClickDebounced {
+    R.id.buttons_stacked_checkboxPrompt.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.useGoogleLocationServices)
         message(R.string.useGoogleLocationServicesPrompt)
@@ -473,7 +417,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    buttons_neutral.onClickDebounced {
+    R.id.buttons_neutral.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.useGoogleLocationServices)
         message(R.string.useGoogleLocationServicesPrompt)
@@ -485,7 +429,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    buttons_callbacks.onClickDebounced {
+    R.id.buttons_callbacks.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.useGoogleLocationServices)
         message(R.string.useGoogleLocationServicesPrompt)
@@ -503,7 +447,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    misc_dialog_callbacks.onClickDebounced {
+    R.id.misc_dialog_callbacks.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.useGoogleLocationServices)
         message(R.string.useGoogleLocationServicesPrompt)
@@ -517,7 +461,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    input.onClickDebounced {
+    R.id.input.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.useGoogleLocationServices)
         input(
@@ -532,7 +476,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    input_message.onClickDebounced {
+    R.id.input_message.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.useGoogleLocationServices)
         message(R.string.useGoogleLocationServicesPrompt)
@@ -550,7 +494,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    input_counter.onClickDebounced {
+    R.id.input_counter.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.useGoogleLocationServices)
         input(
@@ -567,7 +511,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    input_check_prompt.onClickDebounced {
+    R.id.input_check_prompt.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.useGoogleLocationServices)
         input(
@@ -586,11 +530,11 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    custom_view.onClickDebounced { showCustomViewDialog() }
+    R.id.custom_view.onClickDebounced { showCustomViewDialog() }
 
-    custom_view_webview.onClickDebounced { showWebViewDialog() }
+    R.id.custom_view_webview.onClickDebounced { showWebViewDialog() }
 
-    colorChooser_primary.onClickDebounced {
+    R.id.colorChooser_primary.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.primary_colors)
         colorChooser(
@@ -606,7 +550,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    colorChooser_accent.onClickDebounced {
+    R.id.colorChooser_accent.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.accent_colors)
         colorChooser(
@@ -622,7 +566,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    colorChooser_customColors.onClickDebounced {
+    R.id.colorChooser_customColors.onClickDebounced {
       val topLevel = intArrayOf(TRANSPARENT, Color.RED, Color.YELLOW, Color.BLUE)
       val subLevel = arrayOf(
           intArrayOf(Color.WHITE, TRANSPARENT, Color.BLACK),
@@ -646,7 +590,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    colorChooser_customColorsNoSub.onClickDebounced {
+    R.id.colorChooser_customColorsNoSub.onClickDebounced {
       val topLevel = intArrayOf(Color.RED, Color.YELLOW, Color.BLUE)
 
       MaterialDialog(this).show {
@@ -661,7 +605,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    colorChooser_primary_customRgb.onClickDebounced {
+    R.id.colorChooser_primary_customRgb.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.custom_colors_rgb)
         colorChooser(
@@ -678,7 +622,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    colorChooser_primary_customArgb.onClickDebounced {
+    R.id.colorChooser_primary_customArgb.onClickDebounced {
       MaterialDialog(this).show {
         title(R.string.custom_colors_argb)
         colorChooser(
@@ -696,17 +640,17 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    file_chooser.onClickDebounced { showFileChooser() }
+    R.id.file_chooser.onClickDebounced { showFileChooser() }
 
-    file_chooser_buttons.onClickDebounced { showFileChooserButtons() }
+    R.id.file_chooser_buttons.onClickDebounced { showFileChooserButtons() }
 
-    file_chooser_filter.onClickDebounced { showFileChooserFilter() }
+    R.id.file_chooser_filter.onClickDebounced { showFileChooserFilter() }
 
-    folder_chooser_buttons.onClickDebounced { showFolderChooserButtons() }
+    R.id.folder_chooser_buttons.onClickDebounced { showFolderChooserButtons() }
 
-    folder_chooser_filter.onClickDebounced { showFolderChooserFilter() }
+    R.id.folder_chooser_filter.onClickDebounced { showFolderChooserFilter() }
 
-    date_picker.onClickDebounced {
+    R.id.date_picker.onClickDebounced {
       MaterialDialog(this).show {
         datePicker { _, date ->
           toast("Selected date: ${date.formatDate()}")
@@ -716,7 +660,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    time_picker.onClickDebounced {
+    R.id.time_picker.onClickDebounced {
       MaterialDialog(this).show {
         title(text = "Select Time")
         timePicker { _, time ->
@@ -727,7 +671,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    datetime_picker.onClickDebounced {
+    R.id.datetime_picker.onClickDebounced {
       MaterialDialog(this).show {
         title(text = "Select Date and Time")
         dateTimePicker(requireFutureDateTime = true) { _, dateTime ->
@@ -738,7 +682,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    bottomsheet_info.onClickDebounced {
+    R.id.bottomsheet_info.onClickDebounced {
       MaterialDialog(this, BottomSheet(WRAP_CONTENT)).show {
         title(R.string.useGoogleLocationServices)
         message(R.string.useGoogleLocationServicesPrompt)
@@ -749,7 +693,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    bottomsheet_list.onClickDebounced {
+    R.id.bottomsheet_list.onClickDebounced {
       MaterialDialog(this, BottomSheet(WRAP_CONTENT)).show {
         listItems(R.array.states) { _, index, text ->
           toast("Selected item $text at index $index")
@@ -761,7 +705,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    bottomsheet_grid.onClickDebounced {
+    R.id.bottomsheet_grid.onClickDebounced {
       val items = listOf(
           BasicGridItem(R.drawable.ic_icon_android, "One"),
           BasicGridItem(R.drawable.ic_icon_android, "Two"),
@@ -784,11 +728,11 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    bottomsheet_customView.onClickDebounced {
+    R.id.bottomsheet_customView.onClickDebounced {
       showCustomViewDialog(BottomSheet(WRAP_CONTENT))
     }
 
-    bottomsheet_colorPicker.onClickDebounced {
+    R.id.bottomsheet_colorPicker.onClickDebounced {
       MaterialDialog(this, BottomSheet(WRAP_CONTENT)).show {
         title(R.string.custom_colors_argb)
         colorChooser(
@@ -806,7 +750,7 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
-    bottomsheet_dateTimePicker.onClickDebounced {
+    R.id.bottomsheet_dateTimePicker.onClickDebounced {
       MaterialDialog(this, BottomSheet(WRAP_CONTENT)).show {
         title(text = "Select Date and Time")
         dateTimePicker(requireFutureDateTime = true) { _, dateTime ->
@@ -922,7 +866,8 @@ class MainActivity : AppCompatActivity() {
 
   private fun showFolderChooserFilter() = runWithPermissions(READ_EXTERNAL_STORAGE) {
     MaterialDialog(this).show {
-      folderChooser(context = this@MainActivity, filter = { it.name.startsWith("a", true) }) { _, folder ->
+      folderChooser(
+          context = this@MainActivity, filter = { it.name.startsWith("a", true) }) { _, folder ->
         toast("Selected folder: ${folder.absolutePath}")
       }
       debugMode(debugMode)
@@ -994,4 +939,8 @@ class MainActivity : AppCompatActivity() {
     private const val DARK = "dark"
     private const val CUSTOM = "custom"
   }
+
+  private fun Int.onClickDebounced(click: () -> Unit) {
+    findViewById<Button>(this).onClickDebounced { click() }
+  }
 }