Browse Source

merged avatar branch + circular avatar in drawer header

Andy Scherzinger 9 years ago
parent
commit
a0596e0ca1

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

@@ -32,6 +32,8 @@ import android.graphics.drawable.Drawable;
 import android.media.ThumbnailUtils;
 import android.net.Uri;
 import android.os.AsyncTask;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
 import android.widget.ImageView;
 
 import com.owncloud.android.MainApp;
@@ -399,7 +401,7 @@ public class ThumbnailsCacheManager {
                     thumbnail = doAvatarInBackground();
                 }
 
-            }catch(Throwable t){
+            } catch(Throwable t){
                 // the app should never break due to a problem with avatars
                 Log_OC.e(TAG, "Generation of avatar for " + mUsername + " failed", t);
                 if (t instanceof OutOfMemoryError) {
@@ -494,7 +496,7 @@ public class ThumbnailsCacheManager {
                                 mClient.exhaustResponse(get.getResponseBodyAsStream());
                             }
                         } catch (Exception e) {
-                            e.printStackTrace();
+                            Log_OC.e(TAG, "Error downloading avatar", e);
                         } finally {
                             if (get != null) {
                                 get.releaseConnection();

+ 67 - 17
src/com/owncloud/android/ui/activity/DrawerActivity.java

@@ -24,9 +24,12 @@ import android.accounts.AccountManager;
 import android.accounts.AccountManagerFuture;
 import android.content.Intent;
 import android.content.res.Configuration;
+import android.graphics.Bitmap;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.design.widget.NavigationView;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
 import android.support.v4.view.GravityCompat;
 import android.support.v4.widget.DrawerLayout;
 import android.support.v7.app.ActionBarDrawerToggle;
@@ -41,6 +44,7 @@ import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
 import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.datamodel.ThumbnailsCacheManager;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.TextDrawable;
 import com.owncloud.android.utils.BitmapUtils;
@@ -265,7 +269,7 @@ public abstract class DrawerActivity extends ToolbarActivity {
         Account[] accounts = AccountManager.get(this).getAccountsByType(MainApp.getAccountType());
         if (accounts.length > 0 && mNavigationView != null) {
             repopulateAccountList(accounts);
-            setUsernameInDrawer(AccountUtils.getCurrentOwnCloudAccount(this).name);
+            setAccountInDrawer(AccountUtils.getCurrentOwnCloudAccount(this));
         }
     }
 
@@ -333,27 +337,73 @@ public abstract class DrawerActivity extends ToolbarActivity {
      * sets the given account name in the drawer in case the drawer is available. The account name is shortened
      * beginning from the @-sign in the username.
      *
-     * @param accountName the account to be set in the drawer
+     * @param account the account to be set in the drawer
      */
-    protected void setUsernameInDrawer(String accountName) {
-        if (mDrawerLayout != null && accountName != null) {
+    protected void setAccountInDrawer(Account account) {
+        if (mDrawerLayout != null && account != null) {
             TextView username = (TextView) findNavigationViewChildById(R.id.drawer_username);
             TextView usernameFull = (TextView) findNavigationViewChildById(R.id.drawer_username_full);
-            usernameFull.setText(accountName);
-            int lastAtPos = accountName.lastIndexOf("@");
-            username.setText(accountName.substring(0, lastAtPos));
+            usernameFull.setText(account.name);
+            int lastAtPos = account.name.lastIndexOf("@");
+            username.setText(account.name.substring(0, lastAtPos));
 
             ImageView userIcon = (ImageView) findNavigationViewChildById(R.id.drawer_usericon);
-            try {
-                userIcon.setImageDrawable(
-                        createAvatar(
-                                accountName,
-                                getResources().getDimension(R.dimen.nav_drawer_header_avatar_radius)
-                        )
-                );
-            } catch (Exception e) {
-                Log_OC.e(TAG, "Error calculating RGB value for active account icon.", e);
-                userIcon.setImageResource(R.drawable.ic_account_circle);
+            setAvatarInDrawer(account);
+        }
+    }
+
+    /**
+     * sets the avatar of the current account in the drawer in case the drawer is available.
+     *
+     * @param account the account to be set in the drawer
+     */
+    private void setAvatarInDrawer(Account account) {
+        if (mDrawerLayout != null && account != null) {
+            ImageView userIcon = (ImageView) findNavigationViewChildById(R.id.drawer_usericon);
+            int lastAtPos = account.name.lastIndexOf("@");
+            String username = account.name.substring(0, lastAtPos);
+
+            // Thumbnail in Cache?
+            Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache("a_" + username);
+
+            if (thumbnail != null) {
+                RoundedBitmapDrawable roundedAvatar = RoundedBitmapDrawableFactory.create
+                        (MainApp.getAppContext().getResources(), thumbnail);
+                roundedAvatar.setCircular(true);
+                userIcon.setImageDrawable(roundedAvatar);
+            } else {
+                // generate new avatar
+                if (ThumbnailsCacheManager.cancelPotentialAvatarWork(username, userIcon)) {
+                    final ThumbnailsCacheManager.AvatarGenerationTask task =
+                            new ThumbnailsCacheManager.AvatarGenerationTask(
+                                    userIcon, getStorageManager(), account
+                            );
+                    if (thumbnail == null) {
+                        try {
+                            userIcon.setImageDrawable(
+                                    createAvatar(
+                                            account.name,
+                                            getResources().getDimension(R.dimen.nav_drawer_header_avatar_radius)
+                                    )
+                            );
+                        } catch (Exception e) {
+                            Log_OC.e(TAG, "Error calculating RGB value for active account icon.", e);
+                            userIcon.setImageResource(R.drawable.ic_account_circle);
+                        }
+                    } else {
+                        final ThumbnailsCacheManager.AsyncAvatarDrawable asyncDrawable =
+                                new ThumbnailsCacheManager.AsyncAvatarDrawable(
+                                        getResources(),
+                                        thumbnail,
+                                        task
+                                );
+                        RoundedBitmapDrawable roundedAvatar = RoundedBitmapDrawableFactory.create
+                                (MainApp.getAppContext().getResources(), asyncDrawable.getBitmap());
+                        roundedAvatar.setCircular(true);
+                        userIcon.setImageDrawable(roundedAvatar);
+                    }
+                    task.execute(username);
+                }
             }
         }
     }

+ 1 - 1
src/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -302,7 +302,7 @@ public class FileDisplayActivity extends HookActivity
             setFile(file);
 
             if (mAccountWasSet) {
-                setUsernameInDrawer(getAccount().name);
+                setAccountInDrawer(getAccount());
             }
 
             if (!stateWasRecovered) {

+ 1 - 1
src/com/owncloud/android/ui/activity/UploadListActivity.java

@@ -350,7 +350,7 @@ public class UploadListActivity extends FileActivity implements UploadListFragme
         super.onAccountSet(stateWasRecovered);
         getSupportActionBar().setTitle(getString(R.string.uploads_view_title));
         if (mAccountWasSet) {
-            setUsernameInDrawer(getAccount().name);
+            setAccountInDrawer(getAccount());
         }
     }
 

+ 5 - 5
src/com/owncloud/android/ui/adapter/ExpandableUploadListAdapter.java

@@ -390,7 +390,7 @@ public class ExpandableUploadListAdapter extends BaseExpandableListAdapter imple
             fakeFileToCheatThumbnailsCacheManagerInterface.setStoragePath(upload.getLocalPath());
             fakeFileToCheatThumbnailsCacheManagerInterface.setMimetype(upload.getMimeType());
 
-            boolean allowedToCreateNewThumbnail = (ThumbnailsCacheManager.cancelPotentialWork(
+            boolean allowedToCreateNewThumbnail = (ThumbnailsCacheManager.cancelPotentialThumbnailWork(
                     fakeFileToCheatThumbnailsCacheManagerInterface,
                     fileIcon)
             );
@@ -415,8 +415,8 @@ public class ExpandableUploadListAdapter extends BaseExpandableListAdapter imple
                         if (thumbnail == null) {
                             thumbnail = ThumbnailsCacheManager.mDefaultImg;
                         }
-                        final ThumbnailsCacheManager.AsyncDrawable asyncDrawable =
-                                new ThumbnailsCacheManager.AsyncDrawable(
+                        final ThumbnailsCacheManager.AsyncThumbnailDrawable asyncDrawable =
+                                new ThumbnailsCacheManager.AsyncThumbnailDrawable(
                                         mParentActivity.getResources(),
                                         thumbnail,
                                         task
@@ -447,8 +447,8 @@ public class ExpandableUploadListAdapter extends BaseExpandableListAdapter imple
                         if (thumbnail == null) {
                             thumbnail = ThumbnailsCacheManager.mDefaultImg;
                         }
-                        final ThumbnailsCacheManager.AsyncDrawable asyncDrawable =
-                                new ThumbnailsCacheManager.AsyncDrawable(
+                        final ThumbnailsCacheManager.AsyncThumbnailDrawable asyncDrawable =
+                                new ThumbnailsCacheManager.AsyncThumbnailDrawable(
                                         mParentActivity.getResources(),
                                         thumbnail,
                                         task

+ 3 - 3
src/com/owncloud/android/ui/adapter/UploaderAdapter.java

@@ -34,7 +34,7 @@ import com.owncloud.android.R;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.ThumbnailsCacheManager;
-import com.owncloud.android.datamodel.ThumbnailsCacheManager.AsyncDrawable;
+import com.owncloud.android.datamodel.ThumbnailsCacheManager.AsyncThumbnailDrawable;
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.MimetypeIconUtil;
 
@@ -100,14 +100,14 @@ public class UploaderAdapter extends SimpleAdapter {
                 fileIcon.setImageBitmap(thumbnail);
             } else {
                 // generate new Thumbnail
-                if (ThumbnailsCacheManager.cancelPotentialWork(file, fileIcon)) {
+                if (ThumbnailsCacheManager.cancelPotentialThumbnailWork(file, fileIcon)) {
                     final ThumbnailsCacheManager.ThumbnailGenerationTask task = 
                             new ThumbnailsCacheManager.ThumbnailGenerationTask(fileIcon, mStorageManager, 
                                     mAccount);
                     if (thumbnail == null) {
                         thumbnail = ThumbnailsCacheManager.mDefaultImg;
                     }
-                    final AsyncDrawable asyncDrawable = new AsyncDrawable(
+                    final AsyncThumbnailDrawable asyncDrawable = new AsyncThumbnailDrawable(
                             mContext.getResources(), 
                             thumbnail, 
                             task