diff --git a/anko/library/library.gradle b/anko/library/library.gradle
index e707da4f..79eb878a 100644
--- a/anko/library/library.gradle
+++ b/anko/library/library.gradle
@@ -37,7 +37,7 @@ publishing {
version ANKO_VERSION
artifact sourcesJar
- artifact bundleRelease
+ artifact bundleReleaseAar
pom.withXml {
asNode().children().last() + {
diff --git a/anko/library/static/androidxAppcompat/build.gradle b/anko/library/static/androidxAppcompat/build.gradle
new file mode 100644
index 00000000..65d6a080
--- /dev/null
+++ b/anko/library/static/androidxAppcompat/build.gradle
@@ -0,0 +1,6 @@
+apply from: '../../library.gradle'
+
+dependencies {
+ api "androidx.appcompat:appcompat:$androidx_appcompat_version"
+ api project(':static:commons-base')
+}
diff --git a/anko/library/static/androidxAppcompat/src/main/AndroidManifest.xml b/anko/library/static/androidxAppcompat/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..afd90f90
--- /dev/null
+++ b/anko/library/static/androidxAppcompat/src/main/AndroidManifest.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/anko/library/static/androidxAppcompat/src/main/java/SupportAlertBuilder.kt b/anko/library/static/androidxAppcompat/src/main/java/SupportAlertBuilder.kt
new file mode 100644
index 00000000..1c9bfa0e
--- /dev/null
+++ b/anko/library/static/androidxAppcompat/src/main/java/SupportAlertBuilder.kt
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2016 JetBrains s.r.o.
+ *
+ * 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 org.jetbrains.anko.appcompat.v7
+
+import android.content.Context
+import android.content.DialogInterface
+import android.graphics.drawable.Drawable
+import android.view.KeyEvent
+import android.view.View
+import androidx.appcompat.app.AlertDialog
+import org.jetbrains.anko.AlertBuilder
+import org.jetbrains.anko.AlertBuilderFactory
+import org.jetbrains.anko.internals.AnkoInternals
+import org.jetbrains.anko.internals.AnkoInternals.NO_GETTER
+import kotlin.DeprecationLevel.ERROR
+
+val Appcompat: AlertBuilderFactory = ::AppcompatAlertBuilder
+
+internal class AppcompatAlertBuilder(override val ctx: Context) : AlertBuilder {
+ private val builder = AlertDialog.Builder(ctx)
+
+ override var title: CharSequence
+ @Deprecated(NO_GETTER, level = ERROR) get() = AnkoInternals.noGetter()
+ set(value) { builder.setTitle(value) }
+
+ override var titleResource: Int
+ @Deprecated(NO_GETTER, level = ERROR) get() = AnkoInternals.noGetter()
+ set(value) { builder.setTitle(value) }
+
+ override var message: CharSequence
+ @Deprecated(NO_GETTER, level = ERROR) get() = AnkoInternals.noGetter()
+ set(value) { builder.setMessage(value) }
+
+ override var messageResource: Int
+ @Deprecated(NO_GETTER, level = ERROR) get() = AnkoInternals.noGetter()
+ set(value) { builder.setMessage(value) }
+
+ override var icon: Drawable
+ @Deprecated(NO_GETTER, level = ERROR) get() = AnkoInternals.noGetter()
+ set(value) { builder.setIcon(value) }
+
+ override var iconResource: Int
+ @Deprecated(NO_GETTER, level = ERROR) get() = AnkoInternals.noGetter()
+ set(value) { builder.setIcon(value) }
+
+ override var customTitle: View
+ @Deprecated(NO_GETTER, level = ERROR) get() = AnkoInternals.noGetter()
+ set(value) { builder.setCustomTitle(value) }
+
+ override var customView: View
+ @Deprecated(NO_GETTER, level = ERROR) get() = AnkoInternals.noGetter()
+ set(value) { builder.setView(value) }
+
+ override var isCancelable: Boolean
+ @Deprecated(NO_GETTER, level = ERROR) get() = AnkoInternals.noGetter()
+ set(value) { builder.setCancelable(value) }
+
+ override fun onCancelled(handler: (DialogInterface) -> Unit) {
+ builder.setOnCancelListener(handler)
+ }
+
+ override fun onKeyPressed(handler: (dialog: DialogInterface, keyCode: Int, e: KeyEvent) -> Boolean) {
+ builder.setOnKeyListener(handler)
+ }
+
+ override fun positiveButton(buttonText: String, onClicked: (dialog: DialogInterface) -> Unit) {
+ builder.setPositiveButton(buttonText) { dialog, _ -> onClicked(dialog) }
+ }
+
+ override fun positiveButton(buttonTextResource: Int, onClicked: (dialog: DialogInterface) -> Unit) {
+ builder.setPositiveButton(buttonTextResource) { dialog, _ -> onClicked(dialog) }
+ }
+
+ override fun negativeButton(buttonText: String, onClicked: (dialog: DialogInterface) -> Unit) {
+ builder.setNegativeButton(buttonText) { dialog, _ -> onClicked(dialog) }
+ }
+
+ override fun negativeButton(buttonTextResource: Int, onClicked: (dialog: DialogInterface) -> Unit) {
+ builder.setNegativeButton(buttonTextResource) { dialog, _ -> onClicked(dialog) }
+ }
+
+ override fun neutralPressed(buttonText: String, onClicked: (dialog: DialogInterface) -> Unit) {
+ builder.setNeutralButton(buttonText) { dialog, _ -> onClicked(dialog) }
+ }
+
+ override fun neutralPressed(buttonTextResource: Int, onClicked: (dialog: DialogInterface) -> Unit) {
+ builder.setNeutralButton(buttonTextResource) { dialog, _ -> onClicked(dialog) }
+ }
+
+ override fun items(items: List, onItemSelected: (dialog: DialogInterface, index: Int) -> Unit) {
+ builder.setItems(Array(items.size) { i -> items[i].toString() }) { dialog, which ->
+ onItemSelected(dialog, which)
+ }
+ }
+
+ override fun items(items: List, onItemSelected: (dialog: DialogInterface, item: T, index: Int) -> Unit) {
+ builder.setItems(Array(items.size) { i -> items[i].toString() }) { dialog, which ->
+ onItemSelected(dialog, items[which], which)
+ }
+ }
+
+ override fun build(): AlertDialog = builder.create()
+
+ override fun show(): AlertDialog = builder.show()
+}
\ No newline at end of file
diff --git a/anko/library/static/androidxConstraintLayout/build.gradle b/anko/library/static/androidxConstraintLayout/build.gradle
new file mode 100644
index 00000000..25bfa87f
--- /dev/null
+++ b/anko/library/static/androidxConstraintLayout/build.gradle
@@ -0,0 +1,7 @@
+apply from: '../../library.gradle'
+
+dependencies {
+ api "androidx.annotation:annotation:$androidx_annotation_version"
+ api "androidx.constraintlayout:constraintlayout:$androidx_constraintlayout_version"
+ api project(':static:commons-base')
+}
diff --git a/anko/library/static/androidxConstraintLayout/src/main/AndroidManifest.xml b/anko/library/static/androidxConstraintLayout/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..f1f7527f
--- /dev/null
+++ b/anko/library/static/androidxConstraintLayout/src/main/AndroidManifest.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/anko/library/static/androidxConstraintLayout/src/main/java/ConstraintLayout.kt b/anko/library/static/androidxConstraintLayout/src/main/java/ConstraintLayout.kt
new file mode 100644
index 00000000..c92404aa
--- /dev/null
+++ b/anko/library/static/androidxConstraintLayout/src/main/java/ConstraintLayout.kt
@@ -0,0 +1,314 @@
+/*
+ * Copyright 2017 JetBrains s.r.o.
+ *
+ * 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.
+ */
+@file:Suppress("unused")
+
+package org.jetbrains.anko.constraint.layout
+
+import android.view.View
+import androidx.annotation.IdRes
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.constraintlayout.widget.ConstraintSet
+import org.jetbrains.anko.constraint.layout.ConstraintSetBuilder.Connection.BasicConnection
+import org.jetbrains.anko.constraint.layout.ConstraintSetBuilder.Side
+import org.jetbrains.anko.internals.AnkoInternals
+import org.jetbrains.anko.internals.AnkoInternals.noGetter
+
+val ConstraintLayout.matchConstraint
+ get() = ConstraintLayout.LayoutParams.MATCH_CONSTRAINT
+
+fun ConstraintLayout.applyConstraintSet(init: ConstraintSetBuilder.() -> Unit): ConstraintSet =
+ constraintSet(init).also { it.applyTo(this) }
+
+fun ConstraintLayout.constraintSet(init: ConstraintSetBuilder.() -> Unit): ConstraintSet =
+ ConstraintSetBuilder().also { it.clone(this) }.apply(init)
+
+class ViewConstraintBuilder(
+ private @IdRes val viewId: Int,
+ private val constraintSetBuilder: ConstraintSetBuilder) {
+
+ infix fun Pair.of(@IdRes targetViewId: Int): BasicConnection =
+ constraintSetBuilder.run { (first of viewId) to (second of targetViewId) }
+
+ infix fun Pair.of(targetView: View): BasicConnection = this of targetView.id
+
+ fun clear() {
+ constraintSetBuilder.clear(viewId)
+ }
+
+ fun clear(sideId: Int) {
+ constraintSetBuilder.clear(viewId, sideId)
+ }
+
+ fun setMargin(sideId: Int, value: Int) {
+ constraintSetBuilder.setMargin(viewId, sideId, value)
+ }
+
+ fun setGoneMargin(sideId: Int, value: Int) {
+ constraintSetBuilder.setGoneMargin(viewId, sideId, value)
+ }
+
+ var horizontalBias: Float
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.setHorizontalBias(viewId, value)
+ }
+
+ var verticalBias: Float
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.setVerticalBias(viewId, value)
+ }
+
+ var dimensionRatio: String
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.setDimensionRatio(viewId, value)
+ }
+
+ var visibility: Int
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.setVisibility(viewId, value)
+ }
+
+ var alpha: Float
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.setAlpha(viewId, value)
+ }
+
+ var applyElevation: Boolean
+ get() = constraintSetBuilder.getApplyElevation(viewId)
+ set(value) {
+ constraintSetBuilder.setApplyElevation(viewId, value)
+ }
+
+ var elevation: Float
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.setElevation(viewId, value)
+ }
+
+ var rotationX: Float
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.setRotationX(viewId, value)
+ }
+
+ var rotationY: Float
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.setRotationY(viewId, value)
+ }
+
+ var scaleX: Float
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.setScaleX(viewId, value)
+ }
+
+ var scaleY: Float
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.setScaleY(viewId, value)
+ }
+
+ var transformPivotX: Float
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.setTransformPivotX(viewId, value)
+ }
+
+ var transformPivotY: Float
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.setTransformPivotY(viewId, value)
+ }
+
+ var translationX: Float
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.setTranslationX(viewId, value)
+ }
+
+ var translationY: Float
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.setTranslationY(viewId, value)
+ }
+
+ var translationZ: Float
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.setTranslationZ(viewId, value)
+ }
+
+ var height: Int
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.constrainHeight(viewId, value)
+ }
+
+ var width: Int
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.constrainWidth(viewId, value)
+ }
+
+ var maxHeight: Int
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.constrainMaxHeight(viewId, value)
+ }
+
+ var maxWidth: Int
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.constrainMaxWidth(viewId, value)
+ }
+
+ var minHeight: Int
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.constrainMinHeight(viewId, value)
+ }
+
+ var minWidth: Int
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.constrainMinWidth(viewId, value)
+ }
+
+ var defaultHeight: Int
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.constrainDefaultHeight(viewId, value)
+ }
+
+ var defaultWidth: Int
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.constrainDefaultWidth(viewId, value)
+ }
+
+ var horizontalWeight: Float
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.setHorizontalWeight(viewId, value)
+ }
+
+ var verticalWeight: Float
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.setVerticalWeight(viewId, value)
+ }
+
+ var horizontalChainStyle: Int
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.setHorizontalChainStyle(viewId, value)
+ }
+
+ var verticalChainStyle: Int
+ @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) get() = noGetter()
+ set(value) {
+ constraintSetBuilder.setVerticalChainStyle(viewId, value)
+ }
+}
+
+class ConstraintSetBuilder : ConstraintSet() {
+ operator fun Int.invoke(init: ViewConstraintBuilder.() -> Unit) {
+ ViewConstraintBuilder(this, this@ConstraintSetBuilder).apply(init)
+ }
+
+ operator fun View.invoke(init: ViewConstraintBuilder.() -> Unit) = id.invoke(init)
+
+ infix fun Side.of(@IdRes viewId: Int) = when (this) {
+ Side.LEFT -> ViewSide.Left(viewId)
+ Side.RIGHT -> ViewSide.Right(viewId)
+ Side.TOP -> ViewSide.Top(viewId)
+ Side.BOTTOM -> ViewSide.Bottom(viewId)
+ Side.BASELINE -> ViewSide.Baseline(viewId)
+ Side.START -> ViewSide.Start(viewId)
+ Side.END -> ViewSide.End(viewId)
+ }
+
+ infix fun Side.of(view: View) = this of view.id
+
+ infix fun Pair.of(@IdRes viewId: Int) = first to (second of viewId)
+
+ infix fun Pair.of(view: View) = first to (second of view.id)
+
+ infix fun ViewSide.to(targetSide: ViewSide) = BasicConnection(this, targetSide)
+
+ infix fun BasicConnection.margin(margin: Int) = Connection.MarginConnection(from, to, margin)
+
+ fun connect(vararg connections: Connection) {
+ for (connection in connections) {
+ when (connection) {
+ is Connection.MarginConnection -> connect(
+ connection.from.viewId,
+ connection.from.sideId,
+ connection.to.viewId,
+ connection.to.sideId,
+ connection.margin
+ )
+ is BasicConnection -> connect(
+ connection.from.viewId,
+ connection.from.sideId,
+ connection.to.viewId,
+ connection.to.sideId
+ )
+ }
+ }
+ }
+
+ enum class Side {
+ LEFT,
+ RIGHT,
+ TOP,
+ BOTTOM,
+ BASELINE,
+ START,
+ END,
+ }
+
+ sealed class ViewSide(@IdRes val viewId: Int) {
+ class Left(@IdRes viewId: Int) : ViewSide(viewId)
+ class Right(@IdRes viewId: Int) : ViewSide(viewId)
+ class Top(@IdRes viewId: Int) : ViewSide(viewId)
+ class Bottom(@IdRes viewId: Int) : ViewSide(viewId)
+ class Baseline(@IdRes viewId: Int) : ViewSide(viewId)
+ class Start(@IdRes viewId: Int) : ViewSide(viewId)
+ class End(@IdRes viewId: Int) : ViewSide(viewId)
+
+ val sideId: Int
+ get() = when(this) {
+ is ViewSide.Left -> ConstraintSet.LEFT
+ is ViewSide.Right -> ConstraintSet.RIGHT
+ is ViewSide.Top -> ConstraintSet.TOP
+ is ViewSide.Bottom -> ConstraintSet.BOTTOM
+ is ViewSide.Baseline -> ConstraintSet.BASELINE
+ is ViewSide.Start -> ConstraintSet.START
+ is ViewSide.End -> ConstraintSet.END
+ }
+ }
+
+ sealed class Connection(val from: ViewSide, val to: ViewSide) {
+ class BasicConnection(from: ViewSide, to: ViewSide) : Connection(from, to)
+ class MarginConnection(from: ViewSide, to: ViewSide, val margin: Int) : Connection(from, to)
+ }
+}
diff --git a/anko/library/static/androidxLegacySupportV4/build.gradle b/anko/library/static/androidxLegacySupportV4/build.gradle
new file mode 100644
index 00000000..9eaefa0c
--- /dev/null
+++ b/anko/library/static/androidxLegacySupportV4/build.gradle
@@ -0,0 +1,6 @@
+apply from: '../../library.gradle'
+
+dependencies {
+ api "androidx.legacy:legacy-support-v4:$androidx_legacy_version"
+ api project(':static:commons-base')
+}
diff --git a/anko/library/static/androidxLegacySupportV4/src/main/AndroidManifest.xml b/anko/library/static/androidxLegacySupportV4/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..5edb3961
--- /dev/null
+++ b/anko/library/static/androidxLegacySupportV4/src/main/AndroidManifest.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/anko/library/static/androidxLegacySupportV4/src/main/java/Support.kt b/anko/library/static/androidxLegacySupportV4/src/main/java/Support.kt
new file mode 100644
index 00000000..730c5126
--- /dev/null
+++ b/anko/library/static/androidxLegacySupportV4/src/main/java/Support.kt
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2016 JetBrains s.r.o.
+ *
+ * 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.
+ */
+
+@file:Suppress("unused")
+package org.jetbrains.anko.support.v4
+
+import android.view.View
+import androidx.fragment.app.Fragment
+import org.jetbrains.anko.*
+import org.jetbrains.anko.internals.AnkoInternals
+import org.jetbrains.anko.internals.AnkoInternals.createAnkoContext
+
+inline fun Fragment.find(id: Int): T = view?.findViewById(id) as T
+inline fun Fragment.findOptional(id: Int): T? = view?.findViewById(id) as? T
+
+fun Fragment.UI(init: AnkoContext.() -> Unit) = createAnkoContext(requireActivity(), init)
+
+inline fun Fragment.configuration(
+ screenSize: ScreenSize? = null,
+ density: ClosedRange? = null,
+ language: String? = null,
+ orientation: Orientation? = null,
+ long: Boolean? = null,
+ fromSdk: Int? = null,
+ sdk: Int? = null,
+ uiMode: UiMode? = null,
+ nightMode: Boolean? = null,
+ rightToLeft: Boolean? = null,
+ smallestWidth: Int? = null,
+ init: () -> T
+): T? {
+ val act = activity
+ return if (act != null) {
+ if (AnkoInternals.testConfiguration(act, screenSize, density, language, orientation, long,
+ fromSdk, sdk, uiMode, nightMode, rightToLeft, smallestWidth)) init() else null
+ }
+ else null
+}
+
+fun T.withArguments(vararg params: Pair): T {
+ arguments = bundleOf(*params)
+ return this
+}
+
diff --git a/anko/library/static/androidxLegacySupportV4/src/main/java/SupportAsync.kt b/anko/library/static/androidxLegacySupportV4/src/main/java/SupportAsync.kt
new file mode 100644
index 00000000..0c811335
--- /dev/null
+++ b/anko/library/static/androidxLegacySupportV4/src/main/java/SupportAsync.kt
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2016 JetBrains s.r.o.
+ *
+ * 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.
+ */
+
+@file:Suppress("unused")
+package org.jetbrains.anko.support.v4
+
+import androidx.fragment.app.Fragment
+import org.jetbrains.anko.AnkoAsyncContext
+
+fun AnkoAsyncContext.supportFragmentUiThread(f: (T) -> Unit): Boolean {
+ val fragment = weakRef.get() ?: return true
+ if (fragment.isDetached) return true
+ val activity = fragment.activity ?: return true
+ activity.runOnUiThread { f(fragment) }
+ return true
+}
+
+@Deprecated("Use onUiThread() instead", ReplaceWith("onUiThread(f)"))
+inline fun Fragment.uiThread(crossinline f: () -> Unit) {
+ requireActivity().runOnUiThread { f() }
+}
+
+@Deprecated(message = "Use runOnUiThread() instead", replaceWith = ReplaceWith("runOnUiThread(f)"))
+inline fun Fragment.onUiThread(crossinline f: () -> Unit) {
+ requireActivity().runOnUiThread { f() }
+}
+
+inline fun Fragment.runOnUiThread(crossinline f: () -> Unit) {
+ requireActivity().runOnUiThread { f() }
+}
diff --git a/anko/library/static/androidxLegacySupportV4/src/main/java/SupportContextUtils.kt b/anko/library/static/androidxLegacySupportV4/src/main/java/SupportContextUtils.kt
new file mode 100644
index 00000000..142a02fa
--- /dev/null
+++ b/anko/library/static/androidxLegacySupportV4/src/main/java/SupportContextUtils.kt
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2016 JetBrains s.r.o.
+ *
+ * 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.
+ */
+
+@file:Suppress("unused")
+package org.jetbrains.anko.support.v4
+
+import android.content.Context
+import android.content.SharedPreferences
+import android.preference.PreferenceManager
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentActivity
+
+inline val Fragment.defaultSharedPreferences: SharedPreferences
+ get() = PreferenceManager.getDefaultSharedPreferences(activity)
+
+@Deprecated(message = "Use either activity or requireActivity", replaceWith = ReplaceWith("activity"))
+inline val Fragment.act: FragmentActivity
+ get() = requireActivity()
+
+@Deprecated(message = "Use either context or requireContext", replaceWith = ReplaceWith("context"))
+inline val Fragment.ctx: Context
+ get() = requireActivity()
diff --git a/anko/library/static/androidxLegacySupportV4/src/main/java/SupportDialogs.kt b/anko/library/static/androidxLegacySupportV4/src/main/java/SupportDialogs.kt
new file mode 100644
index 00000000..e9183424
--- /dev/null
+++ b/anko/library/static/androidxLegacySupportV4/src/main/java/SupportDialogs.kt
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2016 JetBrains s.r.o.
+ *
+ * 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.
+ */
+
+@file:Suppress("NOTHING_TO_INLINE", "unused")
+package org.jetbrains.anko.support.v4
+
+import android.app.ProgressDialog
+import android.content.DialogInterface
+import androidx.fragment.app.Fragment
+import org.jetbrains.anko.*
+
+inline fun Fragment.toast(textResource: Int) = requireActivity().toast(textResource)
+
+inline fun Fragment.toast(text: CharSequence) = requireActivity().toast(text)
+
+inline fun Fragment.longToast(textResource: Int) = requireActivity().longToast(textResource)
+
+inline fun Fragment.longToast(text: CharSequence) = requireActivity().longToast(text)
+
+inline fun Fragment.selector(
+ title: CharSequence? = null,
+ items: List,
+ noinline onClick: (DialogInterface, Int) -> Unit
+): Unit = requireActivity().selector(title, items, onClick)
+
+inline fun Fragment.alert(
+ message: String,
+ title: String? = null,
+ noinline init: (AlertBuilder.() -> Unit)? = null
+) = requireActivity().alert(message, title, init)
+
+inline fun Fragment.alert(
+ message: Int,
+ title: Int? = null,
+ noinline init: (AlertBuilder.() -> Unit)? = null
+) = requireActivity().alert(message, title, init)
+
+inline fun Fragment.alert(noinline init: AlertBuilder.() -> Unit) = requireActivity().alert(init)
+
+@Deprecated(message = "Android progress dialogs are deprecated")
+inline fun Fragment.progressDialog(
+ message: String? = null,
+ title: String? = null,
+ noinline init: (ProgressDialog.() -> Unit)? = null
+) = requireActivity().progressDialog(message, title, init)
+
+@Deprecated(message = "Android progress dialogs are deprecated")
+inline fun Fragment.indeterminateProgressDialog(message: String? = null, title: String? = null, noinline init: (ProgressDialog.() -> Unit)? = null): ProgressDialog {
+ return requireActivity().indeterminateProgressDialog(message, title, init)
+}
+
+@Deprecated(message = "Android progress dialogs are deprecated")
+inline fun Fragment.progressDialog(message: Int? = null, title: Int? = null, noinline init: (ProgressDialog.() -> Unit)? = null): ProgressDialog {
+ return requireActivity().progressDialog(message?.let { requireActivity().getString(it) }, title?.let { requireActivity().getString(it) }, init)
+}
+
+@Deprecated(message = "Android progress dialogs are deprecated")
+inline fun Fragment.indeterminateProgressDialog(message: Int? = null, title: Int? = null, noinline init: (ProgressDialog.() -> Unit)? = null): ProgressDialog {
+ return requireActivity().indeterminateProgressDialog(message?.let { requireActivity().getString(it) }, title?.let { requireActivity().getString(it) }, init)
+}
diff --git a/anko/library/static/androidxLegacySupportV4/src/main/java/SupportDimensions.kt b/anko/library/static/androidxLegacySupportV4/src/main/java/SupportDimensions.kt
new file mode 100644
index 00000000..b2f0cae6
--- /dev/null
+++ b/anko/library/static/androidxLegacySupportV4/src/main/java/SupportDimensions.kt
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2016 JetBrains s.r.o.
+ *
+ * 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.
+ */
+
+@file:Suppress("NOTHING_TO_INLINE", "unused")
+package org.jetbrains.anko.support.v4
+
+import androidx.fragment.app.Fragment
+import org.jetbrains.anko.*
+
+inline fun Fragment.dip(value: Int): Int = requireActivity().dip(value)
+
+inline fun Fragment.dip(value: Float): Int = requireActivity().dip(value)
+
+inline fun Fragment.sp(value: Int): Int = requireActivity().sp(value)
+
+inline fun Fragment.sp(value: Float): Int = requireActivity().sp(value)
+
+inline fun Fragment.px2dip(px: Int): Float = requireActivity().px2dip(px)
+
+inline fun Fragment.px2sp(px: Int): Float = requireActivity().px2sp(px)
+
+inline fun Fragment.dimen(resource: Int): Int = requireActivity().dimen(resource)
diff --git a/anko/library/static/androidxLegacySupportV4/src/main/java/SupportIntents.kt b/anko/library/static/androidxLegacySupportV4/src/main/java/SupportIntents.kt
new file mode 100644
index 00000000..b43453db
--- /dev/null
+++ b/anko/library/static/androidxLegacySupportV4/src/main/java/SupportIntents.kt
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2016 JetBrains s.r.o.
+ *
+ * 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.
+ */
+
+@file:Suppress("unused")
+package org.jetbrains.anko.support.v4
+
+import android.app.Activity
+import android.app.Service
+import android.content.Intent
+import androidx.fragment.app.Fragment
+import org.jetbrains.anko.*
+import org.jetbrains.anko.internals.AnkoInternals
+
+fun Fragment.browse(url: String, newTask: Boolean = false): Boolean = requireActivity().browse(url, newTask)
+
+fun Fragment.share(text: String, subject: String = ""): Boolean = requireActivity().share(text, subject)
+
+fun Fragment.email(email: String, subject: String = "", text: String = ""): Boolean =
+ requireActivity().email(email, subject, text)
+
+fun Fragment.makeCall(number: String): Boolean = requireActivity().makeCall(number)
+
+fun Fragment.sendSMS(number: String, text: String = ""): Boolean = requireActivity().sendSMS(number, text)
+
+inline fun Fragment.startActivity(vararg params: Pair) {
+ AnkoInternals.internalStartActivity(requireActivity(), T::class.java, params)
+}
+
+inline fun Fragment.startActivityForResult(requestCode: Int, vararg params: Pair) {
+ startActivityForResult(AnkoInternals.createIntent(requireActivity(), T::class.java, params), requestCode)
+}
+
+inline fun Fragment.startService(vararg params: Pair) {
+ AnkoInternals.internalStartService(requireActivity(), T::class.java, params)
+}
+
+inline fun Fragment.stopService(vararg params: Pair) {
+ AnkoInternals.internalStopService(requireActivity(), T::class.java, params)
+}
+
+inline fun Fragment.intentFor(vararg params: Pair): Intent =
+ AnkoInternals.createIntent(requireActivity(), T::class.java, params)
diff --git a/anko/library/static/commons/build.gradle b/anko/library/static/commons/build.gradle
index c092128f..09d4234c 100644
--- a/anko/library/static/commons/build.gradle
+++ b/anko/library/static/commons/build.gradle
@@ -1,5 +1,5 @@
apply from: '../../library.gradle'
dependencies {
- api "com.android.support:support-annotations:$SUPPORT_ARTIFACT_VERSION"
+ api "androidx.annotation:annotation:$androidx_annotation_version"
}
diff --git a/anko/library/static/commons/src/main/java/ContextUtils.kt b/anko/library/static/commons/src/main/java/ContextUtils.kt
index 4bc91700..7952a438 100644
--- a/anko/library/static/commons/src/main/java/ContextUtils.kt
+++ b/anko/library/static/commons/src/main/java/ContextUtils.kt
@@ -28,9 +28,9 @@ import android.content.res.Resources
import android.os.Bundle
import android.os.Parcelable
import android.preference.PreferenceManager
-import android.support.annotation.IdRes
import android.view.View
import android.view.ViewGroup
+import androidx.annotation.IdRes
import java.io.Serializable
inline val AnkoContext<*>.resources: Resources
diff --git a/anko/library/static/commons/src/main/java/Dimensions.kt b/anko/library/static/commons/src/main/java/Dimensions.kt
index a32200ea..3aa5a89f 100644
--- a/anko/library/static/commons/src/main/java/Dimensions.kt
+++ b/anko/library/static/commons/src/main/java/Dimensions.kt
@@ -19,9 +19,9 @@ package org.jetbrains.anko
import android.app.Fragment
import android.content.Context
-import android.support.annotation.DimenRes
import android.util.DisplayMetrics
import android.view.View
+import androidx.annotation.DimenRes
const val LDPI: Int = DisplayMetrics.DENSITY_LOW
const val MDPI: Int = DisplayMetrics.DENSITY_MEDIUM
diff --git a/anko/library/static/commons/src/main/java/RelativeLayoutLayoutParamsHelpers.kt b/anko/library/static/commons/src/main/java/RelativeLayoutLayoutParamsHelpers.kt
index 484b93df..4182ef9d 100644
--- a/anko/library/static/commons/src/main/java/RelativeLayoutLayoutParamsHelpers.kt
+++ b/anko/library/static/commons/src/main/java/RelativeLayoutLayoutParamsHelpers.kt
@@ -18,10 +18,10 @@
package org.jetbrains.anko
import android.os.Build
-import android.support.annotation.IdRes
-import android.support.annotation.RequiresApi
import android.view.View
import android.widget.RelativeLayout.*
+import androidx.annotation.IdRes
+import androidx.annotation.RequiresApi
/**
* Place the current View above [view].
diff --git a/anko/library/static/commons/src/main/java/Theme.kt b/anko/library/static/commons/src/main/java/Theme.kt
index 68e55f8b..e7e290f6 100644
--- a/anko/library/static/commons/src/main/java/Theme.kt
+++ b/anko/library/static/commons/src/main/java/Theme.kt
@@ -4,11 +4,11 @@ package org.jetbrains.anko
import android.app.Fragment
import android.content.Context
import android.content.res.Resources
-import android.support.annotation.AttrRes
-import android.support.annotation.ColorInt
-import android.support.annotation.Dimension
import android.util.TypedValue
import android.view.View
+import androidx.annotation.AttrRes
+import androidx.annotation.ColorInt
+import androidx.annotation.Dimension
fun Resources.Theme.attr(@AttrRes attribute: Int): TypedValue {
val typedValue = TypedValue()
diff --git a/anko/library/static/commons/src/main/java/dialogs/AlertBuilder.kt b/anko/library/static/commons/src/main/java/dialogs/AlertBuilder.kt
index c7f38019..6532f7b5 100644
--- a/anko/library/static/commons/src/main/java/dialogs/AlertBuilder.kt
+++ b/anko/library/static/commons/src/main/java/dialogs/AlertBuilder.kt
@@ -21,11 +21,11 @@ import android.annotation.SuppressLint
import android.content.Context
import android.content.DialogInterface
import android.graphics.drawable.Drawable
-import android.support.annotation.DrawableRes
-import android.support.annotation.StringRes
import android.view.KeyEvent
import android.view.View
import android.view.ViewManager
+import androidx.annotation.DrawableRes
+import androidx.annotation.StringRes
import org.jetbrains.anko.internals.AnkoInternals.NO_GETTER
import kotlin.DeprecationLevel.ERROR
diff --git a/anko/library/static/supportV4/src/main/java/Support.kt b/anko/library/static/supportV4/src/main/java/Support.kt
index 17247f48..1c4a5bb1 100644
--- a/anko/library/static/supportV4/src/main/java/Support.kt
+++ b/anko/library/static/supportV4/src/main/java/Support.kt
@@ -19,11 +19,7 @@ package org.jetbrains.anko.support.v4
import android.support.v4.app.Fragment
import android.view.View
-import org.jetbrains.anko.AnkoContext
-import org.jetbrains.anko.Orientation
-import org.jetbrains.anko.ScreenSize
-import org.jetbrains.anko.UiMode
-import org.jetbrains.anko.bundleOf
+import org.jetbrains.anko.*
import org.jetbrains.anko.internals.AnkoInternals
import org.jetbrains.anko.internals.AnkoInternals.createAnkoContext
diff --git a/anko/library/static/supportV4/src/main/java/SupportDialogs.kt b/anko/library/static/supportV4/src/main/java/SupportDialogs.kt
index 54fa08da..297c7037 100644
--- a/anko/library/static/supportV4/src/main/java/SupportDialogs.kt
+++ b/anko/library/static/supportV4/src/main/java/SupportDialogs.kt
@@ -20,13 +20,7 @@ package org.jetbrains.anko.support.v4
import android.app.ProgressDialog
import android.content.DialogInterface
import android.support.v4.app.Fragment
-import org.jetbrains.anko.AlertBuilder
-import org.jetbrains.anko.alert
-import org.jetbrains.anko.indeterminateProgressDialog
-import org.jetbrains.anko.longToast
-import org.jetbrains.anko.progressDialog
-import org.jetbrains.anko.selector
-import org.jetbrains.anko.toast
+import org.jetbrains.anko.*
inline fun Fragment.toast(textResource: Int) = requireActivity().toast(textResource)
diff --git a/anko/library/static/supportV4/src/main/java/SupportDimensions.kt b/anko/library/static/supportV4/src/main/java/SupportDimensions.kt
index 7ad9b82f..0095d58d 100644
--- a/anko/library/static/supportV4/src/main/java/SupportDimensions.kt
+++ b/anko/library/static/supportV4/src/main/java/SupportDimensions.kt
@@ -18,11 +18,7 @@
package org.jetbrains.anko.support.v4
import android.support.v4.app.Fragment
-import org.jetbrains.anko.dimen
-import org.jetbrains.anko.dip
-import org.jetbrains.anko.px2dip
-import org.jetbrains.anko.px2sp
-import org.jetbrains.anko.sp
+import org.jetbrains.anko.*
inline fun Fragment.dip(value: Int): Int = requireActivity().dip(value)
diff --git a/anko/library/static/supportV4/src/main/java/SupportIntents.kt b/anko/library/static/supportV4/src/main/java/SupportIntents.kt
index 8febeedd..cea4d201 100644
--- a/anko/library/static/supportV4/src/main/java/SupportIntents.kt
+++ b/anko/library/static/supportV4/src/main/java/SupportIntents.kt
@@ -21,12 +21,8 @@ import android.app.Activity
import android.app.Service
import android.content.Intent
import android.support.v4.app.Fragment
-import org.jetbrains.anko.browse
-import org.jetbrains.anko.email
+import org.jetbrains.anko.*
import org.jetbrains.anko.internals.AnkoInternals
-import org.jetbrains.anko.makeCall
-import org.jetbrains.anko.sendSMS
-import org.jetbrains.anko.share
fun Fragment.browse(url: String, newTask: Boolean = false): Boolean = requireActivity().browse(url, newTask)
diff --git a/anko/library/stubs/src/main/AndroidManifest.xml b/anko/library/stubs/src/main/AndroidManifest.xml
index 3ab74db8..085ef4f3 100644
--- a/anko/library/stubs/src/main/AndroidManifest.xml
+++ b/anko/library/stubs/src/main/AndroidManifest.xml
@@ -1,6 +1,5 @@
-
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 2dd50127..75ed5b76 100644
--- a/build.gradle
+++ b/build.gradle
@@ -2,10 +2,17 @@ import java.util.zip.ZipEntry
import java.util.zip.ZipOutputStream
buildscript {
- ext.kotlin_version = '1.3.0'
+ ext.kotlin_version = '1.3.21'
ext.kotlinx_dom_version = '0.0.10'
ext.kotlinx_coroutines_version = '1.0.0'
+ ext.androidx_legacy_version = '1.0.0'
+ ext.androidx_appcompat_version = "1.0.2"
+ ext.androidx_annotation_version = '1.0.2'
+ ext.androidx_constraintlayout_version = "1.1.3"
+
+ ext.material_version = "1.0.0"
+
ext.ANKO_VERSION = '0.10.8'
ext.ANKO_VERSION_CODE = 106
@@ -34,7 +41,7 @@ buildscript {
}
dependencies {
- classpath "com.android.tools.build:gradle:3.1.2"
+ classpath "com.android.tools.build:gradle:3.3.2"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.4'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'
@@ -127,7 +134,9 @@ def publishedArtifacts = [
':static:design-base',
':static:supportV4-base',
':static:appcompatV7-base',
- ':static:constraint-layout-base'
+ ':static:constraint-layout-base',
+ ':static:androidxLegacySupportV4-base',
+ ':static:androidxAppcompat-base'
]
task dist()
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index a4fc03df..4e974715 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.8-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/settings.gradle b/settings.gradle
index d34b5b9e..fd12f1ed 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -10,6 +10,9 @@ include ':static:design-base'
include ':static:supportV4-base'
include ':static:appcompatV7-base'
include ':static:constraint-layout-base'
+include ':static:androidxLegacySupportV4-base'
+include ':static:androidxAppcompat-base'
+include ':static:androidxConstraintLayout-base'
include ':generated'
include ':generated:anko'
@@ -75,6 +78,9 @@ project(':static:design-base').projectDir = new File(rootDir, 'anko/library/stat
project(':static:supportV4-base').projectDir = new File(rootDir, 'anko/library/static/supportV4')
project(':static:appcompatV7-base').projectDir = new File(rootDir, 'anko/library/static/appcompatV7')
project(':static:constraint-layout-base').projectDir = new File(rootDir, 'anko/library/static/constraint-layout')
+project(':static:androidxConstraintLayout-base').projectDir = new File(rootDir, 'anko/library/static/androidxConstraintLayout')
+project(':static:androidxLegacySupportV4-base').projectDir = new File(rootDir, 'anko/library/static/androidxLegacySupportV4')
+project(':static:androidxAppcompat-base').projectDir = new File(rootDir, 'anko/library/static/androidxAppcompat')
project(':generated').projectDir = new File(rootDir, 'anko/library/generated')
project(':generated:anko').projectDir = new File(rootDir, 'anko/library/generated/anko')