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')