Skip to content

Commit

Permalink
Merge pull request #140 from uploadcare/fix-widget-worker
Browse files Browse the repository at this point in the history
Widget worker fix
  • Loading branch information
onthecrow authored Aug 12, 2024
2 parents 5b5bcab + 970c8e1 commit b0bc09a
Show file tree
Hide file tree
Showing 11 changed files with 40 additions and 29 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# Changelog

## 4.3.2
**Widget changes:**
- Remove custom worker initializer to avoid forcing apps to remove the default one in the manifest or to avoid crashes when the app has its own custom initializer
- Add foregroundServiceType to support Android 14 and newer

## 4.3.1
**Changes:**
* bugfix: UploadcareClient class visibility
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,5 +50,5 @@ Supported features:

* Gradle 7.6
* JDK 11
* Android SDK 34
* Android SDK 22

11 changes: 11 additions & 0 deletions documentation/WIDGET.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,17 @@
</resources>
```

#### If your app targets Android 14 (API level 34) or higher you must specify a foreground service type for all long-running workers.

Declare your worker's foreground service type with `dataSync` foreground service type in your app's manifest to support our worker:

```xml
<service
android:name="androidx.work.impl.foreground.SystemForegroundService"
android:foregroundServiceType="dataSync|your_type"
tools:node="replace" />
```

##### Select and upload file to Uploadcare from any available social network/camera/local file from Activity/Fragment.

Kotlin
Expand Down
5 changes: 0 additions & 5 deletions example/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,6 @@
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>

<provider
android:authorities="${applicationId}.androidx-startup"
android:name="androidx.startup.InitializationProvider"
tools:node="remove"/>
</application>

</manifest>
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Project-wide Gradle settings.
version=4.3.1
version=4.3.2

# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
Expand Down
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[versions]
appVersion = "4.3.1"
appVersion = "4.3.2"
kotlinVersion = "2.0.10"
kotlinCoroutines = "1.8.1"
minSdk = "22"
Expand Down
2 changes: 1 addition & 1 deletion library/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,5 @@ The latest stable version is available at Maven Central.
To include it in your Android project, add this line to the 'gradle.build' file:

```
implementation 'com.uploadcare.android.library:uploadcare-android:4.3.1'
implementation 'com.uploadcare.android.library:uploadcare-android:4.3.2'
```
2 changes: 1 addition & 1 deletion widget/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,5 @@ The latest stable version is available at Maven Central.
To include it in your Android project, add this line to the 'gradle.build' file:

```
implementation 'com.uploadcare.android.widget:uploadcare-android-widget:4.3.1'
implementation 'com.uploadcare.android.widget:uploadcare-android-widget:4.3.2'
```
16 changes: 8 additions & 8 deletions widget/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />

<application
android:allowBackup="true"
Expand All @@ -24,15 +25,14 @@
</provider>

<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
tools:node="remove"
tools:ignore="ExportedContentProvider" />

<provider
android:name=".worker.UploadcareWorkManagerInitializer"
android:authorities="${applicationId}.UploadcareWorkManagerInitializer"
android:name=".worker.UploadcareWidgetInitializer"
android:authorities="${applicationId}.UploadcareWidgetInitializer"
android:exported="false" />

<service
android:name="androidx.work.impl.foreground.SystemForegroundService"
android:foregroundServiceType="dataSync"
tools:node="merge" />
</application>

</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.uploadcare.android.widget.worker
import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC
import android.os.Build
import androidx.annotation.RequiresApi
import androidx.core.app.NotificationCompat
Expand Down Expand Up @@ -99,7 +100,15 @@ class FileUploadWorker(appContext: Context,
private fun createForegroundInfo(notificationBuilder: NotificationCompat.Builder)
: ForegroundInfo {
//Notification ID
return ForegroundInfo(NOTIFICATION_ID, notificationBuilder.build())
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
ForegroundInfo(
NOTIFICATION_ID,
notificationBuilder.build(),
FOREGROUND_SERVICE_TYPE_DATA_SYNC
)
} else {
ForegroundInfo(NOTIFICATION_ID, notificationBuilder.build())
}
}

private fun updateNotificationProgress(content: String, progress: Int) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ import android.content.pm.ProviderInfo
import android.database.Cursor
import android.net.Uri
import androidx.annotation.RestrictTo
import androidx.work.Configuration
import androidx.work.WorkManager
import com.uploadcare.android.widget.controller.UploadcareWidget

/**
Expand All @@ -18,18 +16,11 @@ import com.uploadcare.android.widget.controller.UploadcareWidget
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
class UploadcareWorkManagerInitializer : ContentProvider() {
class UploadcareWidgetInitializer : ContentProvider() {

override fun onCreate(): Boolean {
//Initialize UploadcareWidget.
UploadcareWidget.init(context!!)
// provide custom configuration
val workManagerConfig = Configuration.Builder()
.setMinimumLoggingLevel(android.util.Log.INFO)
.build()

// initialize WorkManager
WorkManager.initialize(context!!, workManagerConfig)

return true
}
Expand Down

0 comments on commit b0bc09a

Please sign in to comment.