Jelajahi Sumber

move avatar helper method to TextDrawable, define everything in dp to be independent

Andy Scherzinger 9 tahun lalu
induk
melakukan
ff75f71836

+ 1 - 1
res/values-sw360dp/dims.xml

@@ -21,5 +21,5 @@
   <dimen name="nav_drawer_header_height">164dp</dimen>
   <dimen name="nav_drawer_header_avatar">64dp</dimen>
   <!-- avatar radius needs to 1/2 of the avatar dp value -->
-  <dimen name="nav_drawer_header_avatar_radius">32px</dimen>
+  <dimen name="nav_drawer_header_avatar_radius">32dp</dimen>
 </resources>

+ 3 - 2
res/values/dims.xml

@@ -24,11 +24,12 @@
     <dimen name="nav_drawer_header_height">140dp</dimen>
     <dimen name="nav_drawer_header_avatar">56dp</dimen>
     <!-- avatar radius needs to 1/2 of the avatar dp value -->
-    <dimen name="nav_drawer_header_avatar_radius">28px</dimen>
+    <dimen name="nav_drawer_header_avatar_radius">28dp</dimen>
     <dimen name="nav_drawer_header_avatar_other_accounts_size">40dp</dimen>
-    <dimen name="nav_drawer_header_avatar_other_accounts_radius">20px</dimen>
+    <dimen name="nav_drawer_header_avatar_other_accounts_radius">20dp</dimen>
     <!-- margin must be nav_drawer_header_avatar_other_accounts_size+16dp -->
     <dimen name="nav_drawer_header_avatar_second_account_margin">56dp</dimen>
+    <dimen name="nav_drawer_menu_avatar_radius">16dp</dimen>
 
     <dimen name="file_icon_size">32dp</dimen>
     <dimen name="file_icon_size_grid">128dp</dimen>

+ 27 - 0
src/com/owncloud/android/ui/TextDrawable.java

@@ -26,6 +26,12 @@ import android.graphics.ColorFilter;
 import android.graphics.Paint;
 import android.graphics.PixelFormat;
 import android.graphics.drawable.Drawable;
+import android.support.annotation.NonNull;
+
+import com.owncloud.android.utils.BitmapUtils;
+
+import java.io.UnsupportedEncodingException;
+import java.security.NoSuchAlgorithmException;
 
 /**
  * A Drawable object that draws text (1 letter) on top of a circular/filled background.
@@ -111,4 +117,25 @@ public class TextDrawable extends Drawable {
     public int getOpacity() {
         return PixelFormat.TRANSLUCENT;
     }
+
+    /**
+     * creates an avatar in form of  a TextDrawable with the first letter of the account name in a circle with the
+     * given radius.
+     *
+     * @param accountName the account name
+     * @param radiusInDp  the circle's radius
+     * @return the avatar as a TextDrawable
+     * @throws UnsupportedEncodingException if the charset is not supported when calculating the color values
+     * @throws NoSuchAlgorithmException     if the specified algorithm is not available when calculating the color values
+     */
+    @NonNull
+    public static TextDrawable createAvatar(String accountName, float radiusInDp)
+            throws
+            UnsupportedEncodingException,
+            NoSuchAlgorithmException {
+        int[] rgb = BitmapUtils.calculateRGB(accountName);
+        TextDrawable avatar = new TextDrawable(
+                accountName.substring(0, 1).toUpperCase(), rgb[0], rgb[1], rgb[2], radiusInDp);
+        return avatar;
+    }
 }

+ 20 - 33
src/com/owncloud/android/ui/activity/DrawerActivity.java

@@ -27,14 +27,12 @@ import android.content.res.Configuration;
 import android.graphics.Bitmap;
 import android.os.Build;
 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;
-import android.util.TypedValue;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
@@ -48,10 +46,6 @@ 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;
-
-import java.io.UnsupportedEncodingException;
-import java.security.NoSuchAlgorithmException;
 
 /**
  * Base class to handle setup of the drawer implementation including user switching and avatar fetching and fallback
@@ -65,6 +59,11 @@ public abstract class DrawerActivity extends ToolbarActivity {
     private static final int MENU_ORDER_ACCOUNT = 1;
     private static final int MENU_ORDER_ACCOUNT_FUNCTION = 2;
 
+    /**
+     * menu account avatar radius.
+     */
+    private float mMenuAccountAvatarRadiusDimension;
+
     /**
      * current account avatar radius.
      */
@@ -373,7 +372,10 @@ public abstract class DrawerActivity extends ToolbarActivity {
                         Menu.NONE,
                         MENU_ORDER_ACCOUNT,
                         accounts[i].name)
-                        .setIcon(createAvatar(accounts[i].name, 16));
+                        .setIcon(TextDrawable.createAvatar(
+                                accounts[i].name,
+                                mMenuAccountAvatarRadiusDimension)
+                        );
             } catch (Exception e) {
                 Log_OC.e(TAG, "Error calculating RGB value for account menu item.", e);
                 mNavigationView.getMenu().add(
@@ -381,7 +383,7 @@ public abstract class DrawerActivity extends ToolbarActivity {
                         Menu.NONE,
                         MENU_ORDER_ACCOUNT,
                         accounts[i].name)
-                        .setIcon(R.drawable.ic_account_circle);
+                        .setIcon(R.drawable.ic_user);
             }
         }
 
@@ -468,11 +470,17 @@ public abstract class DrawerActivity extends ToolbarActivity {
                         try {
                             if (currentAccount) {
                                 userIcon.setImageDrawable(
-                                        createAvatar(account.name, mCurrentAccountAvatarRadiusDimension)
+                                        TextDrawable.createAvatar(
+                                                account.name,
+                                                mCurrentAccountAvatarRadiusDimension
+                                        )
                                 );
                             } else {
                                 userIcon.setImageDrawable(
-                                        createAvatar(account.name, mOtherAccountAvatarRadiusDimension)
+                                        TextDrawable.createAvatar(
+                                                account.name,
+                                                mOtherAccountAvatarRadiusDimension
+                                        )
                                 );
                             }
                         } catch (Exception e) {
@@ -497,29 +505,6 @@ public abstract class DrawerActivity extends ToolbarActivity {
         }
     }
 
-    /**
-     * creates an avatar in form of  a TextDrawable with the first letter of the account name in a circle with the
-     * given radius.
-     *
-     * @param accountName the account name
-     * @param radiusInDp  the circle's radius
-     * @return the avatar as a TextDrawable
-     * @throws UnsupportedEncodingException if the charset is not supported when calculating the color values
-     * @throws NoSuchAlgorithmException     if the specified algorithm is not available when calculating the color values
-     */
-    @NonNull
-    private TextDrawable createAvatar(String accountName, float radiusInDp) throws UnsupportedEncodingException,
-            NoSuchAlgorithmException {
-        int[] rgb = BitmapUtils.calculateRGB(accountName);
-        float radiusInPx = TypedValue.applyDimension(
-                TypedValue.COMPLEX_UNIT_DIP,
-                radiusInDp,
-                getResources().getDisplayMetrics());
-        TextDrawable avatar = new TextDrawable(
-                accountName.substring(0, 1).toUpperCase(), rgb[0], rgb[1], rgb[2], radiusInPx);
-        return avatar;
-    }
-
     /**
      * Toggle between standard menu and account list including saving the state.
      */
@@ -573,6 +558,8 @@ public abstract class DrawerActivity extends ToolbarActivity {
                 .getDimension(R.dimen.nav_drawer_header_avatar_radius);
         mOtherAccountAvatarRadiusDimension = getResources()
                 .getDimension(R.dimen.nav_drawer_header_avatar_other_accounts_radius);
+        mMenuAccountAvatarRadiusDimension = getResources()
+                .getDimension(R.dimen.nav_drawer_menu_avatar_radius);
     }
 
     @Override

+ 6 - 8
src/com/owncloud/android/ui/adapter/AccountListAdapter.java

@@ -30,13 +30,9 @@ import android.widget.TextView;
 
 import com.owncloud.android.R;
 import com.owncloud.android.lib.common.utils.Log_OC;
-import com.owncloud.android.lib.resources.shares.OCShare;
 import com.owncloud.android.ui.TextDrawable;
 import com.owncloud.android.ui.activity.ManageAccountsActivity;
-import com.owncloud.android.utils.BitmapUtils;
 
-import java.io.UnsupportedEncodingException;
-import java.security.NoSuchAlgorithmException;
 import java.util.List;
 
 /**
@@ -44,7 +40,7 @@ import java.util.List;
  */
 public class AccountListAdapter extends ArrayAdapter<AccountListItem> {
     private static final String TAG = AccountListAdapter.class.getSimpleName();
-
+    private float mAccountAvatarRadiusDimension;
     private final Context mContext;
     private List<AccountListItem> mValues;
     private AccountListAdapterListener mListener;
@@ -54,6 +50,7 @@ public class AccountListAdapter extends ArrayAdapter<AccountListItem> {
         this.mContext = context;
         this.mValues = values;
         this.mListener = (AccountListAdapterListener) context;
+        this.mAccountAvatarRadiusDimension = context.getResources().getDimension(R.dimen.nav_drawer_menu_avatar_radius);
     }
 
     public void setAccountList(List<AccountListItem> values) {
@@ -90,9 +87,10 @@ public class AccountListAdapter extends ArrayAdapter<AccountListItem> {
                 viewHolder.textViewItem.setTag(account.name);
 
                 try {
-                    int[] rgb = BitmapUtils.calculateRGB(account.name);
-                    TextDrawable icon = new TextDrawable(account.name.substring(0, 1).toUpperCase()
-                            , rgb[0], rgb[1], rgb[2]);
+                    TextDrawable icon = TextDrawable.createAvatar(
+                            account.name,
+                            mAccountAvatarRadiusDimension
+                    );
                     viewHolder.imageViewItem.setImageDrawable(icon);
                 } catch (Exception e) {
                     Log_OC.e(TAG, "Error calculating RGB value for account list item.", e);