Skip to content

Commit

Permalink
feat: support for android API 34. Updated OkHttp to 4.10.0 and common…
Browse files Browse the repository at this point in the history
…s-net to 3.10.0
  • Loading branch information
gotev committed Oct 15, 2023
1 parent f2254d4 commit 8570183
Show file tree
Hide file tree
Showing 11 changed files with 50 additions and 18 deletions.
2 changes: 1 addition & 1 deletion examples/app/.idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion manifest.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ ext {
library_version = '4.8.0'
version_code = 49
min_sdk = 21
target_sdk = 33
target_sdk = 34
demo_app_id = 'net.gotev.uploadservicedemo'

// Gradle classpath dependencies versions
Expand Down
2 changes: 1 addition & 1 deletion uploadservice-ftp/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ dependencies {

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

api 'commons-net:commons-net:3.8.0'
api 'commons-net:commons-net:3.10.0'
//api "net.gotev:uploadservice:${version}"
//comment the previous line and uncomment the next line for development (it uses the local lib)
api project(':uploadservice')
Expand Down
2 changes: 1 addition & 1 deletion uploadservice-okhttp/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ dependencies {

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

api 'com.squareup.okhttp3:okhttp:4.9.2'
api 'com.squareup.okhttp3:okhttp:4.10.0'
//api "net.gotev:uploadservice:${version}"
//comment the previous line and uncomment the next line for development (it uses the local lib)
api project(':uploadservice')
Expand Down
2 changes: 1 addition & 1 deletion uploadservice/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ version = library_version

android {
namespace "net.gotev.uploadservice"
compileSdkVersion target_sdk

defaultConfig {
compileSdk target_sdk
minSdkVersion min_sdk
targetSdkVersion target_sdk
versionCode version_code
Expand Down
4 changes: 3 additions & 1 deletion uploadservice/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />

<application>

<service
android:name=".UploadService"
android:foregroundServiceType="dataSync"
android:enabled="true"
android:exported="false"></service>
android:exported="false" />

</application>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.app.Notification
import android.app.Service
import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.IBinder
import android.os.PowerManager
import androidx.core.app.NotificationCompat
Expand Down Expand Up @@ -165,6 +166,15 @@ class UploadService : Service() {
return false
}

private fun stopServiceForeground() {
if (Build.VERSION.SDK_INT >= 24) {
stopForeground(STOP_FOREGROUND_REMOVE)
} else {
@Suppress("DEPRECATION")
stopForeground(true)
}
}

/**
* Called by each task when it is completed (either successfully, with an error or due to
* user cancellation).
Expand All @@ -182,7 +192,7 @@ class UploadService : Service() {

if (UploadServiceConfig.isForegroundService && uploadTasksMap.isEmpty()) {
UploadServiceLogger.debug(TAG, NA) { "All tasks completed, stopping foreground execution" }
stopForeground(true)
stopServiceForeground()
shutdownIfThereArentAnyActiveTasks()
}
}
Expand Down Expand Up @@ -248,7 +258,7 @@ class UploadService : Service() {

if (UploadServiceConfig.isForegroundService) {
UploadServiceLogger.debug(TAG, NA) { "Stopping foreground execution" }
stopForeground(true)
stopServiceForeground()
}

wakeLock.safeRelease()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.content.Intent
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
import net.gotev.uploadservice.UploadServiceConfig
import net.gotev.uploadservice.extensions.parcelableCompat
import net.gotev.uploadservice.network.ServerResponse

@Parcelize
Expand All @@ -17,7 +18,7 @@ internal data class BroadcastData @JvmOverloads constructor(
private const val paramName = "broadcastData"

fun fromIntent(intent: Intent): BroadcastData? {
return intent.getParcelableExtra(paramName)
return intent.parcelableCompat(paramName)
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
package net.gotev.uploadservice.extensions

import android.annotation.SuppressLint
import android.app.PendingIntent
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Context.RECEIVER_NOT_EXPORTED
import android.content.Intent
import android.os.Build
import android.content.IntentFilter
import android.os.Build.VERSION.SDK_INT
import android.os.Parcelable
import net.gotev.uploadservice.UploadService
import net.gotev.uploadservice.UploadServiceConfig
import net.gotev.uploadservice.UploadTask
Expand Down Expand Up @@ -43,7 +48,7 @@ fun Context.startNewUpload(
*/
startService(intent)
} catch (exc: Throwable) {
if (Build.VERSION.SDK_INT >= 26 && exc is IllegalStateException) {
if (SDK_INT >= 26 && exc is IllegalStateException) {
/*
this is a bugged Android API and Google is not going to fix it
Expand Down Expand Up @@ -79,7 +84,6 @@ data class UploadTaskCreationParameters(
val notificationConfig: UploadNotificationConfig
)

@Suppress("UNCHECKED_CAST")
fun Intent?.getUploadTaskCreationParameters(): UploadTaskCreationParameters? {
if (this == null || action != UploadServiceConfig.uploadAction) {
UploadServiceLogger.error(
Expand All @@ -92,7 +96,7 @@ fun Intent?.getUploadTaskCreationParameters(): UploadTaskCreationParameters? {
return null
}

val params: UploadTaskParameters = getParcelableExtra(taskParametersKey) ?: run {
val params: UploadTaskParameters = parcelableCompat(taskParametersKey) ?: run {
UploadServiceLogger.error(
component = UploadService.TAG,
uploadId = NA,
Expand Down Expand Up @@ -129,7 +133,7 @@ fun Intent?.getUploadTaskCreationParameters(): UploadTaskCreationParameters? {
}

val notificationConfig: UploadNotificationConfig =
getParcelableExtra(taskNotificationConfig) ?: run {
parcelableCompat(taskNotificationConfig) ?: run {
UploadServiceLogger.error(
component = UploadService.TAG,
uploadId = NA,
Expand All @@ -148,7 +152,6 @@ fun Intent?.getUploadTaskCreationParameters(): UploadTaskCreationParameters? {

/**
* Creates a new task instance based on the requested task class in the intent.
* @param intent intent passed to the service
* @return task instance or null if the task class is not supported or invalid
*/
@Suppress("UNCHECKED_CAST")
Expand Down Expand Up @@ -221,9 +224,23 @@ val Intent.uploadIdToCancel: String?

// Adjusts flags for Android 12+
fun flagsCompat(flags: Int): Int {
if (Build.VERSION.SDK_INT > 30) {
if (SDK_INT > 30) {
return flags or PendingIntent.FLAG_IMMUTABLE
}

return flags
}

inline fun <reified T : Parcelable> Intent.parcelableCompat(key: String): T? = when {
SDK_INT >= 34 -> getParcelableExtra(key, T::class.java)
else -> @Suppress("DEPRECATION") getParcelableExtra(key) as? T
}

@SuppressLint("UnspecifiedRegisterReceiverFlag")
fun Context.registerReceiverCompat(receiver: BroadcastReceiver, filter: IntentFilter) {
if (SDK_INT >= 34) {
registerReceiver(receiver, filter, RECEIVER_NOT_EXPORTED)
} else {
registerReceiver(receiver, filter)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import net.gotev.uploadservice.UploadServiceConfig
import net.gotev.uploadservice.data.BroadcastData
import net.gotev.uploadservice.data.UploadInfo
import net.gotev.uploadservice.data.UploadStatus
import net.gotev.uploadservice.extensions.registerReceiverCompat

open class BaseRequestObserver(
private val context: Context,
Expand All @@ -33,7 +34,7 @@ open class BaseRequestObserver(
}

open fun register() {
context.registerReceiver(this, UploadServiceConfig.broadcastStatusIntentFilter)
context.registerReceiverCompat(this, UploadServiceConfig.broadcastStatusIntentFilter)
}

open fun unregister() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import android.content.Intent
import net.gotev.uploadservice.UploadService
import net.gotev.uploadservice.UploadServiceConfig.broadcastNotificationAction
import net.gotev.uploadservice.UploadServiceConfig.broadcastNotificationActionIntentFilter
import net.gotev.uploadservice.extensions.registerReceiverCompat
import net.gotev.uploadservice.extensions.uploadIdToCancel
import net.gotev.uploadservice.logger.UploadServiceLogger
import net.gotev.uploadservice.logger.UploadServiceLogger.NA
Expand All @@ -28,7 +29,7 @@ open class NotificationActionsObserver(
}

fun register() {
context.registerReceiver(this, broadcastNotificationActionIntentFilter)
context.registerReceiverCompat(this, broadcastNotificationActionIntentFilter)
UploadServiceLogger.debug(NotificationActionsObserver::class.java.simpleName, NA) {
"registered"
}
Expand Down

0 comments on commit 8570183

Please sign in to comment.