Explorar o código

trying to first show old one, but asyncDrawable is not working

tobiasKaminsky %!s(int64=7) %!d(string=hai) anos
pai
achega
c4cee26b1f

+ 8 - 2
src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java

@@ -86,7 +86,7 @@ public class ThumbnailsCacheManager {
     private static final String TAG = ThumbnailsCacheManager.class.getSimpleName();
     private static final String PNG_MIMETYPE = "image/png";
     private static final String CACHE_FOLDER = "thumbnailCache";
-    private static final String AVATAR = "avatar";
+    public static final String AVATAR = "avatar";
     private static final String ETAG = "ETag";
 
     private static final Object mThumbnailsDiskCacheLock = new Object();
@@ -836,6 +836,12 @@ public class ThumbnailsCacheManager {
 
             final String imageKey = "a_" + username + "_" + eTag;
 
+            try {
+                Thread.sleep(3000);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+
             int px = getAvatarDimension();
 
             // Download avatar from server
@@ -1106,7 +1112,7 @@ public class ThumbnailsCacheManager {
     public static class AsyncAvatarDrawable extends BitmapDrawable {
         private final WeakReference<AvatarGenerationTask> avatarWorkerTaskReference;
 
-        public AsyncAvatarDrawable(Resources res, Bitmap bitmap, AvatarGenerationTask avatarWorkerTask) {
+        public AsyncAvatarDrawable(Resources res, Drawable bitmap, AvatarGenerationTask avatarWorkerTask) {
             super(res, bitmap);
             avatarWorkerTaskReference = new WeakReference<>(avatarWorkerTask);
         }

+ 2 - 2
src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java

@@ -756,8 +756,8 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
             View currentAccountView = findNavigationViewChildById(R.id.drawer_current_account);
             currentAccountView.setTag(account.name);
 
-            DisplayUtils.setAvatar(account, this,
-                    mCurrentAccountAvatarRadiusDimension, getResources(), getStorageManager(), currentAccountView);
+            DisplayUtils.setAvatar(account, this, mCurrentAccountAvatarRadiusDimension, getResources(),
+                    getStorageManager(), currentAccountView);
 
             // check and show quota info if available
             getAndDisplayUserQuota();

+ 3 - 2
src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java

@@ -262,8 +262,9 @@ public class UserInfoActivity extends FileActivity {
 
     private void populateUserInfoUi(UserInfo userInfo) {
         userName.setText(account.name);
-        DisplayUtils.setAvatar(account, UserInfoActivity.this,
-                mCurrentAccountAvatarRadiusDimension, getResources(), getStorageManager(), avatar);
+        avatar.setTag(account.name);
+        DisplayUtils.setAvatar(account, UserInfoActivity.this, mCurrentAccountAvatarRadiusDimension, getResources(),
+                getStorageManager(), avatar);
 
         int tint = ThemeUtils.primaryColor(account);
 

+ 4 - 2
src/main/java/com/owncloud/android/ui/adapter/AccountListAdapter.java

@@ -150,8 +150,10 @@ public class AccountListAdapter extends ArrayAdapter<AccountListItem> implements
 
     private void setAvatar(AccountViewHolderItem viewHolder, Account account) {
         try {
-            DisplayUtils.setAvatar(account, this, mAccountAvatarRadiusDimension,
-                    mContext.getResources(), mContext.getStorageManager(), viewHolder.imageViewItem);
+            View viewItem = viewHolder.imageViewItem;
+            viewItem.setTag(account.name);
+            DisplayUtils.setAvatar(account, this, mAccountAvatarRadiusDimension, mContext.getResources(),
+                    mContext.getStorageManager(), viewItem);
         } catch (Exception e) {
             Log_OC.e(TAG, "Error calculating RGB value for account list item.", e);
             // use user icon as a fallback

+ 24 - 5
src/main/java/com/owncloud/android/utils/DisplayUtils.java

@@ -30,7 +30,6 @@ import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources;
-import android.graphics.Bitmap;
 import android.graphics.Color;
 import android.graphics.Point;
 import android.graphics.drawable.Drawable;
@@ -60,12 +59,14 @@ import com.caverock.androidsvg.SVG;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
+import com.owncloud.android.datamodel.ArbitraryDataProvider;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.ThumbnailsCacheManager;
 import com.owncloud.android.lib.common.OwnCloudAccount;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.files.SearchOperation;
+import com.owncloud.android.ui.TextDrawable;
 import com.owncloud.android.ui.activity.FileDisplayActivity;
 import com.owncloud.android.ui.events.MenuItemClickEvent;
 import com.owncloud.android.ui.events.SearchEvent;
@@ -425,22 +426,40 @@ public class DisplayUtils {
      * @param resources      reference for density information
      * @param storageManager reference for caching purposes
      */
-    public static void setAvatar(Account account, AvatarGenerationListener listener, float avatarRadius, Resources resources,
-                                 FileDataStorageManager storageManager, Object callContext) {
+    public static void setAvatar(Account account, AvatarGenerationListener listener, float avatarRadius,
+                                 Resources resources, FileDataStorageManager storageManager, Object callContext) {
         if (account != null) {
             if (callContext instanceof View) {
                 ((View) callContext).setContentDescription(account.name);
             }
 
-            Bitmap thumbnail = null;
+            ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider(
+                    MainApp.getAppContext().getContentResolver());
 
+            String eTag = arbitraryDataProvider.getValue(account, ThumbnailsCacheManager.AVATAR);
+
+            // first show old one
+            Drawable avatar = BitmapUtils.bitmapToCircularBitmapDrawable(resources,
+                    ThumbnailsCacheManager.getBitmapFromDiskCache("a_" + account.name + "_" + eTag));
+
+            // if no one exists, show colored icon with initial char
+            if (avatar == null) {
+                try {
+                    avatar = TextDrawable.createAvatar(account.name, avatarRadius);
+                } catch (Exception e) {
+                    Log_OC.e(TAG, "Error calculating RGB value for active account icon.", e);
+                    avatar = resources.getDrawable(R.drawable.ic_account_circle);
+                }
+            }
+
+            // check for new avatar, eTag is compared, so only new one is downloaded
             if (ThumbnailsCacheManager.cancelPotentialAvatarWork(account.name, callContext)) {
                 final ThumbnailsCacheManager.AvatarGenerationTask task =
                         new ThumbnailsCacheManager.AvatarGenerationTask(listener, callContext, storageManager,
                                 account, resources, avatarRadius);
 
                 final ThumbnailsCacheManager.AsyncAvatarDrawable asyncDrawable =
-                        new ThumbnailsCacheManager.AsyncAvatarDrawable(resources, thumbnail, task);
+                        new ThumbnailsCacheManager.AsyncAvatarDrawable(resources, avatar, task);
                 listener.avatarGenerated(asyncDrawable, callContext);
                 task.execute(account.name);
             }