فهرست منبع

Support overlay drawable icon for Dark mode

Signed-off-by: Alper Ozturk <alperozturk@lions-macbook.local>
Signed-off-by: alperozturk <alper_ozturk@proton.me>
Alper Ozturk 1 سال پیش
والد
کامیت
b0c584b9f2

+ 4 - 1
app/src/main/java/com/nextcloud/utils/ShortcutUtil.kt

@@ -34,6 +34,7 @@ import androidx.core.content.pm.ShortcutManagerCompat
 import androidx.core.graphics.drawable.IconCompat
 import androidx.core.graphics.drawable.toBitmap
 import com.nextcloud.client.account.User
+import com.nextcloud.client.preferences.DarkMode
 import com.owncloud.android.R
 import com.owncloud.android.datamodel.OCFile
 import com.owncloud.android.datamodel.SyncedFolderProvider
@@ -72,8 +73,10 @@ class ShortcutUtil @Inject constructor(private val mContext: Context) {
                 icon = IconCompat.createWithAdaptiveBitmap(thumbnail)
             } else if (file.isFolder) {
                 val isAutoUploadFolder = SyncedFolderProvider.isAutoUploadFolder(syncedFolderProvider, file, user)
+                val isDarkModeActive = syncedFolderProvider.preferences.darkThemeMode == DarkMode.DARK
+
                 val overlayIconId = file.getFileOverlayIconId(isAutoUploadFolder)
-                val drawable = MimeTypeUtil.getFileIcon(overlayIconId, mContext, viewThemeUtils)
+                val drawable = MimeTypeUtil.getFileIcon(isDarkModeActive, overlayIconId, mContext, viewThemeUtils)
                 val bitmapIcon = drawable.toBitmap()
                 icon = IconCompat.createWithBitmap(bitmapIcon)
             } else {

+ 4 - 0
app/src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.java

@@ -311,6 +311,10 @@ public class SyncedFolderProvider extends Observable {
         );
     }
 
+    public AppPreferences getPreferences() {
+        return preferences;
+    }
+
     /**
      * update given synced folder.
      *

+ 4 - 1
app/src/main/java/com/owncloud/android/ui/activity/EditorWebView.java

@@ -40,6 +40,7 @@ import android.widget.Toast;
 
 import com.google.android.material.snackbar.Snackbar;
 import com.nextcloud.client.account.User;
+import com.nextcloud.client.preferences.DarkMode;
 import com.nextcloud.java.util.Optional;
 import com.owncloud.android.R;
 import com.owncloud.android.databinding.RichdocumentsWebviewBinding;
@@ -222,8 +223,10 @@ public abstract class EditorWebView extends ExternalSiteWebView {
         OCFile file = getFile();
         if (file.isFolder()) {
             boolean isAutoUploadFolder = SyncedFolderProvider.isAutoUploadFolder(syncedFolderProvider, file, user);
+            boolean isDarkModeActive = syncedFolderProvider.getPreferences().getDarkThemeMode() == DarkMode.DARK;
+
             Integer overlayIconId = file.getFileOverlayIconId(isAutoUploadFolder);
-            LayerDrawable drawable = MimeTypeUtil.getFileIcon(overlayIconId, this, viewThemeUtils);
+            LayerDrawable drawable = MimeTypeUtil.getFileIcon(isDarkModeActive, overlayIconId, this, viewThemeUtils);
             binding.thumbnail.setImageDrawable(drawable);
         } else {
             if ((MimeTypeUtil.isImage(file) || MimeTypeUtil.isVideo(file)) && file.getRemoteId() != null) {

+ 4 - 1
app/src/main/java/com/owncloud/android/ui/activity/ShareActivity.java

@@ -27,6 +27,7 @@ import android.graphics.drawable.LayerDrawable;
 import android.os.Bundle;
 
 import com.nextcloud.client.account.User;
+import com.nextcloud.client.preferences.DarkMode;
 import com.nextcloud.java.util.Optional;
 import com.owncloud.android.R;
 import com.owncloud.android.databinding.ShareActivityBinding;
@@ -79,8 +80,10 @@ public class ShareActivity extends FileActivity {
         // Icon
         if (file.isFolder()) {
             boolean isAutoUploadFolder = SyncedFolderProvider.isAutoUploadFolder(syncedFolderProvider, file, optionalUser.get());
+            boolean isDarkModeActive = syncedFolderProvider.getPreferences().getDarkThemeMode() == DarkMode.DARK;
+
             Integer overlayIconId = file.getFileOverlayIconId(isAutoUploadFolder);
-            LayerDrawable drawable = MimeTypeUtil.getFileIcon(overlayIconId, this, viewThemeUtils);
+            LayerDrawable drawable = MimeTypeUtil.getFileIcon(isDarkModeActive, overlayIconId, this, viewThemeUtils);
             binding.shareFileIcon.setImageDrawable(drawable);
         } else {
             binding.shareFileIcon.setImageDrawable(MimeTypeUtil.getFileTypeIcon(file.getMimeType(),

+ 4 - 1
app/src/main/java/com/owncloud/android/ui/adapter/UploaderAdapter.java

@@ -32,6 +32,7 @@ import android.widget.SimpleAdapter;
 import android.widget.TextView;
 
 import com.nextcloud.client.account.User;
+import com.nextcloud.client.preferences.DarkMode;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
@@ -106,8 +107,10 @@ public class UploaderAdapter extends SimpleAdapter {
 
         if (file.isFolder()) {
             boolean isAutoUploadFolder = SyncedFolderProvider.isAutoUploadFolder(syncedFolderProvider, file, user);
+            boolean isDarkModeActive = syncedFolderProvider.getPreferences().getDarkThemeMode() == DarkMode.DARK;
+
             Integer overlayIconId = file.getFileOverlayIconId(isAutoUploadFolder);
-            final LayerDrawable icon = MimeTypeUtil.getFileIcon(overlayIconId, mContext, viewThemeUtils);
+            final LayerDrawable icon = MimeTypeUtil.getFileIcon(isDarkModeActive, overlayIconId, mContext, viewThemeUtils);
             fileIcon.setImageDrawable(icon);
         } else {
             // get Thumbnail if file is image

+ 4 - 1
app/src/main/java/com/owncloud/android/utils/DisplayUtils.java

@@ -67,6 +67,7 @@ import com.nextcloud.client.account.CurrentAccountProvider;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.network.ClientFactory;
 import com.nextcloud.client.preferences.AppPreferences;
+import com.nextcloud.client.preferences.DarkMode;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.ArbitraryDataProvider;
@@ -855,8 +856,10 @@ public final class DisplayUtils {
             stopShimmer(shimmerThumbnail, thumbnailView);
 
             boolean isAutoUploadFolder = SyncedFolderProvider.isAutoUploadFolder(syncedFolderProvider, file, user);
+            boolean isDarkModeActive = syncedFolderProvider.getPreferences().getDarkThemeMode() == DarkMode.DARK;
+
             Integer overlayIconId = file.getFileOverlayIconId(isAutoUploadFolder);
-            LayerDrawable fileIcon = MimeTypeUtil.getFileIcon(overlayIconId, context, viewThemeUtils);
+            LayerDrawable fileIcon = MimeTypeUtil.getFileIcon(isDarkModeActive, overlayIconId, context, viewThemeUtils);
             thumbnailView.setImageDrawable(fileIcon);
         } else {
             if (file.getRemoteId() != null && file.isPreviewAvailable()) {

+ 7 - 0
app/src/main/java/com/owncloud/android/utils/DrawableUtil.kt

@@ -3,9 +3,16 @@ package com.owncloud.android.utils
 import android.graphics.drawable.Drawable
 import android.graphics.drawable.LayerDrawable
 import android.view.Gravity
+import androidx.core.graphics.drawable.DrawableCompat
 
 class DrawableUtil {
 
+    fun changeColor(source: Drawable, color: Int): Drawable {
+        val drawable = DrawableCompat.wrap(source)
+        DrawableCompat.setTint(drawable, color)
+        return drawable
+    }
+
     fun addDrawableAsOverlay(backgroundDrawable: Drawable, overlayDrawable: Drawable, topMargin: Int = 3): LayerDrawable {
         val layerDrawable = LayerDrawable(arrayOf(backgroundDrawable, overlayDrawable))
         layerDrawable.setLayerGravity(1, Gravity.CENTER)

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

@@ -24,6 +24,7 @@ import android.content.Context;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.LayerDrawable;
 import android.net.Uri;
+import android.util.Log;
 import android.webkit.MimeTypeMap;
 
 import com.nextcloud.android.common.ui.theme.utils.ColorRole;
@@ -43,6 +44,7 @@ import java.util.Locale;
 import java.util.Map;
 
 import androidx.core.content.ContextCompat;
+import androidx.core.graphics.drawable.DrawableCompat;
 
 /**
  * <p>Helper class for detecting the right icon for a file or folder,
@@ -143,7 +145,7 @@ public final class MimeTypeUtil {
         return drawable;
     }
 
-    public static LayerDrawable getFileIcon(Integer overlayIconId, Context context, ViewThemeUtils viewThemeUtils) {
+    public static LayerDrawable getFileIcon(Boolean isDarkModeActive, Integer overlayIconId, Context context, ViewThemeUtils viewThemeUtils) {
         Drawable folderDrawable = getDefaultFolderIcon(context, viewThemeUtils);
         assert(folderDrawable != null);
 
@@ -153,15 +155,16 @@ public final class MimeTypeUtil {
             return folderLayerDrawable;
         }
 
+        DrawableUtil drawableUtil = new DrawableUtil();
+
         Drawable overlayDrawable = ContextCompat.getDrawable(context, overlayIconId);
+        assert(overlayDrawable != null);
 
-        if (overlayDrawable == null) {
-            return folderLayerDrawable;
+        if (isDarkModeActive) {
+            overlayDrawable = drawableUtil.changeColor(overlayDrawable, R.color.dark);
         }
 
-        DrawableUtil drawableUtil = new DrawableUtil();
-
-        return drawableUtil.addDrawableAsOverlay(folderDrawable, overlayDrawable, 6);
+        return drawableUtil.addDrawableAsOverlay(folderDrawable, overlayDrawable, 3);
     }
 
     /**