Browse Source

Merge pull request #6415 from nextcloud/ezaquarii/migrate-mimetypeutil-get-folder-type-icon-to-user-model

Migrate MimeTypeUtil.folderTypeIcon to user model
Tobias Kaminsky 4 years ago
parent
commit
6b431a388e

+ 17 - 6
src/main/java/com/owncloud/android/ui/activity/EditorWebView.java

@@ -27,6 +27,7 @@ import android.app.DownloadManager;
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
@@ -38,6 +39,8 @@ import android.widget.TextView;
 import android.widget.Toast;
 
 import com.google.android.material.snackbar.Snackbar;
+import com.nextcloud.client.account.User;
+import com.nextcloud.java.util.Optional;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.ThumbnailsCacheManager;
@@ -132,11 +135,16 @@ public abstract class EditorWebView extends ExternalSiteWebView {
             fileName = getFile().getFileName();
         }
 
-        initLoadingScreen();
+        Optional<User> user = getUser();
+        if (!user.isPresent()) {
+            finish();
+            return;
+        }
+        initLoadingScreen(user.get());
     }
 
-    protected void initLoadingScreen() {
-        setThumbnailView();
+    protected void initLoadingScreen(final User user) {
+        setThumbnailView(user);
         fileNameTextView.setText(fileName);
     }
 
@@ -155,7 +163,7 @@ public abstract class EditorWebView extends ExternalSiteWebView {
         super.onDestroy();
     }
 
-    protected void setThumbnailView() {
+    protected void setThumbnailView(final User user) {
         // Todo minimize: only icon by mimetype
         OCFile file = getFile();
         if (file.isFolder()) {
@@ -184,8 +192,11 @@ public abstract class EditorWebView extends ExternalSiteWebView {
                     thumbnailView.setBackgroundColor(getResources().getColor(R.color.bg_default));
                 }
             } else {
-                thumbnailView.setImageDrawable(MimeTypeUtil.getFileTypeIcon(file.getMimeType(), file.getFileName(),
-                                                                            getAccount(), this));
+                Drawable icon = MimeTypeUtil.getFileTypeIcon(file.getMimeType(),
+                                                             file.getFileName(),
+                                                             user,
+                                                             getApplicationContext());
+                thumbnailView.setImageDrawable(icon);
             }
         }
     }

+ 6 - 6
src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java

@@ -34,7 +34,6 @@ import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.content.res.ColorStateList;
 import android.content.res.Resources.NotFoundException;
 import android.graphics.Color;
 import android.graphics.PorterDuff;
@@ -756,11 +755,12 @@ public class ReceiveExternalFilesActivity extends FileActivity
                 }
 
                 UploaderAdapter sa = new UploaderAdapter(this,
-                        data,
-                        R.layout.uploader_list_item_layout,
-                        new String[]{"dirname"},
-                        new int[]{R.id.filename},
-                        getStorageManager(), getAccount());
+                                                         data,
+                                                         R.layout.uploader_list_item_layout,
+                                                         new String[]{"dirname"},
+                                                         new int[]{R.id.filename},
+                                                         getStorageManager(),
+                                                         getUser().get());
 
                 mListView.setAdapter(sa);
             }

+ 6 - 9
src/main/java/com/owncloud/android/ui/activity/ShareActivity.java

@@ -51,8 +51,6 @@ public class ShareActivity extends FileActivity {
     private static final String TAG = ShareActivity.class.getSimpleName();
 
     static final String TAG_SHARE_FRAGMENT = "SHARE_FRAGMENT";
-    private static final String TAG_SEARCH_FRAGMENT = "SEARCH_USER_AND_GROUPS_FRAGMENT";
-    private static final String TAG_EDIT_SHARE_FRAGMENT = "EDIT_SHARE_FRAGMENT";
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -62,6 +60,11 @@ public class ShareActivity extends FileActivity {
         setContentView(binding.getRoot());
 
         OCFile file = getFile();
+        Optional<User> optionalUser = getUser();
+        if (!optionalUser.isPresent()) {
+            finish();
+            return;
+        }
 
         // Icon
         if (file.isFolder()) {
@@ -74,7 +77,7 @@ public class ShareActivity extends FileActivity {
         } else {
             binding.shareFileIcon.setImageDrawable(MimeTypeUtil.getFileTypeIcon(file.getMimeType(),
                                                                                 file.getFileName(),
-                                                                                getAccount(),
+                                                                                optionalUser.get(),
                                                                                 this));
             if (MimeTypeUtil.isImage(file)) {
                 String remoteId = String.valueOf(file.getRemoteId());
@@ -94,12 +97,6 @@ public class ShareActivity extends FileActivity {
         // Size
         binding.shareFileSize.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));
 
-        Optional<User> optionalUser = getUser();
-        if (!optionalUser.isPresent()) {
-            finish();
-            return;
-        }
-
         if (savedInstanceState == null) {
             // Add Share fragment on first creation
             FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

+ 11 - 6
src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java

@@ -653,11 +653,16 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
                                                                                    asyncTasks,
                                                                                    gridView);
                             if (thumbnail == null) {
-                                thumbnail = BitmapUtils.drawableToBitmap(
-                                    MimeTypeUtil.getFileTypeIcon(file.getMimeType(),
-                                                                 file.getFileName(),
-                                                                 user.toPlatformAccount(),
-                                                                 context));
+                                Drawable drawable = MimeTypeUtil.getFileTypeIcon(file.getMimeType(),
+                                                                                 file.getFileName(),
+                                                                                 user,
+                                                                                 context);
+                                if (drawable == null) {
+                                    drawable = ResourcesCompat.getDrawable(context.getResources(),
+                                                                           R.drawable.file_image,
+                                                                           null);
+                                }
+                                thumbnail = BitmapUtils.drawableToBitmap(drawable);
                             }
                             final ThumbnailsCacheManager.AsyncThumbnailDrawable asyncDrawable =
                                 new ThumbnailsCacheManager.AsyncThumbnailDrawable(context.getResources(),
@@ -698,7 +703,7 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
             } else {
                 thumbnailView.setImageDrawable(MimeTypeUtil.getFileTypeIcon(file.getMimeType(),
                                                                             file.getFileName(),
-                                                                            user.toPlatformAccount(),
+                                                                            user,
                                                                             context));
             }
         }

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

@@ -119,7 +119,7 @@ public class TemplateAdapter extends RecyclerView.Adapter<TemplateAdapter.ViewHo
 
             Drawable placeholder = MimeTypeUtil.getFileTypeIcon(mimetype,
                                                                 template.getTitle(),
-                                                                currentAccountProvider.getUser().toPlatformAccount(),
+                                                                currentAccountProvider.getUser(),
                                                                 context);
 
             Glide.with(context).using(new CustomGlideStreamLoader(currentAccountProvider, clientFactory))

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

@@ -257,7 +257,7 @@ public class TrashbinListAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
                 }
             } else {
                 thumbnailView.setImageDrawable(MimeTypeUtil.getFileTypeIcon(file.getMimeType(), file.getFileName(),
-                                                                            user.toPlatformAccount(), context));
+                                                                            user, context));
             }
         }
     }

+ 19 - 10
src/main/java/com/owncloud/android/ui/adapter/UploaderAdapter.java

@@ -23,6 +23,7 @@ package com.owncloud.android.ui.adapter;
 import android.accounts.Account;
 import android.content.Context;
 import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -30,6 +31,7 @@ import android.widget.ImageView;
 import android.widget.SimpleAdapter;
 import android.widget.TextView;
 
+import com.nextcloud.client.account.User;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
@@ -45,15 +47,15 @@ import java.util.Map;
 public class UploaderAdapter extends SimpleAdapter {
 
     private Context mContext;
-    private Account mAccount;
+    private User user;
     private FileDataStorageManager mStorageManager;
     private LayoutInflater inflater;
 
     public UploaderAdapter(Context context,
                            List<? extends Map<String, ?>> data, int resource, String[] from,
-                           int[] to, FileDataStorageManager storageManager, Account account) {
+                           int[] to, FileDataStorageManager storageManager, User user) {
         super(context, data, resource, from, to);
-        mAccount = account;
+        this.user = user;
         mStorageManager = storageManager;
         mContext = context;
         inflater = (LayoutInflater) mContext
@@ -92,9 +94,14 @@ public class UploaderAdapter extends SimpleAdapter {
         }
 
         if (file.isFolder()) {
-            fileIcon.setImageDrawable(MimeTypeUtil.getFolderTypeIcon(file.isSharedWithMe() ||
-                            file.isSharedWithSharee(), file.isSharedViaLink(), file.isEncrypted(), mAccount,
-                    file.getMountType(), mContext));
+            final boolean isShared = file.isSharedWithMe() || file.isSharedWithSharee();
+            final Drawable icon = MimeTypeUtil.getFolderTypeIcon(isShared,
+                                                                 file.isSharedViaLink(),
+                                                                 file.isEncrypted(),
+                                                                 user,
+                                                                 file.getMountType(),
+                                                                 mContext);
+            fileIcon.setImageDrawable(icon);
         } else {
             // get Thumbnail if file is image
             if (MimeTypeUtil.isImage(file) && file.getRemoteId() != null) {
@@ -109,7 +116,7 @@ public class UploaderAdapter extends SimpleAdapter {
                     if (ThumbnailsCacheManager.cancelPotentialThumbnailWork(file, fileIcon)) {
                         final ThumbnailsCacheManager.ThumbnailGenerationTask task =
                                 new ThumbnailsCacheManager.ThumbnailGenerationTask(fileIcon, mStorageManager,
-                                        mAccount);
+                                        user.toPlatformAccount());
                         if (thumbnail == null) {
                             if (MimeTypeUtil.isVideo(file)) {
                                 thumbnail = ThumbnailsCacheManager.mDefaultVideo;
@@ -127,9 +134,11 @@ public class UploaderAdapter extends SimpleAdapter {
                     }
                 }
             } else {
-                fileIcon.setImageDrawable(
-                        MimeTypeUtil.getFileTypeIcon(file.getMimeType(), file.getFileName(), mAccount, mContext)
-                );
+                final Drawable icon = MimeTypeUtil.getFileTypeIcon(file.getMimeType(),
+                                                                   file.getFileName(),
+                                                                   user,
+                                                                   mContext);
+                fileIcon.setImageDrawable(icon);
             }
         }
 

+ 11 - 6
src/main/java/com/owncloud/android/utils/MimeTypeUtil.java

@@ -39,8 +39,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 
-import javax.annotation.Nullable;
-
+import androidx.annotation.Nullable;
 import androidx.core.content.ContextCompat;
 
 /**
@@ -163,11 +162,14 @@ public final class MimeTypeUtil {
      * @param isSharedViaUsers flag if the folder is shared via the users system
      * @param isSharedViaLink flag if the folder is publicly shared via link
      * @param isEncrypted flag if the folder is encrypted
-     * @param account account which color should be used
+     * @param user user which color should be used
      * @return Identifier of an image resource.
      */
-    public static Drawable getFolderTypeIcon(boolean isSharedViaUsers, boolean isSharedViaLink,
-                                             boolean isEncrypted, Account account, WebdavEntry.MountType mountType,
+    public static Drawable getFolderTypeIcon(boolean isSharedViaUsers,
+                                             boolean isSharedViaLink,
+                                             boolean isEncrypted,
+                                             @Nullable User user,
+                                             WebdavEntry.MountType mountType,
                                              Context context) {
         int drawableId;
 
@@ -185,7 +187,10 @@ public final class MimeTypeUtil {
             drawableId = R.drawable.folder;
         }
 
-        return ThemeUtils.tintDrawable(drawableId, ThemeUtils.primaryColor(account, true, context));
+        int color = ThemeUtils.primaryColor(user != null ? user.toPlatformAccount() : null,
+                                            true,
+                                            context);
+        return ThemeUtils.tintDrawable(drawableId, color);
     }
 
     public static Drawable getDefaultFolderIcon(Context context) {