Просмотр исходного кода

Download contact image if url is given

Hari 7 лет назад
Родитель
Сommit
091c76c269

+ 16 - 0
src/main/java/com/owncloud/android/utils/DisplayUtils.java

@@ -53,6 +53,7 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy;
 import com.bumptech.glide.load.model.StreamEncoder;
 import com.bumptech.glide.load.resource.file.FileToStreamDecoder;
 import com.bumptech.glide.request.target.SimpleTarget;
+import com.bumptech.glide.request.target.Target;
 import com.caverock.androidsvg.SVG;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
@@ -505,6 +506,21 @@ public class DisplayUtils {
                 .into(imageView);
     }
 
+    public static Bitmap downloadImageSynchronous(Context context, String imageUrl) {
+        try {
+            return Glide.with(context)
+                    .load(imageUrl)
+                    .asBitmap()
+                    .diskCacheStrategy(DiskCacheStrategy.NONE)
+                    .skipMemoryCache(true)
+                    .into(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
+                    .get();
+        } catch (Exception e) {
+            Log_OC.e(TAG, "Could not download image " + imageUrl);
+            return null;
+        }
+    }
+
     public static void setupBottomBar(BottomNavigationView view, Resources resources, final Activity activity,
                                       int checkedMenuItem) {
 

+ 20 - 0
src/main/java/third_parties/ezvcard_android/ContactOperations.java

@@ -4,9 +4,13 @@ import android.content.ContentProviderOperation;
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.OperationApplicationException;
+import android.graphics.Bitmap;
 import android.os.RemoteException;
 import android.provider.ContactsContract;
 
+import com.owncloud.android.utils.DisplayUtils;
+
+import java.io.ByteArrayOutputStream;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -16,6 +20,7 @@ import java.util.List;
 import java.util.Map;
 
 import ezvcard.VCard;
+import ezvcard.parameter.ImageType;
 import ezvcard.property.Address;
 import ezvcard.property.Birthday;
 import ezvcard.property.Email;
@@ -511,6 +516,9 @@ public class ContactOperations {
 
     private void convertPhotos(List<NonEmptyContentValues> contentValues, VCard vcard) {
         for (Photo photo : vcard.getPhotos()) {
+            if (photo.getUrl() != null) {
+                downloadPhoto(photo);
+            }
             byte[] data = photo.getData();
 
             NonEmptyContentValues cv = new NonEmptyContentValues(ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
@@ -519,6 +527,18 @@ public class ContactOperations {
         }
     }
 
+    private void downloadPhoto(Photo photo) {
+        String url = photo.getUrl();
+        Bitmap bitmap = DisplayUtils.downloadImageSynchronous(context, url);
+        if (bitmap != null) {
+            ByteArrayOutputStream stream = new ByteArrayOutputStream();
+            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
+            byte[] bitmapdata = stream.toByteArray();
+            photo.setData(bitmapdata, ImageType.find(null, null,
+                    url.substring(url.lastIndexOf(".") + 1)));
+        }
+    }
+
     private void convertOrganization(List<NonEmptyContentValues> contentValues, VCard vcard) {
         NonEmptyContentValues cv = new NonEmptyContentValues(ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE);