From 0ed13f1247fb31471a8cb064a16f55615968b88c Mon Sep 17 00:00:00 2001
From: Alexander Kolmachikhin <“alexanderkolmachikhin@gmail.com”>
Date: Tue, 6 Dec 2022 02:29:32 +0700
Subject: [PATCH 1/5] #54 add compose support
---
README.md | 15 +++
build.gradle.kts | 1 +
gradle/libs.versions.toml | 7 ++
permissions-compose/build.gradle.kts | 24 ++++
.../src/androidMain/AndroidManifest.xml | 2 +
.../moko/permissions/compose/BindEffect.kt | 22 ++++
sample/compose-android-app/build.gradle.kts | 25 ++++
.../src/main/AndroidManifest.xml | 31 +++++
.../main/java/com/icerockdev/MainActivity.kt | 118 ++++++++++++++++++
.../com/icerockdev/library/SampleViewModel.kt | 2 +-
settings.gradle.kts | 2 +
11 files changed, 248 insertions(+), 1 deletion(-)
create mode 100644 permissions-compose/build.gradle.kts
create mode 100755 permissions-compose/src/androidMain/AndroidManifest.xml
create mode 100644 permissions-compose/src/androidMain/kotlin/dev/icerock/moko/permissions/compose/BindEffect.kt
create mode 100644 sample/compose-android-app/build.gradle.kts
create mode 100755 sample/compose-android-app/src/main/AndroidManifest.xml
create mode 100644 sample/compose-android-app/src/main/java/com/icerockdev/MainActivity.kt
diff --git a/README.md b/README.md
index 1599b3d..a056e23 100755
--- a/README.md
+++ b/README.md
@@ -39,6 +39,7 @@ project **build.gradle**
```groovy
dependencies {
commonMainApi("dev.icerock.moko:permissions:0.13.0")
+ commonMainApi("dev.icerock.moko:permissions-compose:0.13.0") // permissions api + compose extensions
commonTestImplementation("dev.icerock.moko:permissions-test:0.13.0")
}
```
@@ -95,6 +96,20 @@ override fun onCreate(savedInstanceState: Bundle?) {
}
```
+Compose:
+```kotlin
+@Composable
+fun TestScreen() {
+ val viewModel = getViewModel {
+ // Pass the platform implementation of the permission controller to a common code.
+ ViewModel(PermissionsController())
+ }
+
+ // Binds the permissions controller to the LocalLifecycleOwner lifecycle.
+ BindEffect(viewModel.permissionsController)
+}
+```
+
iOS:
```swift
// Just pass the platform implementation of the permission controller to a common code.
diff --git a/build.gradle.kts b/build.gradle.kts
index b27ad2e..28e770b 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -16,6 +16,7 @@ buildscript {
classpath(libs.mokoGradlePlugin)
classpath(libs.mobileMultiplatformGradlePlugin)
classpath(libs.kotlinSerializationGradlePlugin)
+ classpath(libs.composeJetBrainsGradlePlugin)
}
}
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 0e8fc84..9fb37c7 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -1,16 +1,22 @@
[versions]
kotlinVersion = "1.6.10"
androidAppCompatVersion = "1.2.0"
+composeCompilerVersion = "1.1.1"
+composeMaterialVersion = "1.3.1"
+composeActivityVersion = "1.6.1"
materialDesignVersion = "1.0.0"
androidLifecycleVersion = "2.1.0"
androidCoreTestingVersion = "2.1.0"
coroutinesVersion = "1.6.0-native-mt"
mokoMvvmVersion = "0.12.0"
mokoPermissionsVersion = "0.13.0"
+composeJetBrainsVersion = "1.1.1"
[libraries]
appCompat = { module = "androidx.appcompat:appcompat", version.ref = "androidAppCompatVersion" }
material = { module = "com.google.android.material:material", version.ref = "materialDesignVersion" }
+composeMaterial = { module = "androidx.compose.material:material", version.ref = "composeMaterialVersion" }
+composeActivity = { module = "androidx.activity:activity-compose", version.ref = "composeActivityVersion" }
lifecycle = { module = "androidx.lifecycle:lifecycle-extensions", version.ref = "androidLifecycleVersion" }
coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutinesVersion" }
mokoMvvmCore = { module = "dev.icerock.moko:mvvm-core", version.ref = "mokoMvvmVersion" }
@@ -26,3 +32,4 @@ firebaseGradlePlugin = { module = "com.google.firebase:firebase-crashlytics-grad
mokoGradlePlugin = { module = "dev.icerock.moko:moko-gradle-plugin", version = "0.1.0" }
mobileMultiplatformGradlePlugin = { module = "dev.icerock:mobile-multiplatform", version = "0.14.1" }
kotlinSerializationGradlePlugin = { module = "org.jetbrains.kotlin:kotlin-serialization", version.ref = "kotlinVersion" }
+composeJetBrainsGradlePlugin = { module = "org.jetbrains.compose:compose-gradle-plugin", version.ref = "composeJetBrainsVersion" }
diff --git a/permissions-compose/build.gradle.kts b/permissions-compose/build.gradle.kts
new file mode 100644
index 0000000..5c371dd
--- /dev/null
+++ b/permissions-compose/build.gradle.kts
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2019 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+plugins {
+ id("dev.icerock.moko.gradle.multiplatform.mobile")
+ id("dev.icerock.moko.gradle.publication")
+ id("dev.icerock.moko.gradle.stub.javadoc")
+ id("dev.icerock.moko.gradle.detekt")
+ id("dev.icerock.mobile.multiplatform.android-manifest")
+ id("org.jetbrains.compose")
+}
+
+kotlin {
+ android()
+}
+
+dependencies {
+ androidMainApi(projects.permissions)
+ androidMainApi(compose.runtime)
+ androidMainApi(libs.appCompat)
+ androidMainApi(libs.composeActivity)
+}
+
diff --git a/permissions-compose/src/androidMain/AndroidManifest.xml b/permissions-compose/src/androidMain/AndroidManifest.xml
new file mode 100755
index 0000000..d0e0b3c
--- /dev/null
+++ b/permissions-compose/src/androidMain/AndroidManifest.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/permissions-compose/src/androidMain/kotlin/dev/icerock/moko/permissions/compose/BindEffect.kt b/permissions-compose/src/androidMain/kotlin/dev/icerock/moko/permissions/compose/BindEffect.kt
new file mode 100644
index 0000000..a82555f
--- /dev/null
+++ b/permissions-compose/src/androidMain/kotlin/dev/icerock/moko/permissions/compose/BindEffect.kt
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2019 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+package dev.icerock.moko.permissions.compose
+
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.platform.LocalLifecycleOwner
+import androidx.fragment.app.FragmentActivity
+import dev.icerock.moko.permissions.PermissionsController
+
+@Composable
+fun BindEffect(permissionsController: PermissionsController) {
+ val lifecycleOwner = LocalLifecycleOwner.current
+ val fragmentManager = (LocalContext.current as FragmentActivity).supportFragmentManager
+
+ LaunchedEffect(true) {
+ permissionsController.bind(lifecycleOwner.lifecycle, fragmentManager)
+ }
+}
\ No newline at end of file
diff --git a/sample/compose-android-app/build.gradle.kts b/sample/compose-android-app/build.gradle.kts
new file mode 100644
index 0000000..a0317f0
--- /dev/null
+++ b/sample/compose-android-app/build.gradle.kts
@@ -0,0 +1,25 @@
+plugins {
+ id("dev.icerock.moko.gradle.android.application")
+ id("dev.icerock.moko.gradle.detekt")
+ id("kotlin-kapt")
+}
+
+android {
+ defaultConfig {
+ applicationId = "dev.icerock.moko.samples.permissions"
+ minSdk = 21
+ versionCode = 1
+ versionName = "0.1.0"
+ }
+
+ buildFeatures.compose = true
+ composeOptions.kotlinCompilerExtensionVersion = libs.versions.composeCompilerVersion.get()
+}
+
+dependencies {
+ implementation(libs.appCompat)
+ implementation(libs.composeActivity)
+ implementation(libs.composeMaterial)
+ implementation(projects.sample.mppLibrary)
+ implementation(projects.permissionsCompose)
+}
diff --git a/sample/compose-android-app/src/main/AndroidManifest.xml b/sample/compose-android-app/src/main/AndroidManifest.xml
new file mode 100755
index 0000000..c9491fb
--- /dev/null
+++ b/sample/compose-android-app/src/main/AndroidManifest.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sample/compose-android-app/src/main/java/com/icerockdev/MainActivity.kt b/sample/compose-android-app/src/main/java/com/icerockdev/MainActivity.kt
new file mode 100644
index 0000000..167e496
--- /dev/null
+++ b/sample/compose-android-app/src/main/java/com/icerockdev/MainActivity.kt
@@ -0,0 +1,118 @@
+package com.icerockdev
+
+import android.os.Bundle
+import androidx.activity.compose.setContent
+import androidx.appcompat.app.AppCompatActivity
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material.Button
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Scaffold
+import androidx.compose.material.SnackbarDuration
+import androidx.compose.material.SnackbarResult
+import androidx.compose.material.Surface
+import androidx.compose.material.Text
+import androidx.compose.material.rememberScaffoldState
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalLifecycleOwner
+import com.icerockdev.library.SampleViewModel
+import dev.icerock.moko.mvvm.dispatcher.eventsDispatcherOnMain
+import dev.icerock.moko.mvvm.getViewModel
+import dev.icerock.moko.permissions.DeniedAlwaysException
+import dev.icerock.moko.permissions.DeniedException
+import dev.icerock.moko.permissions.Permission
+import dev.icerock.moko.permissions.PermissionsController
+import dev.icerock.moko.permissions.compose.BindEffect
+import kotlinx.coroutines.launch
+
+class MainActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContent {
+ MaterialTheme {
+ Surface(modifier = Modifier.background(Color.White)) {
+ TestScreen(
+ viewModel = getViewModel {
+ SampleViewModel(
+ eventsDispatcher = eventsDispatcherOnMain(),
+ permissionsController = PermissionsController(
+ applicationContext = applicationContext
+ ),
+ permissionType = Permission.CAMERA
+ )
+ }
+ )
+ }
+ }
+ }
+ }
+}
+
+@Composable
+fun TestScreen(viewModel: SampleViewModel) {
+ val scaffoldState = rememberScaffoldState()
+ val coroutineScope = rememberCoroutineScope()
+
+ val eventsListener = remember {
+ object : SampleViewModel.EventListener {
+ override fun onSuccess() {
+ coroutineScope.launch {
+ scaffoldState.snackbarHostState.showSnackbar(
+ message = "Permission successfully granted!"
+ )
+ }
+ }
+
+ override fun onDenied(exception: DeniedException) {
+ coroutineScope.launch {
+ scaffoldState.snackbarHostState.showSnackbar(
+ message = "Permission denied!"
+ )
+ }
+ }
+
+ override fun onDeniedAlways(exception: DeniedAlwaysException) {
+ coroutineScope.launch {
+ val result = scaffoldState.snackbarHostState.showSnackbar(
+ message = "Permission is always denied",
+ duration = SnackbarDuration.Long,
+ actionLabel = "Settings"
+ )
+
+ if (result == SnackbarResult.ActionPerformed) {
+ viewModel.permissionsController.openAppSettings()
+ }
+ }
+ }
+ }
+ }
+
+ val lifecycleOwner = LocalLifecycleOwner.current
+ LaunchedEffect(true) {
+ viewModel.eventsDispatcher.bind(lifecycleOwner, eventsListener)
+ }
+
+ BindEffect(viewModel.permissionsController)
+
+ Scaffold(scaffoldState = scaffoldState) {
+ Box(
+ modifier = Modifier
+ .fillMaxSize()
+ .padding(it),
+ contentAlignment = Alignment.Center
+ ) {
+ Button(
+ onClick = viewModel::onRequestPermissionButtonPressed,
+ content = { Text("Request permission") }
+ )
+ }
+ }
+}
\ No newline at end of file
diff --git a/sample/mpp-library/src/commonMain/kotlin/com/icerockdev/library/SampleViewModel.kt b/sample/mpp-library/src/commonMain/kotlin/com/icerockdev/library/SampleViewModel.kt
index 3634f45..e561af0 100755
--- a/sample/mpp-library/src/commonMain/kotlin/com/icerockdev/library/SampleViewModel.kt
+++ b/sample/mpp-library/src/commonMain/kotlin/com/icerockdev/library/SampleViewModel.kt
@@ -17,7 +17,7 @@ class SampleViewModel(
init {
viewModelScope.launch {
- val startState = permissionsController.getPermissionState(Permission.RECORD_AUDIO)
+ val startState = permissionsController.getPermissionState(permissionType)
println(startState)
}
}
diff --git a/settings.gradle.kts b/settings.gradle.kts
index d39c65e..36919fb 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -13,6 +13,8 @@ dependencyResolutionManagement {
}
include(":permissions")
+include(":permissions-compose")
include(":permissions-test")
include(":sample:android-app")
+include(":sample:compose-android-app")
include(":sample:mpp-library")
From 441451f31122e15174fccf69fe4855587b0a18ed Mon Sep 17 00:00:00 2001
From: timur-muminov1
Date: Tue, 6 Dec 2022 20:12:13 +0300
Subject: [PATCH 2/5] #68, #69 Bugs fixed
---
gradle/libs.versions.toml | 3 +++
permissions/build.gradle.kts | 2 +-
.../permissions/PermissionsControllerImpl.kt | 25 +++++++++++--------
.../moko/permissions/ResolverFragment.kt | 25 +++++++++++--------
4 files changed, 33 insertions(+), 22 deletions(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 0e8fc84..c505450 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -7,11 +7,13 @@ androidCoreTestingVersion = "2.1.0"
coroutinesVersion = "1.6.0-native-mt"
mokoMvvmVersion = "0.12.0"
mokoPermissionsVersion = "0.13.0"
+lifecycleRuntime = "2.5.1"
[libraries]
appCompat = { module = "androidx.appcompat:appcompat", version.ref = "androidAppCompatVersion" }
material = { module = "com.google.android.material:material", version.ref = "materialDesignVersion" }
lifecycle = { module = "androidx.lifecycle:lifecycle-extensions", version.ref = "androidLifecycleVersion" }
+lifecycleRuntime = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "lifecycleRuntime" }
coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutinesVersion" }
mokoMvvmCore = { module = "dev.icerock.moko:mvvm-core", version.ref = "mokoMvvmVersion" }
mokoMvvmTest = { module = "dev.icerock.moko:mvvm-test", version.ref = "mokoMvvmVersion" }
@@ -26,3 +28,4 @@ firebaseGradlePlugin = { module = "com.google.firebase:firebase-crashlytics-grad
mokoGradlePlugin = { module = "dev.icerock.moko:moko-gradle-plugin", version = "0.1.0" }
mobileMultiplatformGradlePlugin = { module = "dev.icerock:mobile-multiplatform", version = "0.14.1" }
kotlinSerializationGradlePlugin = { module = "org.jetbrains.kotlin:kotlin-serialization", version.ref = "kotlinVersion" }
+
diff --git a/permissions/build.gradle.kts b/permissions/build.gradle.kts
index c28c218..292b0de 100644
--- a/permissions/build.gradle.kts
+++ b/permissions/build.gradle.kts
@@ -12,6 +12,6 @@ plugins {
dependencies {
commonMainImplementation(libs.coroutines)
-
androidMainImplementation(libs.appCompat)
+ androidMainImplementation(libs.lifecycleRuntime)
}
\ No newline at end of file
diff --git a/permissions/src/androidMain/kotlin/dev/icerock/moko/permissions/PermissionsControllerImpl.kt b/permissions/src/androidMain/kotlin/dev/icerock/moko/permissions/PermissionsControllerImpl.kt
index 1c12bd8..00b3755 100755
--- a/permissions/src/androidMain/kotlin/dev/icerock/moko/permissions/PermissionsControllerImpl.kt
+++ b/permissions/src/androidMain/kotlin/dev/icerock/moko/permissions/PermissionsControllerImpl.kt
@@ -22,6 +22,8 @@ import androidx.lifecycle.OnLifecycleEvent
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.first
+import kotlinx.coroutines.sync.Mutex
+import kotlinx.coroutines.sync.withLock
import kotlin.coroutines.suspendCoroutine
@Suppress("TooManyFunctions")
@@ -30,6 +32,7 @@ class PermissionsControllerImpl(
private val applicationContext: Context
) : PermissionsController {
private val fragmentManagerHolder = MutableStateFlow(null)
+ private val mutex: Mutex = Mutex()
override fun bind(lifecycle: Lifecycle, fragmentManager: FragmentManager) {
this.fragmentManagerHolder.value = fragmentManager
@@ -45,15 +48,17 @@ class PermissionsControllerImpl(
}
override suspend fun providePermission(permission: Permission) {
- val fragmentManager: FragmentManager = awaitFragmentManager()
- val resolverFragment: ResolverFragment = getOrCreateResolverFragment(fragmentManager)
-
- val platformPermission = permission.toPlatformPermission()
- suspendCoroutine { continuation ->
- resolverFragment.requestPermission(
- permission,
- platformPermission
- ) { continuation.resumeWith(it) }
+ mutex.withLock {
+ val fragmentManager: FragmentManager = awaitFragmentManager()
+ val resolverFragment: ResolverFragment = getOrCreateResolverFragment(fragmentManager)
+
+ val platformPermission = permission.toPlatformPermission()
+ suspendCoroutine { continuation ->
+ resolverFragment.requestPermission(
+ permission,
+ platformPermission
+ ) { continuation.resumeWith(it) }
+ }
}
}
@@ -124,7 +129,7 @@ class PermissionsControllerImpl(
fragmentManager
.beginTransaction()
.add(fragment, resolverFragmentTag)
- .commitNow()
+ .commit()
}
}
}
diff --git a/permissions/src/androidMain/kotlin/dev/icerock/moko/permissions/ResolverFragment.kt b/permissions/src/androidMain/kotlin/dev/icerock/moko/permissions/ResolverFragment.kt
index 88a95b4..635053e 100644
--- a/permissions/src/androidMain/kotlin/dev/icerock/moko/permissions/ResolverFragment.kt
+++ b/permissions/src/androidMain/kotlin/dev/icerock/moko/permissions/ResolverFragment.kt
@@ -7,6 +7,7 @@ package dev.icerock.moko.permissions
import android.content.pm.PackageManager
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
+import androidx.lifecycle.lifecycleScope
internal class ResolverFragment : Fragment() {
init {
@@ -20,20 +21,22 @@ internal class ResolverFragment : Fragment() {
permissions: List,
callback: (Result) -> Unit
) {
- val context = requireContext()
- val toRequest = permissions.filter {
- ContextCompat.checkSelfPermission(context, it) != PackageManager.PERMISSION_GRANTED
- }
+ lifecycleScope.launchWhenCreated {
+ val context = requireContext()
+ val toRequest = permissions.filter {
+ ContextCompat.checkSelfPermission(context, it) != PackageManager.PERMISSION_GRANTED
+ }
- if (toRequest.isEmpty()) {
- callback.invoke(Result.success(Unit))
- return
- }
+ if (toRequest.isEmpty()) {
+ callback.invoke(Result.success(Unit))
+ return@launchWhenCreated
+ }
- val requestCode = (permissionCallbackMap.keys.maxOrNull() ?: 0) + 1
- permissionCallbackMap[requestCode] = PermissionCallback(permission, callback)
+ val requestCode = (permissionCallbackMap.keys.maxOrNull() ?: 0) + 1
+ permissionCallbackMap[requestCode] = PermissionCallback(permission, callback)
- requestPermissions(toRequest.toTypedArray(), requestCode)
+ requestPermissions(toRequest.toTypedArray(), requestCode)
+ }
}
override fun onRequestPermissionsResult(
From 8b8fbda8d977e4b50e3a0d255db416dd94b2a755 Mon Sep 17 00:00:00 2001
From: Aleksey Mikhailov
Date: Sun, 18 Dec 2022 15:31:33 +0600
Subject: [PATCH 3/5] #54 fix detekt
---
.../kotlin/dev/icerock/moko/permissions/compose/BindEffect.kt | 3 ++-
.../src/main/java/com/icerockdev/MainActivity.kt | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/permissions-compose/src/androidMain/kotlin/dev/icerock/moko/permissions/compose/BindEffect.kt b/permissions-compose/src/androidMain/kotlin/dev/icerock/moko/permissions/compose/BindEffect.kt
index a82555f..517f725 100644
--- a/permissions-compose/src/androidMain/kotlin/dev/icerock/moko/permissions/compose/BindEffect.kt
+++ b/permissions-compose/src/androidMain/kotlin/dev/icerock/moko/permissions/compose/BindEffect.kt
@@ -11,6 +11,7 @@ import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.fragment.app.FragmentActivity
import dev.icerock.moko.permissions.PermissionsController
+@Suppress("FunctionNaming")
@Composable
fun BindEffect(permissionsController: PermissionsController) {
val lifecycleOwner = LocalLifecycleOwner.current
@@ -19,4 +20,4 @@ fun BindEffect(permissionsController: PermissionsController) {
LaunchedEffect(true) {
permissionsController.bind(lifecycleOwner.lifecycle, fragmentManager)
}
-}
\ No newline at end of file
+}
diff --git a/sample/compose-android-app/src/main/java/com/icerockdev/MainActivity.kt b/sample/compose-android-app/src/main/java/com/icerockdev/MainActivity.kt
index 167e496..e42c1c8 100644
--- a/sample/compose-android-app/src/main/java/com/icerockdev/MainActivity.kt
+++ b/sample/compose-android-app/src/main/java/com/icerockdev/MainActivity.kt
@@ -56,6 +56,7 @@ class MainActivity : AppCompatActivity() {
}
}
+@Suppress("FunctionNaming")
@Composable
fun TestScreen(viewModel: SampleViewModel) {
val scaffoldState = rememberScaffoldState()
@@ -115,4 +116,4 @@ fun TestScreen(viewModel: SampleViewModel) {
)
}
}
-}
\ No newline at end of file
+}
From c41693ab6bae67c7364d854dbd8fc4586d9c394f Mon Sep 17 00:00:00 2001
From: Aleksey Mikhailov
Date: Sun, 18 Dec 2022 15:53:59 +0600
Subject: [PATCH 4/5] #54 fix publication of android-only module
---
permissions-compose/build.gradle.kts | 18 ++++++------------
.../{androidMain => main}/AndroidManifest.xml | 0
.../moko/permissions/compose/BindEffect.kt | 0
3 files changed, 6 insertions(+), 12 deletions(-)
rename permissions-compose/src/{androidMain => main}/AndroidManifest.xml (100%)
rename permissions-compose/src/{androidMain => main}/kotlin/dev/icerock/moko/permissions/compose/BindEffect.kt (100%)
diff --git a/permissions-compose/build.gradle.kts b/permissions-compose/build.gradle.kts
index 5c371dd..13a2422 100644
--- a/permissions-compose/build.gradle.kts
+++ b/permissions-compose/build.gradle.kts
@@ -3,22 +3,16 @@
*/
plugins {
- id("dev.icerock.moko.gradle.multiplatform.mobile")
- id("dev.icerock.moko.gradle.publication")
+ id("dev.icerock.moko.gradle.android.library")
+ id("dev.icerock.moko.gradle.android.publication")
id("dev.icerock.moko.gradle.stub.javadoc")
id("dev.icerock.moko.gradle.detekt")
- id("dev.icerock.mobile.multiplatform.android-manifest")
id("org.jetbrains.compose")
}
-kotlin {
- android()
-}
-
dependencies {
- androidMainApi(projects.permissions)
- androidMainApi(compose.runtime)
- androidMainApi(libs.appCompat)
- androidMainApi(libs.composeActivity)
+ api(projects.permissions)
+ api(compose.runtime)
+ api(libs.appCompat)
+ api(libs.composeActivity)
}
-
diff --git a/permissions-compose/src/androidMain/AndroidManifest.xml b/permissions-compose/src/main/AndroidManifest.xml
similarity index 100%
rename from permissions-compose/src/androidMain/AndroidManifest.xml
rename to permissions-compose/src/main/AndroidManifest.xml
diff --git a/permissions-compose/src/androidMain/kotlin/dev/icerock/moko/permissions/compose/BindEffect.kt b/permissions-compose/src/main/kotlin/dev/icerock/moko/permissions/compose/BindEffect.kt
similarity index 100%
rename from permissions-compose/src/androidMain/kotlin/dev/icerock/moko/permissions/compose/BindEffect.kt
rename to permissions-compose/src/main/kotlin/dev/icerock/moko/permissions/compose/BindEffect.kt
From 7438163000de0b07f6cd82f81a0d323221aa9f05 Mon Sep 17 00:00:00 2001
From: Aleksey Mikhailov
Date: Sun, 18 Dec 2022 16:15:01 +0600
Subject: [PATCH 5/5] up version
---
README.md | 6 +++---
gradle/libs.versions.toml | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index a056e23..b1f07af 100755
--- a/README.md
+++ b/README.md
@@ -38,9 +38,9 @@ allprojects {
project **build.gradle**
```groovy
dependencies {
- commonMainApi("dev.icerock.moko:permissions:0.13.0")
- commonMainApi("dev.icerock.moko:permissions-compose:0.13.0") // permissions api + compose extensions
- commonTestImplementation("dev.icerock.moko:permissions-test:0.13.0")
+ commonMainApi("dev.icerock.moko:permissions:0.14.0")
+ androidMainApi("dev.icerock.moko:permissions-compose:0.14.0") // permissions api + compose extensions
+ commonTestImplementation("dev.icerock.moko:permissions-test:0.14.0")
}
```
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 3c747cc..08f69c8 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -9,7 +9,7 @@ androidLifecycleVersion = "2.1.0"
androidCoreTestingVersion = "2.1.0"
coroutinesVersion = "1.6.0-native-mt"
mokoMvvmVersion = "0.12.0"
-mokoPermissionsVersion = "0.13.0"
+mokoPermissionsVersion = "0.14.0"
composeJetBrainsVersion = "1.1.1"
lifecycleRuntime = "2.5.1"