Skip to content
This repository was archived by the owner on Mar 15, 2026. It is now read-only.
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bom/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ dependencies {
api(project(":permissions"))
api(project(":photopicker"))
api(project(":storage"))
api(Square.okio)
api(libs.okio)
}
}

Expand Down
14 changes: 7 additions & 7 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -23,20 +23,20 @@ buildscript {
mavenCentral()
}
dependencies {
classpath(Android.tools.build.gradlePlugin)
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:_")
classpath("com.android.tools.build:gradle:7.1.3")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10")

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

plugins {
id("com.diffplug.spotless")
id("org.jetbrains.dokka")
id("me.tylerbwong.gradle.metalava") apply false
id("com.vanniktech.maven.publish") apply false
id("org.jetbrains.kotlin.plugin.parcelize") apply false
id("com.diffplug.spotless") version "6.4.2"
id("org.jetbrains.dokka") version "1.6.10"
id("me.tylerbwong.gradle.metalava") version "0.2.3" apply false
id("com.vanniktech.maven.publish") version "0.19.0" apply false
id("org.jetbrains.kotlin.plugin.parcelize") version "1.4.32" apply false
}

allprojects {
Expand Down
11 changes: 11 additions & 0 deletions gradle/androidx.versions.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[libraries]
corektx = { module = "androidx.core:core-ktx", version = "1.7.0" }
appcompat = { module = "androidx.appcompat:appcompat", version = "1.4.1" }
material = { module = "com.google.android.material:material", version = "1.5.0" }
lifecycleruntimektx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version = "2.4.1" }
junit = { module = "androidx.test.ext:junit", version = "1.1.3" }
junitktx = { module = "androidx.test.ext:junit-ktx", version = "1.1.3" }
espresso = { module = "androidx.test.espresso:espresso-core", version = "3.4.0" }
rules = { module = "androidx.test:rules", version = "1.4.0" }
uiautomator = { module = "androidx.test.uiautomator:uiautomator", version = "2.2.0" }
runner = { module = "androidx.test:runner", version = "1.4.0" }
12 changes: 12 additions & 0 deletions gradle/compose.versions.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[versions]
current = "1.1.1"

[libraries]
ui = { module = "androidx.compose.ui:ui", version.ref = "current" }
material = { module = "androidx.compose.material:material", version.ref = "current" }
icons = { module = "androidx.compose.material:material-icons-extended", version.ref = "current" }
uitoolingpreview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "current" }
activity = { module = "androidx.activity:activity-compose", version = "1.4.0" }
navigation = { module = "androidx.navigation:navigation-compose", version = "2.4.2" }
uitooling = { module = "androidx.compose.ui:ui-tooling", version.ref = "current" }
junit = { module = "androidx.compose.ui:ui-test-junit4", version.ref = "current" }
12 changes: 12 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[versions]
kotlin = "1.6.10"

[libraries]
stdlib-jdk7 = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk7", version.ref = "kotlin" }
coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version = "1.6.1" }

okio = { module = "com.squareup.okio:okio", version = "3.0.0" }
glide = { module = "com.github.skydoves:landscapist-glide", version = "1.5.1" }

junit = { module = "junit:junit", version = "4.13.2" }
robolectric = { module = "org.robolectric:robolectric", version = "4.7.3" }
19 changes: 11 additions & 8 deletions permissions/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,13 @@ plugins {
}

android {
compileSdk = 31
// compileSdk = 31
compileSdkPreview = "Tiramisu"

defaultConfig {
minSdk = 21
targetSdk = 31
// targetSdk = 31
targetSdkPreview = "Tiramisu"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
Expand Down Expand Up @@ -58,10 +60,11 @@ android {
}

dependencies {
implementation(AndroidX.core.ktx)
implementation(AndroidX.activity.ktx)
testImplementation(Testing.junit4)
testImplementation(Testing.robolectric)
androidTestImplementation(AndroidX.test.ext.junit)
androidTestImplementation(AndroidX.test.ext.junitKtx)
implementation(androidx.corektx)
implementation(androidx.appcompat)
implementation(androidx.material)
testImplementation(libs.junit)
testImplementation(libs.robolectric)
androidTestImplementation(androidx.junit)
androidTestImplementation(androidx.junitktx)
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,32 +20,33 @@ import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import androidx.activity.result.contract.ActivityResultContract
import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions.Companion.EXTRA_PERMISSION_GRANT_RESULTS
import androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions.ACTION_REQUEST_PERMISSIONS
import androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions.EXTRA_PERMISSIONS
import androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions.EXTRA_PERMISSION_GRANT_RESULTS
import androidx.core.content.ContextCompat

class RequestAccess : ActivityResultContract<RequestAccess.Args, Boolean>() {
class Args(
val action: StoragePermissions.Action,
val types: List<StoragePermissions.FileType>,
val createdBy: StoragePermissions.CreatedBy
)
abstract class RequestStorageAccessFor(
private val action: StoragePermissions.Action,
private val fileTypes: List<StoragePermissions.FileType>,
private val createdBy: StoragePermissions.CreatedBy
) : ActivityResultContract<Void?, Boolean>() {

override fun createIntent(context: Context, input: Args): Intent {
override fun createIntent(context: Context, input: Void?): Intent {
val targetSdk = context.applicationInfo.targetSdkVersion
val permissions =
StoragePermissions.getPermissions(input.action, input.types, input.createdBy)
return Intent(ActivityResultContracts.RequestMultiplePermissions.ACTION_REQUEST_PERMISSIONS).putExtra(
ActivityResultContracts.RequestMultiplePermissions.EXTRA_PERMISSIONS,
permissions.toTypedArray()
)
StoragePermissions.getPermissions(action, fileTypes, createdBy, targetSdk)
return Intent(ACTION_REQUEST_PERMISSIONS).apply {
putExtra(EXTRA_PERMISSIONS, permissions.toTypedArray())
}
}

override fun getSynchronousResult(
context: Context,
input: Args
input: Void?
): SynchronousResult<Boolean>? {
val targetSdk = context.applicationInfo.targetSdkVersion
val permissions =
StoragePermissions.getPermissions(input.action, input.types, input.createdBy)
StoragePermissions.getPermissions(action, fileTypes, createdBy, targetSdk)

if (permissions.isEmpty()) {
return SynchronousResult(true)
Expand All @@ -67,11 +68,20 @@ class RequestAccess : ActivityResultContract<RequestAccess.Args, Boolean>() {
): Boolean {
if (resultCode != Activity.RESULT_OK) return false
if (intent == null) return false
val permissions =
intent.getStringArrayExtra(ActivityResultContracts.RequestMultiplePermissions.EXTRA_PERMISSIONS)
val permissions = intent.getStringArrayExtra(EXTRA_PERMISSIONS)
val grantResults = intent.getIntArrayExtra(EXTRA_PERMISSION_GRANT_RESULTS)
if (grantResults == null || permissions == null) return false

return grantResults.all { result -> result == PackageManager.PERMISSION_GRANTED }
}
}

class RequestStorageReadAccessFor(
fileTypes: List<StoragePermissions.FileType>,
createdBy: StoragePermissions.CreatedBy
) : RequestStorageAccessFor(StoragePermissions.Action.READ, fileTypes, createdBy)

class RequestStorageReadWriteAccessFor(
fileTypes: List<StoragePermissions.FileType>,
createdBy: StoragePermissions.CreatedBy
) : RequestStorageAccessFor(StoragePermissions.Action.READ_AND_WRITE, fileTypes, createdBy)
Loading