@@ -11,34 +11,25 @@ import android.appwidget.AppWidgetManager
1111import android.content.Context
1212import android.content.Intent
1313import android.graphics.Bitmap
14- import android.net.Uri
1514import android.view.View
1615import android.widget.RemoteViews
1716import android.widget.RemoteViewsService
17+ import androidx.core.graphics.drawable.toBitmap
1818import androidx.core.net.toUri
19- import com.bumptech.glide.Glide
20- import com.bumptech.glide.load.engine.DiskCacheStrategy
21- import com.bumptech.glide.load.model.StreamEncoder
22- import com.bumptech.glide.load.resource.file.FileToStreamDecoder
23- import com.bumptech.glide.request.FutureTarget
2419import com.nextcloud.android.lib.resources.dashboard.DashboardGetWidgetItemsRemoteOperation
2520import com.nextcloud.android.lib.resources.dashboard.DashboardWidgetItem
2621import com.nextcloud.client.account.UserAccountManager
2722import com.nextcloud.client.network.ClientFactory
23+ import com.nextcloud.utils.GlideHelper
2824import com.owncloud.android.R
25+ import com.owncloud.android.lib.common.OwnCloudClientManagerFactory
2926import com.owncloud.android.lib.common.utils.Log_OC
3027import com.owncloud.android.utils.BitmapUtils
31- import com.owncloud.android.utils.DisplayUtils.SVG_SIZE
32- import com.owncloud.android.utils.glide.CustomGlideStreamLoader
33- import com.owncloud.android.utils.glide.CustomGlideUriLoader
34- import com.owncloud.android.utils.svg.SVGorImage
35- import com.owncloud.android.utils.svg.SvgOrImageBitmapTranscoder
36- import com.owncloud.android.utils.svg.SvgOrImageDecoder
3728import dagger.android.AndroidInjection
3829import kotlinx.coroutines.CoroutineScope
3930import kotlinx.coroutines.Dispatchers
4031import kotlinx.coroutines.launch
41- import java.io.InputStream
32+ import kotlinx.coroutines.withContext
4233import javax.inject.Inject
4334
4435class DashboardWidgetService : RemoteViewsService () {
@@ -172,54 +163,36 @@ class StackRemoteViewsFactory(
172163 }
173164 }
174165
175- @Suppress(" TooGenericExceptionCaught" )
176166 private fun loadIcon (widgetItem : DashboardWidgetItem , remoteViews : RemoteViews ) {
177- val isIconSVG = widgetItem.iconUrl.toUri().encodedPath!! .endsWith(" .svg" )
178- val source: FutureTarget <Bitmap > = if (isIconSVG) {
179- loadSVGIcon(widgetItem)
180- } else {
181- loadBitmapIcon(widgetItem)
167+ CoroutineScope (Dispatchers .IO ).launch {
168+ val client = OwnCloudClientManagerFactory .getDefaultSingleton()
169+ .getNextcloudClientFor(userAccountManager.user.toOwnCloudAccount(), context)
170+ val pictureDrawable = GlideHelper .getDrawable(context, client, widgetItem.iconUrl)
171+ val bitmap = pictureDrawable?.toBitmap() ? : return @launch
172+
173+ withContext(Dispatchers .Main ) {
174+ remoteViews.setRemoteImageView(bitmap)
175+ return @withContext
176+ }
182177 }
178+ }
183179
180+ @Suppress(" TooGenericExceptionCaught" )
181+ private fun RemoteViews.setRemoteImageView (source : Bitmap ) {
184182 try {
185183 val bitmap: Bitmap = if (widgetConfiguration.roundIcon) {
186- BitmapUtils .roundBitmap(source.get() )
184+ BitmapUtils .roundBitmap(source)
187185 } else {
188- source.get()
186+ source
189187 }
190188
191- remoteViews. setImageViewBitmap(R .id.icon, bitmap)
189+ setImageViewBitmap(R .id.icon, bitmap)
192190 } catch (e: Exception ) {
193191 Log_OC .d(TAG , " Error setting icon" , e)
194- remoteViews. setImageViewResource(R .id.icon, R .drawable.ic_dashboard)
192+ setImageViewResource(R .id.icon, R .drawable.ic_dashboard)
195193 }
196194 }
197195
198- private fun loadSVGIcon (widgetItem : DashboardWidgetItem ): FutureTarget <Bitmap > {
199- return Glide .with (context)
200- .using(
201- CustomGlideUriLoader (userAccountManager.user, clientFactory),
202- InputStream ::class .java
203- )
204- .from(Uri ::class .java)
205- .`as `(SVGorImage ::class .java)
206- .transcode(SvgOrImageBitmapTranscoder (SVG_SIZE , SVG_SIZE ), Bitmap ::class .java)
207- .sourceEncoder(StreamEncoder ())
208- .cacheDecoder(FileToStreamDecoder (SvgOrImageDecoder ()))
209- .decoder(SvgOrImageDecoder ())
210- .diskCacheStrategy(DiskCacheStrategy .SOURCE )
211- .load(widgetItem.iconUrl.toUri())
212- .into(SVG_SIZE , SVG_SIZE )
213- }
214-
215- private fun loadBitmapIcon (widgetItem : DashboardWidgetItem ): FutureTarget <Bitmap > {
216- return Glide .with (context)
217- .using(CustomGlideStreamLoader (widgetConfiguration.user.get(), clientFactory))
218- .load(widgetItem.iconUrl)
219- .asBitmap()
220- .into(SVG_SIZE , SVG_SIZE )
221- }
222-
223196 private fun updateTexts (widgetItem : DashboardWidgetItem , remoteViews : RemoteViews ) {
224197 remoteViews.setTextViewText(R .id.title, widgetItem.title)
225198
0 commit comments