Browse Source

Implement icon loading

Mario Danic 8 năm trước cách đây
mục cha
commit
312c09b902

+ 39 - 1
src/main/java/com/owncloud/android/ui/adapter/NotificationListAdapter.java

@@ -20,17 +20,30 @@
 package com.owncloud.android.ui.adapter;
 
 import android.content.Context;
+import android.graphics.drawable.PictureDrawable;
+import android.net.Uri;
 import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ImageView;
 import android.widget.TextView;
 
+import com.bumptech.glide.GenericRequestBuilder;
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
+import com.bumptech.glide.load.model.StreamEncoder;
+import com.bumptech.glide.load.resource.file.FileToStreamDecoder;
+import com.caverock.androidsvg.SVG;
 import com.owncloud.android.R;
 import com.owncloud.android.lib.resources.notifications.models.Notification;
 import com.owncloud.android.utils.DisplayUtils;
+import com.owncloud.android.utils.svg.SvgDecoder;
+import com.owncloud.android.utils.svg.SvgDrawableTranscoder;
+import com.owncloud.android.utils.svg.SvgSoftwareLayerSetter;
 
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -66,7 +79,32 @@ public class NotificationListAdapter extends RecyclerView.Adapter<NotificationLi
         holder.message.setText(notification.getMessage());
 
         // Todo set proper action icon (to be clarified how to pick)
-        holder.activityIcon.setImageResource(R.drawable.ic_notification);
+        if (!TextUtils.isEmpty(notification.getIcon())) {
+            downloadIcon(notification.getIcon(), holder.activityIcon);
+        }
+
+    }
+
+    private void downloadIcon(String icon, ImageView itemViewType) {
+        GenericRequestBuilder<Uri, InputStream, SVG, PictureDrawable> requestBuilder = Glide.with(context)
+                .using(Glide.buildStreamModelLoader(Uri.class, context), InputStream.class)
+                .from(Uri.class)
+                .as(SVG.class)
+                .transcode(new SvgDrawableTranscoder(), PictureDrawable.class)
+                .sourceEncoder(new StreamEncoder())
+                .cacheDecoder(new FileToStreamDecoder<>(new SvgDecoder()))
+                .decoder(new SvgDecoder())
+                .placeholder(R.drawable.ic_notification)
+                .error(R.drawable.ic_notification)
+                .animate(android.R.anim.fade_in)
+                .listener(new SvgSoftwareLayerSetter<Uri>());
+
+
+        Uri uri = Uri.parse(icon);
+        requestBuilder
+                .diskCacheStrategy(DiskCacheStrategy.SOURCE)
+                .load(uri)
+                .into(itemViewType);
     }
 
     @Override