Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Folders and Files tinting & filtering customizations #65

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,9 @@ object NextcloudExoPlayer {
.setMediaSourceFactory(mediaSourceFactory)
.setAudioAttributes(AudioAttributes.DEFAULT, true)
.setHandleAudioBecomingNoisy(true)
.setSeekForwardIncrementMs(FIVE_SECONDS_IN_MILLIS)
// NMC-3192 Fix
.setSeekBackIncrementMs(2 * FIVE_SECONDS_IN_MILLIS)
.setSeekForwardIncrementMs(2 * FIVE_SECONDS_IN_MILLIS)
.build()
}
}
8 changes: 6 additions & 2 deletions app/src/main/java/com/nextcloud/utils/ShortcutUtil.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
import androidx.core.content.ContextCompat
import androidx.core.content.pm.ShortcutInfoCompat
import androidx.core.content.pm.ShortcutManagerCompat
import androidx.core.graphics.drawable.IconCompat
Expand Down Expand Up @@ -59,10 +60,13 @@ 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.isDarkModeEnabled

val overlayIconId = file.getFileOverlayIconId(isAutoUploadFolder)
val drawable = MimeTypeUtil.getFileIcon(isDarkModeActive, overlayIconId, mContext, viewThemeUtils)
// NMC Customization: No overlay icon will be used. Directly using folder icons
val drawable = ContextCompat.getDrawable(mContext, overlayIconId) ?: MimeTypeUtil.getDefaultFolderIcon(
mContext,
viewThemeUtils
)
val bitmapIcon = drawable.toBitmap()
icon = IconCompat.createWithBitmap(bitmapIcon)
} else {
Expand Down
21 changes: 21 additions & 0 deletions app/src/main/java/com/nmc/android/utils/KeyboardUtils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.nmc.android.utils;

import android.app.Activity;
import android.content.Context;
import android.view.View;
import android.view.inputmethod.InputMethodManager;

public class KeyboardUtils {

public static void showSoftKeyboard(Context context, View view) {
view.requestFocus();
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
}

public static void hideKeyboardFrom(Context context, View view) {
view.clearFocus();
InputMethodManager imm = (InputMethodManager) context.getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -351,5 +351,7 @@ class MediaControlView(context: Context, attrs: AttributeSet?) :
companion object {
private val TAG = MediaControlView::class.java.getSimpleName()
private const val SHOW_PROGRESS = 1
// NMC-3192 Fix
private const val FIVE_SECONDS_IN_MILLIS = 5000
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@

import javax.inject.Inject;

import androidx.core.content.ContextCompat;

public abstract class EditorWebView extends ExternalSiteWebView {
public static final int REQUEST_LOCAL_FILE = 101;
public ValueCallback<Uri[]> uploadMessage;
Expand Down Expand Up @@ -250,8 +252,8 @@ protected void setThumbnailView(final User user) {
boolean isAutoUploadFolder = SyncedFolderProvider.isAutoUploadFolder(syncedFolderProvider, file, user);

Integer overlayIconId = file.getFileOverlayIconId(isAutoUploadFolder);
LayerDrawable drawable = MimeTypeUtil.getFileIcon(preferences.isDarkModeEnabled(), overlayIconId, this, viewThemeUtils);
binding.thumbnail.setImageDrawable(drawable);
// NMC Customization: No overlay icon will be used. Directly using folder icons
binding.thumbnail.setImageDrawable(ContextCompat.getDrawable(this, overlayIconId));
} else {
if ((MimeTypeUtil.isImage(file) || MimeTypeUtil.isVideo(file)) && file.getRemoteId() != null) {
// Thumbnail in cache?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@
import com.owncloud.android.utils.MimeTypeUtil;
import com.owncloud.android.utils.PermissionUtil;
import com.owncloud.android.utils.PushUtils;
import com.nmc.android.utils.KeyboardUtils;
import com.owncloud.android.utils.StringUtils;
import com.owncloud.android.utils.theme.CapabilityUtils;

Expand Down Expand Up @@ -1080,6 +1081,8 @@ private void resetSearchAction() {
private void popBack() {
binding.fabMain.setImageResource(R.drawable.ic_plus);
resetScrolling(true);
// hide the keyboard on back press if showing
KeyboardUtils.hideKeyboardFrom(this, binding.getRoot());
showSortListGroup(false);
super.onBackPressed();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@
import java.util.Calendar;
import java.util.List;
import java.util.Stack;
import java.util.stream.Collectors;

import javax.inject.Inject;

Expand Down Expand Up @@ -752,6 +753,10 @@ private void populateDirectoryList() {
if (mFile != null) {
List<OCFile> files = getStorageManager().getFolderContent(mFile, false);

// NMC-2893 Task
// Filtering and showing only files which are folder
files = files.stream().filter(OCFile::isFolder).collect(Collectors.toList());

if (files.isEmpty()) {
setMessageForEmptyList(R.string.file_list_empty_headline, R.string.empty,
R.drawable.uploads);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@

import javax.inject.Inject;

import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;

Expand Down Expand Up @@ -73,8 +74,8 @@ protected void onCreate(Bundle savedInstanceState) {
boolean isAutoUploadFolder = SyncedFolderProvider.isAutoUploadFolder(syncedFolderProvider, file, optionalUser.get());

Integer overlayIconId = file.getFileOverlayIconId(isAutoUploadFolder);
LayerDrawable drawable = MimeTypeUtil.getFileIcon(preferences.isDarkModeEnabled(), overlayIconId, this, viewThemeUtils);
binding.shareFileIcon.setImageDrawable(drawable);
// NMC Customization: No overlay icon will be used. Directly using folder icons
binding.shareFileIcon.setImageDrawable(ContextCompat.getDrawable(this, overlayIconId));
} else {
binding.shareFileIcon.setImageDrawable(MimeTypeUtil.getFileTypeIcon(file.getMimeType(),
file.getFileName(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -663,8 +663,8 @@ private void setColorFilterForOfflineOperations(ListViewHolder holder, OCFile fi
if (file.isOfflineOperation()) {
holder.getThumbnail().setColorFilter(Color.GRAY, PorterDuff.Mode.SRC_IN);
} else {
Drawable drawable = viewThemeUtils.platform.tintDrawable(MainApp.getAppContext(), holder.getThumbnail().getDrawable(), ColorRole.PRIMARY);
holder.getThumbnail().setImageDrawable(drawable);
// NMC Customization: no need to apply tinting to folders
holder.getThumbnail().setColorFilter(null);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.nextcloud.client.account.User
import com.owncloud.android.databinding.UploaderListItemLayoutBinding
Expand Down Expand Up @@ -113,10 +114,9 @@ class ReceiveExternalFilesAdapter(

private fun setupThumbnailForFolder(thumbnailImageView: ImageView, file: OCFile) {
val isAutoUploadFolder = SyncedFolderProvider.isAutoUploadFolder(syncedFolderProvider, file, user)
val isDarkModeActive = syncedFolderProvider.preferences.isDarkModeEnabled
val overlayIconId = file.getFileOverlayIconId(isAutoUploadFolder)
val icon = MimeTypeUtil.getFileIcon(isDarkModeActive, overlayIconId, context, viewThemeUtils)
thumbnailImageView.setImageDrawable(icon)
// NMC Customization: No overlay icon will be used. Directly using folder icons
thumbnailImageView.setImageDrawable(ContextCompat.getDrawable(context, overlayIconId))
}

@Suppress("NestedBlockDepth")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import com.nextcloud.client.account.UserAccountManager
import com.nextcloud.client.core.AsyncRunner
import com.nextcloud.client.di.Injectable
import com.nextcloud.client.di.ViewModelFactory
import com.nmc.android.utils.KeyboardUtils
import com.nextcloud.client.network.ClientFactory
import com.owncloud.android.R
import com.owncloud.android.databinding.ListFragmentBinding
Expand Down Expand Up @@ -238,6 +239,8 @@ class UnifiedSearchFragment :
private fun showFile(file: OCFile, showFileActions: Boolean) {
activity.let {
if (activity is FileDisplayActivity) {
// NMC: hide keyboard when user taps on any file to view
KeyboardUtils.hideKeyboardFrom(requireContext(), binding.root)
val fda = activity as FileDisplayActivity
fda.file = file

Expand Down Expand Up @@ -298,6 +301,7 @@ class UnifiedSearchFragment :
}

override fun onQueryTextSubmit(query: String): Boolean {
KeyboardUtils.hideKeyboardFrom(requireContext(), binding.root)
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tobiasKaminsky This logic will hide the keyboard every time whenever user do search.
Let me know if this also has to be up-streamed.

vm.setQuery(query)
vm.initialQuery()
return true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
import android.graphics.Point;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.net.Uri;
import android.os.AsyncTask;
import android.text.Spannable;
Expand Down Expand Up @@ -105,6 +104,7 @@
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.appcompat.widget.AppCompatDrawableManager;
import androidx.core.content.ContextCompat;
import androidx.core.content.res.ResourcesCompat;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
Expand Down Expand Up @@ -865,11 +865,9 @@ public static void setThumbnail(OCFile file,
stopShimmer(shimmerThumbnail, thumbnailView);

boolean isAutoUploadFolder = SyncedFolderProvider.isAutoUploadFolder(syncedFolderProvider, file, user);
boolean isDarkModeActive = preferences.isDarkModeEnabled();

Integer overlayIconId = file.getFileOverlayIconId(isAutoUploadFolder);
LayerDrawable fileIcon = MimeTypeUtil.getFileIcon(isDarkModeActive, overlayIconId, context, viewThemeUtils);
thumbnailView.setImageDrawable(fileIcon);
// NMC Customization: No overlay icon will be used. Directly using folder icons
thumbnailView.setImageDrawable(ContextCompat.getDrawable(context, overlayIconId));
} else {
if (file.getRemoteId() != null && file.isPreviewAvailable()) {
// Thumbnail in cache?
Expand Down
21 changes: 6 additions & 15 deletions app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import android.net.Uri;
import android.webkit.MimeTypeMap;

import com.nextcloud.android.common.ui.theme.utils.ColorRole;
import com.owncloud.android.R;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.lib.resources.files.model.ServerFileInterface;
Expand Down Expand Up @@ -94,13 +93,8 @@ public static Drawable getFileTypeIcon(String mimetype,
ViewThemeUtils viewThemeUtils) {
if (context != null) {
int iconId = MimeTypeUtil.getFileTypeIconId(mimetype, filename);
Drawable icon = ContextCompat.getDrawable(context, iconId);

if (R.drawable.file_zip == iconId) {
viewThemeUtils.platform.tintPrimaryDrawable(context, icon);
}

return icon;
//NMC Customization
return ContextCompat.getDrawable(context, iconId);
} else {
return null;
}
Expand All @@ -114,11 +108,6 @@ public static Drawable getIcon(String localPath, Context context, ViewThemeUtils
int iconId = determineIconIdByMimeTypeList(possibleMimeTypes);

Drawable result = ContextCompat.getDrawable(context, iconId);
if (result == null) return null;

if (R.drawable.file_zip == iconId) {
viewThemeUtils.platform.tintDrawable(context, result, ColorRole.PRIMARY);
}

return result;
}
Expand All @@ -145,11 +134,13 @@ public static Drawable getDefaultFolderIcon(Context context, ViewThemeUtils view
Drawable drawable = ContextCompat.getDrawable(context, R.drawable.folder);
assert(drawable != null);

viewThemeUtils.platform.tintDrawable(context, drawable, ColorRole.PRIMARY);
return drawable;
}

public static LayerDrawable getFileIcon(Boolean isDarkModeActive, Integer overlayIconId, Context context, ViewThemeUtils viewThemeUtils) {
// NMC Note: This funtion won't be used in NMC as we are using different folder icons with inbuilt overlay. So this function is of no use for us.
// changed access to PRIVATE, in case if NC will use this function in more areas then we will get compile error which can be fixed by us
// so that UI won't be impacted.
private static LayerDrawable getFileIcon(Boolean isDarkModeActive, Integer overlayIconId, Context context, ViewThemeUtils viewThemeUtils) {
Drawable folderDrawable = getDefaultFolderIcon(context, viewThemeUtils);
assert(folderDrawable != null);

Expand Down