Skip to content

Commit 14eb17a

Browse files
committed
register SvgOrImageBitmapTranscoder, fix DashboardWidgetService.kt usage and convert java files to kt
Signed-off-by: alperozturk <[email protected]>
1 parent 2d0fb3e commit 14eb17a

File tree

7 files changed

+107
-131
lines changed

7 files changed

+107
-131
lines changed

app/src/main/java/com/nextcloud/client/widget/DashboardWidgetService.kt

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,22 @@ package com.nextcloud.client.widget
1010
import android.appwidget.AppWidgetManager
1111
import android.content.Context
1212
import android.content.Intent
13-
import android.graphics.drawable.Drawable
13+
import android.graphics.Bitmap
1414
import android.view.View
1515
import android.widget.RemoteViews
1616
import android.widget.RemoteViewsService
1717
import androidx.core.net.toUri
1818
import com.bumptech.glide.Glide
19+
import com.bumptech.glide.load.engine.DiskCacheStrategy
1920
import com.bumptech.glide.request.FutureTarget
2021
import com.nextcloud.android.lib.resources.dashboard.DashboardGetWidgetItemsRemoteOperation
2122
import com.nextcloud.android.lib.resources.dashboard.DashboardWidgetItem
2223
import com.nextcloud.client.account.UserAccountManager
2324
import com.nextcloud.client.network.ClientFactory
2425
import com.owncloud.android.R
2526
import com.owncloud.android.lib.common.utils.Log_OC
27+
import com.owncloud.android.utils.BitmapUtils
2628
import com.owncloud.android.utils.DisplayUtils.SVG_SIZE
27-
import com.owncloud.android.utils.svg.SVGorImage
2829
import dagger.android.AndroidInjection
2930
import kotlinx.coroutines.CoroutineScope
3031
import kotlinx.coroutines.Dispatchers
@@ -164,44 +165,44 @@ class StackRemoteViewsFactory(
164165

165166
@Suppress("TooGenericExceptionCaught")
166167
private fun loadIcon(widgetItem: DashboardWidgetItem, remoteViews: RemoteViews) {
167-
val isIconSVG = widgetItem.iconUrl.toUri().encodedPath!!.endsWith(".svg")
168-
val source: FutureTarget<out Any> = if (isIconSVG) {
168+
val isIconSVG = widgetItem.iconUrl.toUri().encodedPath?.endsWith(".svg")
169+
val source: FutureTarget<Bitmap> = if (isIconSVG == true) {
169170
loadSVGIcon(widgetItem)
170171
} else {
171172
loadBitmapIcon(widgetItem)
172173
}
173174

174175
try {
175-
// val bitmap: Bitmap = if (widgetConfiguration.roundIcon) {
176-
// BitmapUtils.roundBitmap(source.get())
177-
// } else {
178-
// source.get()
179-
// }
176+
val bitmap: Bitmap = if (widgetConfiguration.roundIcon) {
177+
BitmapUtils.roundBitmap(source.get())
178+
} else {
179+
source.get()
180+
}
180181

181-
remoteViews.setImageViewBitmap(R.id.icon, null)
182+
remoteViews.setImageViewBitmap(R.id.icon, bitmap)
182183
} catch (e: Exception) {
183184
Log_OC.d(TAG, "Error setting icon", e)
184185
remoteViews.setImageViewResource(R.id.icon, R.drawable.ic_dashboard)
185186
}
186187
}
187188

188-
// TODO GLIDE
189-
private fun loadSVGIcon(widgetItem: DashboardWidgetItem): FutureTarget<SVGorImage> {
190-
return Glide.with(context)
191-
.`as`(SVGorImage::class.java)
192-
//.transcode(SvgOrImageBitmapTranscoder(SVG_SIZE, SVG_SIZE), Bitmap::class.java)
193-
//.sourceEncoder(StreamEncoder())
194-
//.cacheDecoder(FileToStreamDecoder(SvgOrImageDecoder()))
195-
//.decoder(SvgOrImageDecoder())
196-
//.diskCacheStrategy(DiskCacheStrategy.SOURCE)
189+
private fun loadSVGIcon(widgetItem: DashboardWidgetItem): FutureTarget<Bitmap> {
190+
return Glide
191+
.with(context)
192+
.asBitmap()
197193
.load(widgetItem.iconUrl.toUri())
198-
.into(SVG_SIZE, SVG_SIZE)
194+
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
195+
.override(SVG_SIZE, SVG_SIZE)
196+
.submit()
199197
}
200198

201-
private fun loadBitmapIcon(widgetItem: DashboardWidgetItem): FutureTarget<Drawable> {
202-
return Glide.with(context)
199+
private fun loadBitmapIcon(widgetItem: DashboardWidgetItem): FutureTarget<Bitmap> {
200+
return Glide
201+
.with(context)
202+
.asBitmap()
203203
.load(widgetItem.iconUrl)
204-
.into(SVG_SIZE, SVG_SIZE)
204+
.override(SVG_SIZE, SVG_SIZE)
205+
.submit()
205206
}
206207

207208
private fun updateTexts(widgetItem: DashboardWidgetItem, remoteViews: RemoteViews) {

app/src/main/java/com/nextcloud/utils/extensions/OCShareExtensions.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* Nextcloud - Android Client
33
*
4-
* SPDX-FileCopyrightText: 2025 Your Name <your@email.com>
4+
* SPDX-FileCopyrightText: 2025 Alper Ozturk <alper.ozturk@nextcloud.com>
55
* SPDX-License-Identifier: AGPL-3.0-or-later
66
*/
77

app/src/main/java/com/owncloud/android/utils/glide/CustomGlideUriLoader.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ public class CustomGlideUriLoader implements ModelLoader<Uri, InputStream> {
2727

2828
private final User user;
2929
private final ClientFactory clientFactory;
30-
31-
3230

3331
public CustomGlideUriLoader(User user, ClientFactory clientFactory) {
3432
this.user = user;
Lines changed: 41 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,86 +1,67 @@
11
/*
22
* Nextcloud - Android Client
33
*
4-
* SPDX-FileCopyrightText: 2025 Your Name <your@email.com>
4+
* SPDX-FileCopyrightText: 2025 Alper Ozturk <alper.ozturk@nextcloud.com>
55
* SPDX-License-Identifier: AGPL-3.0-or-later
66
*/
7+
package com.owncloud.android.utils.glide
78

8-
package com.owncloud.android.utils.glide;
9-
10-
import com.bumptech.glide.Priority;
11-
import com.bumptech.glide.load.DataSource;
12-
import com.bumptech.glide.load.data.DataFetcher;
13-
import com.nextcloud.client.account.UserAccountManagerImpl;
14-
import com.owncloud.android.MainApp;
15-
import com.owncloud.android.lib.common.OwnCloudAccount;
16-
import com.owncloud.android.lib.common.OwnCloudClient;
17-
import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
18-
import com.owncloud.android.lib.common.operations.RemoteOperation;
19-
import com.owncloud.android.lib.common.utils.Log_OC;
20-
21-
import org.apache.commons.httpclient.HttpStatus;
22-
import org.apache.commons.httpclient.methods.GetMethod;
23-
24-
import java.io.InputStream;
25-
26-
import androidx.annotation.NonNull;
9+
import com.bumptech.glide.Priority
10+
import com.bumptech.glide.load.DataSource
11+
import com.bumptech.glide.load.data.DataFetcher
12+
import com.nextcloud.client.account.UserAccountManagerImpl
13+
import com.owncloud.android.MainApp
14+
import com.owncloud.android.lib.common.OwnCloudClientManagerFactory
15+
import com.owncloud.android.lib.common.operations.RemoteOperation
16+
import com.owncloud.android.lib.common.utils.Log_OC
17+
import org.apache.commons.httpclient.HttpStatus
18+
import org.apache.commons.httpclient.methods.GetMethod
19+
import java.io.InputStream
2720

2821
/**
2922
* Fetcher with Nextcloud client
3023
*/
31-
public class GlideStringStreamFetcher implements DataFetcher<InputStream> {
32-
33-
private static final String TAG = GlideStringStreamFetcher.class.getName();
34-
private final String url;
35-
36-
public GlideStringStreamFetcher(String url) {
37-
this.url = url;
38-
}
39-
40-
@Override
41-
public void loadData(@NonNull Priority priority, @NonNull DataCallback<? super InputStream> callback) {
42-
43-
GetMethod get = null;
24+
class GlideStringStreamFetcher(private val url: String?) : DataFetcher<InputStream> {
25+
override fun loadData(priority: Priority, callback: DataFetcher.DataCallback<in InputStream>) {
26+
var get: GetMethod? = null
4427
try {
45-
46-
OwnCloudAccount ownCloudAccount = UserAccountManagerImpl.fromContext(MainApp.getAppContext()).getCurrentOwnCloudAccount();
47-
OwnCloudClient client = OwnCloudClientManagerFactory.getDefaultSingleton().getClientFor(ownCloudAccount, MainApp.getAppContext());
48-
get = new GetMethod(url);
49-
get.setRequestHeader("Cookie", "nc_sameSiteCookielax=true;nc_sameSiteCookiestrict=true");
50-
get.setRequestHeader(RemoteOperation.OCS_API_HEADER, RemoteOperation.OCS_API_HEADER_VALUE);
51-
int status = client.executeMethod(get);
28+
val ownCloudAccount =
29+
UserAccountManagerImpl.fromContext(MainApp.getAppContext()).currentOwnCloudAccount
30+
val client = OwnCloudClientManagerFactory.getDefaultSingleton()
31+
.getClientFor(ownCloudAccount, MainApp.getAppContext())
32+
get = GetMethod(url)
33+
get.setRequestHeader("Cookie", "nc_sameSiteCookielax=true;nc_sameSiteCookiestrict=true")
34+
get.setRequestHeader(RemoteOperation.OCS_API_HEADER, RemoteOperation.OCS_API_HEADER_VALUE)
35+
val status = client.executeMethod(get)
5236
if (status == HttpStatus.SC_OK) {
53-
callback.onDataReady(get.getResponseBodyAsStream());
37+
callback.onDataReady(get.getResponseBodyAsStream())
5438
} else {
55-
client.exhaustResponse(get.getResponseBodyAsStream());
39+
client.exhaustResponse(get.getResponseBodyAsStream())
5640
}
57-
} catch (Exception e) {
58-
Log_OC.e(TAG, e.getMessage(), e);
41+
} catch (e: Exception) {
42+
Log_OC.e(TAG, e.message, e)
5943
} finally {
60-
if (get != null) {
61-
get.releaseConnection();
62-
}
44+
get?.releaseConnection()
6345
}
6446
}
6547

66-
public void cleanup() {
67-
Log_OC.i(TAG, "Cleanup");
48+
override fun cleanup() {
49+
Log_OC.i(TAG, "Cleanup")
50+
}
51+
52+
override fun cancel() {
53+
Log_OC.i(TAG, "Cancel")
6854
}
6955

70-
@Override
71-
public void cancel() {
72-
Log_OC.i(TAG, "Cancel");
56+
override fun getDataClass(): Class<InputStream> {
57+
return InputStream::class.java
7358
}
7459

75-
@NonNull
76-
@Override
77-
public Class<InputStream> getDataClass() {
78-
return InputStream.class;
60+
override fun getDataSource(): DataSource {
61+
return DataSource.REMOTE
7962
}
8063

81-
@NonNull
82-
@Override
83-
public DataSource getDataSource() {
84-
return DataSource.REMOTE;
64+
companion object {
65+
private val TAG: String = GlideStringStreamFetcher::class.java.getName()
8566
}
8667
}
Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,48 @@
11
/*
22
* Nextcloud - Android Client
33
*
4-
* SPDX-FileCopyrightText: 2025 Your Name <your@email.com>
4+
* SPDX-FileCopyrightText: 2025 Alper Ozturk <alper.ozturk@nextcloud.com>
55
* SPDX-License-Identifier: AGPL-3.0-or-later
66
*/
77

8-
package com.owncloud.android.utils.glide;
8+
package com.owncloud.android.utils.glide
99

10-
import android.content.Context;
11-
import android.graphics.drawable.PictureDrawable;
12-
13-
import com.bumptech.glide.Glide;
14-
import com.bumptech.glide.Registry;
15-
import com.bumptech.glide.annotation.GlideModule;
16-
import com.bumptech.glide.module.AppGlideModule;
17-
import com.caverock.androidsvg.SVG;
18-
import com.owncloud.android.utils.svg.SvgDecoder;
19-
import com.owncloud.android.utils.svg.SvgDrawableTranscoder;
20-
21-
import java.io.InputStream;
22-
23-
import androidx.annotation.NonNull;
10+
import android.content.Context
11+
import android.graphics.Bitmap
12+
import android.graphics.drawable.PictureDrawable
13+
import com.bumptech.glide.Glide
14+
import com.bumptech.glide.Registry
15+
import com.bumptech.glide.annotation.GlideModule
16+
import com.bumptech.glide.module.AppGlideModule
17+
import com.caverock.androidsvg.SVG
18+
import com.owncloud.android.utils.svg.SVGorImage
19+
import com.owncloud.android.utils.svg.SvgDecoder
20+
import com.owncloud.android.utils.svg.SvgDrawableTranscoder
21+
import com.owncloud.android.utils.svg.SvgOrImageBitmapTranscoder
22+
import java.io.InputStream
2423

2524
/**
2625
* Module for generating api.
2726
*/
2827
@GlideModule
29-
public final class NextcloudGlideModule extends AppGlideModule {
30-
@Override
31-
public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
32-
registry.prepend(String.class, InputStream.class, new StringModelLoaderFactory());
33-
registry.register(SVG.class, PictureDrawable.class, new SvgDrawableTranscoder())
34-
.append(InputStream.class, SVG.class, new SvgDecoder());
28+
class NextcloudGlideModule : AppGlideModule() {
29+
override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
30+
registry.prepend<String?, InputStream?>(String::class.java, InputStream::class.java, StringModelLoaderFactory())
31+
registry.register<SVGorImage?, Bitmap?>(
32+
SVGorImage::class.java, Bitmap::class.java, SvgOrImageBitmapTranscoder(
33+
SVG_SIZE, SVG_SIZE
34+
)
35+
)
36+
registry.register<SVG?, PictureDrawable?>(SVG::class.java, PictureDrawable::class.java, SvgDrawableTranscoder())
37+
.append<InputStream?, SVG?>(InputStream::class.java, SVG::class.java, SvgDecoder())
3538
}
3639

3740
// Disable manifest parsing to avoid adding similar modules twice.
38-
@Override
39-
public boolean isManifestParsingEnabled() {
40-
return false;
41+
override fun isManifestParsingEnabled(): Boolean {
42+
return false
43+
}
44+
45+
companion object {
46+
private const val SVG_SIZE = 512
4147
}
4248
}
Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,22 @@
11
/*
22
* Nextcloud - Android Client
33
*
4-
* SPDX-FileCopyrightText: 2025 Your Name <your@email.com>
4+
* SPDX-FileCopyrightText: 2025 Alper Ozturk <alper.ozturk@nextcloud.com>
55
* SPDX-License-Identifier: AGPL-3.0-or-later
66
*/
7+
package com.owncloud.android.utils.glide
78

8-
package com.owncloud.android.utils.glide;
9+
import com.bumptech.glide.load.model.ModelLoader
10+
import com.bumptech.glide.load.model.ModelLoaderFactory
11+
import com.bumptech.glide.load.model.MultiModelLoaderFactory
12+
import java.io.InputStream
913

10-
import com.bumptech.glide.load.model.ModelLoader;
11-
import com.bumptech.glide.load.model.ModelLoaderFactory;
12-
import com.bumptech.glide.load.model.MultiModelLoaderFactory;
13-
14-
import java.io.InputStream;
15-
16-
import androidx.annotation.NonNull;
17-
18-
public class StringModelLoaderFactory implements ModelLoaderFactory<String, InputStream> {
19-
20-
@NonNull
21-
@Override
22-
public ModelLoader<String, InputStream> build(@NonNull MultiModelLoaderFactory unused) {
23-
return new GlideStringStreamLoader();
14+
class StringModelLoaderFactory : ModelLoaderFactory<String?, InputStream?> {
15+
override fun build(unused: MultiModelLoaderFactory): ModelLoader<String?, InputStream?> {
16+
return GlideStringStreamLoader()
2417
}
2518

26-
@Override
27-
public void teardown() {
19+
override fun teardown() {
2820
// Do nothing.
2921
}
3022
}

app/src/main/java/com/owncloud/android/utils/svg/SvgOrImageBitmapTranscoder.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,4 @@ public Resource<Bitmap> transcode(@NonNull Resource<SVGorImage> toTranscode, @No
6262
return new SimpleResource<>(bitmap);
6363
}
6464
}
65-
66-
6765
}

0 commit comments

Comments
 (0)