Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
e45badb
don't use deprecated InstallParameters.plugins
solrudev Jun 30, 2025
75ccd1d
update gradle-maven-publish-plugin to 0.34.0
solrudev Jul 14, 2025
0603edf
tidy build logic a bit
solrudev Jul 15, 2025
16d0491
update bcv to 0.18.1
solrudev Jul 15, 2025
13c9b5e
clean up version catalogs a bit
solrudev Jul 15, 2025
4819afe
update androidx.lifecycle to 2.9.1
solrudev Jul 15, 2025
1ba7325
update androidx.navigation to 2.9.1
solrudev Jul 15, 2025
8c192ea
update androidx.appcompat to 1.7.1
solrudev Jul 15, 2025
2e606fa
update androidx.room gradle plugin to 2.7.2
solrudev Jul 15, 2025
91577f7
update agp and apksig to 8.11.1
solrudev Jul 15, 2025
9c5c6fe
update okhttp to 5.0.0-alpha.17
solrudev Jul 15, 2025
a753b30
remove unused import
solrudev Jul 15, 2025
147a25b
remove unnecessary dependency
solrudev Jul 16, 2025
6dea15f
mark ReleaseChangelogTask with DisableCachingByDefault
solrudev Jul 16, 2025
cae3eb3
add empty consumer-rules.pro
solrudev Jul 17, 2025
2c77ad5
rename some variables
solrudev Jul 21, 2025
35bac71
add clarifying comment for kotlin jvm annotations
solrudev Jul 21, 2025
bb82564
use ACTION_OPEN_DOCUMENT in samples
solrudev Jul 28, 2025
7b8abb9
introduce fallbackToOnDemandApproval api
solrudev Aug 3, 2025
aa146ac
update okhttp to 5.1.0
solrudev Aug 3, 2025
b752bf8
update kotlin-ksp to 2.1.21-2.0.2
solrudev Aug 3, 2025
eb80c56
update agp to 8.12.0
solrudev Aug 3, 2025
3a266b7
update androidx.lifecycle to 2.9.2
solrudev Aug 3, 2025
876b28c
update androidx.navigation to 2.9.3
solrudev Aug 3, 2025
0468886
update androidx.concurrent to 1.3.0
solrudev Aug 3, 2025
4525851
update gradle to 9.0.0
solrudev Aug 3, 2025
1535d22
update kotlinx-serialization-json to 1.9.0
solrudev Aug 3, 2025
2b78fd1
use fallbackToOnDemandApproval in sample-api34
solrudev Aug 3, 2025
381c6de
raise InstallParameters.plugins deprecation level to error
solrudev Aug 4, 2025
1c857f1
increase version
solrudev Aug 4, 2025
8c8a9a8
change areSplitPackagesSupported() implementation to not use android.…
solrudev Aug 4, 2025
42befe0
fix fallbackToOnDemandApproval implementation
solrudev Aug 6, 2025
dd9d288
update preapproval documentation
solrudev Aug 7, 2025
ad791e1
add version 0.15.0 to changelog
solrudev Aug 7, 2025
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 .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ jobs:

- name: Publish
run: |
./gradlew publishAndReleaseToMavenCentral --no-configuration-cache
./gradlew publishAndReleaseToMavenCentral
env:
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.OSSRH_USERNAME }}
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.OSSRH_PASSWORD }}
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ Ackpine depends on Jetpack libraries, so it's also necessary to add the `google(

```toml
[versions]
ackpine = "0.14.0"
ackpine = "0.15.0"

[libraries]
ackpine-core = { module = "ru.solrudev.ackpine:ackpine-core", version.ref = "ackpine" }
Expand Down Expand Up @@ -76,7 +76,7 @@ ackpine = [

```kotlin
dependencies {
val ackpineVersion = "0.14.0"
val ackpineVersion = "0.15.0"
implementation("ru.solrudev.ackpine:ackpine-core:$ackpineVersion")

// optional - Kotlin extensions and Coroutines support
Expand Down
5 changes: 4 additions & 1 deletion ackpine-api/api-main/api/api-main.api
Original file line number Diff line number Diff line change
Expand Up @@ -313,8 +313,9 @@ public final class ru/solrudev/ackpine/installer/parameters/InstallParameters$Bu
public final class ru/solrudev/ackpine/installer/parameters/InstallPreapproval {
public static final field Companion Lru/solrudev/ackpine/installer/parameters/InstallPreapproval$Companion;
public static final field NONE Lru/solrudev/ackpine/installer/parameters/InstallPreapproval;
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;ZLkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun equals (Ljava/lang/Object;)Z
public final fun getFallbackToOnDemandApproval ()Z
public final fun getIcon ()Landroid/net/Uri;
public final fun getLabel ()Ljava/lang/String;
public final fun getLanguageTag ()Ljava/lang/String;
Expand All @@ -328,7 +329,9 @@ public final class ru/solrudev/ackpine/installer/parameters/InstallPreapproval$B
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/util/Locale;)V
public final fun build ()Lru/solrudev/ackpine/installer/parameters/InstallPreapproval;
public final fun getFallbackToOnDemandApproval ()Z
public final fun getIcon ()Landroid/net/Uri;
public final fun setFallbackToOnDemandApproval (Z)Lru/solrudev/ackpine/installer/parameters/InstallPreapproval$Builder;
public final fun setIcon (Landroid/net/Uri;)Lru/solrudev/ackpine/installer/parameters/InstallPreapproval$Builder;
}

Expand Down
2 changes: 1 addition & 1 deletion ackpine-api/api-main/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ ackpine {
}

dependencies {
api(libs.listenablefuture)
api(libs.listenableFuture)
api(androidx.annotation)
api(projects.ackpineResources)
compileOnly(projects.ackpineApi.apiStubs)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,11 @@ public class InstallParameters private constructor(
/**
* [Plugins][AckpinePlugin] applied to the install session.
*/
@Deprecated(message = "Renamed to pluginContainer", replaceWith = ReplaceWith(expression = "pluginContainer"))
@Deprecated(
message = "Renamed to pluginContainer",
replaceWith = ReplaceWith(expression = "pluginContainer"),
level = DeprecationLevel.ERROR
)
public val plugins: AckpinePluginContainer
get() = pluginContainer

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,12 @@ public class InstallPreapproval private constructor(
/**
* The icon representing the app to be installed.
*/
public val icon: Uri
public val icon: Uri,

/**
* If `true`, allows to fall back to normal on-demand user approval if preapproval is not available.
*/
public val fallbackToOnDemandApproval: Boolean
) {

override fun equals(other: Any?): Boolean {
Expand All @@ -62,6 +67,7 @@ public class InstallPreapproval private constructor(
if (label != other.label) return false
if (languageTag != other.languageTag) return false
if (icon != other.icon) return false
if (fallbackToOnDemandApproval != other.fallbackToOnDemandApproval) return false
return true
}

Expand All @@ -70,6 +76,7 @@ public class InstallPreapproval private constructor(
result = 31 * result + label.hashCode()
result = 31 * result + languageTag.hashCode()
result = 31 * result + icon.hashCode()
result = 31 * result + fallbackToOnDemandApproval.hashCode()
return result
}

Expand All @@ -78,7 +85,8 @@ public class InstallPreapproval private constructor(
"packageName='$packageName', " +
"label='$label', " +
"languageTag='$languageTag', " +
"icon=$icon" +
"icon=$icon, " +
"fallbackToOnDemandApproval=$fallbackToOnDemandApproval" +
")"
}

Expand Down Expand Up @@ -111,18 +119,31 @@ public class InstallPreapproval private constructor(
public var icon: Uri = Uri.EMPTY
private set

/**
* If `true`, allows to fall back to normal on-demand user approval if preapproval is not available.
*/
public var fallbackToOnDemandApproval: Boolean = false
private set

/**
* Sets [InstallPreapproval.icon].
*/
public fun setIcon(icon: Uri): Builder = apply {
this.icon = icon
}

/**
* Sets [InstallPreapproval.fallbackToOnDemandApproval]
*/
public fun setFallbackToOnDemandApproval(value: Boolean): Builder = apply {
this.fallbackToOnDemandApproval = value
}

/**
* Constructs a new instance of [InstallPreapproval].
*/
public fun build(): InstallPreapproval {
return InstallPreapproval(packageName, label, languageTag, icon)
return InstallPreapproval(packageName, label, languageTag, icon, fallbackToOnDemandApproval)
}
}

Expand All @@ -136,7 +157,8 @@ public class InstallPreapproval private constructor(
packageName = "",
label = "",
languageTag = "",
icon = Uri.EMPTY
icon = Uri.EMPTY,
fallbackToOnDemandApproval = false
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -66,4 +66,12 @@ public enum class InstallerType {

@ChecksSdkIntAtLeast(api = Build.VERSION_CODES.LOLLIPOP)
@JvmSynthetic
internal fun areSplitPackagesSupported(): Boolean = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP
internal fun areSplitPackagesSupported(): Boolean = isPackageInstallerAvailable

// To avoid referencing Build.VERSION.SDK_INT
private val isPackageInstallerAvailable = try {
Class.forName("android.content.pm.PackageInstaller")
true
} catch (_: ClassNotFoundException) {
false
}
Loading