|
@@ -29,41 +29,23 @@ import android.annotation.TargetApi;
|
|
|
import android.app.Activity;
|
|
|
import android.content.Context;
|
|
|
import android.content.Intent;
|
|
|
-import android.content.res.ColorStateList;
|
|
|
import android.content.res.Resources;
|
|
|
import android.graphics.Bitmap;
|
|
|
import android.graphics.Color;
|
|
|
import android.graphics.Point;
|
|
|
-import android.graphics.PorterDuff;
|
|
|
import android.graphics.drawable.Drawable;
|
|
|
import android.graphics.drawable.PictureDrawable;
|
|
|
import android.net.Uri;
|
|
|
import android.os.Build;
|
|
|
-import android.support.annotation.ColorInt;
|
|
|
-import android.support.annotation.DrawableRes;
|
|
|
import android.support.annotation.NonNull;
|
|
|
import android.support.design.widget.BottomNavigationView;
|
|
|
-import android.support.design.widget.Snackbar;
|
|
|
-import android.support.v4.app.FragmentActivity;
|
|
|
-import android.support.v4.content.ContextCompat;
|
|
|
-import android.support.v4.content.res.ResourcesCompat;
|
|
|
-import android.support.v4.graphics.ColorUtils;
|
|
|
-import android.support.v4.graphics.drawable.DrawableCompat;
|
|
|
-import android.support.v7.app.ActionBar;
|
|
|
-import android.support.v7.widget.AppCompatCheckBox;
|
|
|
-import android.support.v7.widget.SwitchCompat;
|
|
|
-import android.text.Html;
|
|
|
import android.text.Spannable;
|
|
|
import android.text.SpannableStringBuilder;
|
|
|
-import android.text.Spanned;
|
|
|
import android.text.format.DateUtils;
|
|
|
import android.text.style.StyleSpan;
|
|
|
import android.view.Menu;
|
|
|
import android.view.MenuItem;
|
|
|
import android.view.View;
|
|
|
-import android.widget.ImageButton;
|
|
|
-import android.widget.ProgressBar;
|
|
|
-import android.widget.SeekBar;
|
|
|
|
|
|
import com.bumptech.glide.GenericRequestBuilder;
|
|
|
import com.bumptech.glide.Glide;
|
|
@@ -81,10 +63,8 @@ import com.owncloud.android.datamodel.ThumbnailsCacheManager;
|
|
|
import com.owncloud.android.lib.common.OwnCloudAccount;
|
|
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
|
|
import com.owncloud.android.lib.resources.files.SearchOperation;
|
|
|
-import com.owncloud.android.lib.resources.status.OCCapability;
|
|
|
import com.owncloud.android.ui.TextDrawable;
|
|
|
import com.owncloud.android.ui.activity.FileDisplayActivity;
|
|
|
-import com.owncloud.android.ui.activity.ToolbarActivity;
|
|
|
import com.owncloud.android.ui.events.MenuItemClickEvent;
|
|
|
import com.owncloud.android.ui.events.SearchEvent;
|
|
|
import com.owncloud.android.ui.fragment.OCFileListFragment;
|
|
@@ -332,8 +312,8 @@ public class DisplayUtils {
|
|
|
*/
|
|
|
public static int getRelativeInfoColor(Context context, int relative) {
|
|
|
if (relative < RELATIVE_THRESHOLD_WARNING) {
|
|
|
- if (DisplayUtils.colorToHexString(DisplayUtils.primaryColor()).equalsIgnoreCase(
|
|
|
- DisplayUtils.colorToHexString(context.getResources().getColor(R.color.primary)))) {
|
|
|
+ if (ThemeUtils.colorToHexString(ThemeUtils.primaryColor()).equalsIgnoreCase(
|
|
|
+ ThemeUtils.colorToHexString(context.getResources().getColor(R.color.primary)))) {
|
|
|
return context.getResources().getColor(R.color.infolevel_info);
|
|
|
} else {
|
|
|
return Color.GRAY;
|
|
@@ -401,81 +381,6 @@ public class DisplayUtils {
|
|
|
return size;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * sets the coloring of the given progress bar to color_accent.
|
|
|
- *
|
|
|
- * @param progressBar the progress bar to be colored
|
|
|
- */
|
|
|
- public static void colorPreLollipopHorizontalProgressBar(ProgressBar progressBar) {
|
|
|
- if (progressBar != null && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
|
|
|
- colorHorizontalProgressBar(progressBar, DisplayUtils.primaryAccentColor());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * sets the tinting of the given ImageButton's icon to color_accent.
|
|
|
- *
|
|
|
- * @param imageButton the image button who's icon should be colored
|
|
|
- */
|
|
|
- public static void colorImageButton(ImageButton imageButton, @ColorInt int color) {
|
|
|
- if (imageButton != null) {
|
|
|
- imageButton.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * sets the coloring of the given progress bar to color_accent.
|
|
|
- *
|
|
|
- * @param progressBar the progress bar to be colored
|
|
|
- * @param color the color to be used
|
|
|
- */
|
|
|
- public static void colorHorizontalProgressBar(ProgressBar progressBar, @ColorInt int color) {
|
|
|
- if (progressBar != null) {
|
|
|
- progressBar.getIndeterminateDrawable().setColorFilter(color, PorterDuff.Mode.SRC_IN);
|
|
|
- progressBar.getProgressDrawable().setColorFilter(color, PorterDuff.Mode.SRC_IN);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * sets the coloring of the given seek bar to color_accent.
|
|
|
- *
|
|
|
- * @param seekBar the seek bar to be colored
|
|
|
- */
|
|
|
- public static void colorPreLollipopHorizontalSeekBar(SeekBar seekBar) {
|
|
|
- if (seekBar != null && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
|
|
|
- colorPreLollipopHorizontalProgressBar(seekBar);
|
|
|
-
|
|
|
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
|
|
|
- int color = DisplayUtils.primaryAccentColor();
|
|
|
- seekBar.getThumb().setColorFilter(color, PorterDuff.Mode.SRC_IN);
|
|
|
- seekBar.getThumb().setColorFilter(color, PorterDuff.Mode.SRC_IN);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * set the Nextcloud standard colors for the snackbar.
|
|
|
- *
|
|
|
- * @param context the context relevant for setting the color according to the context's theme
|
|
|
- * @param snackbar the snackbar to be colored
|
|
|
- */
|
|
|
- public static void colorSnackbar(Context context, Snackbar snackbar) {
|
|
|
- // Changing action button text color
|
|
|
- snackbar.setActionTextColor(ContextCompat.getColor(context, R.color.white));
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Sets the color of the status bar to {@code color} on devices with OS version lollipop or higher.
|
|
|
- *
|
|
|
- * @param fragmentActivity fragment activity
|
|
|
- * @param color the color
|
|
|
- */
|
|
|
- public static void colorStatusBar(FragmentActivity fragmentActivity, @ColorInt int color) {
|
|
|
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
|
|
- fragmentActivity.getWindow().setStatusBarColor(color);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* styling of given spanText within a given text.
|
|
|
*
|
|
@@ -491,18 +396,6 @@ public class DisplayUtils {
|
|
|
return sb;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * Sets the color of the progressbar to {@code color} within the given toolbar.
|
|
|
- *
|
|
|
- * @param activity the toolbar activity instance
|
|
|
- * @param progressBarColor the color to be used for the toolbar's progress bar
|
|
|
- */
|
|
|
- public static void colorToolbarProgressBar(FragmentActivity activity, int progressBarColor) {
|
|
|
- if (activity instanceof ToolbarActivity) {
|
|
|
- ((ToolbarActivity) activity).setProgressBarBackgroundColor(progressBarColor);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
public interface AvatarGenerationListener {
|
|
|
void avatarGenerated(Drawable avatarDrawable, Object callContext);
|
|
|
|
|
@@ -702,183 +595,4 @@ public class DisplayUtils {
|
|
|
}
|
|
|
return text.toString();
|
|
|
}
|
|
|
-
|
|
|
- private static OCCapability getCapability() {
|
|
|
- Account account = AccountUtils.getCurrentOwnCloudAccount(MainApp.getAppContext());
|
|
|
-
|
|
|
- if (account != null) {
|
|
|
- Context context = MainApp.getAppContext();
|
|
|
-
|
|
|
- FileDataStorageManager storageManager = new FileDataStorageManager(account, context.getContentResolver());
|
|
|
- return storageManager.getCapability(account.name);
|
|
|
- } else {
|
|
|
- return new OCCapability();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public static void tintCheckbox(AppCompatCheckBox checkBox, int color) {
|
|
|
- checkBox.setSupportButtonTintList(new ColorStateList(
|
|
|
- new int[][]{
|
|
|
- new int[]{-android.R.attr.state_checked},
|
|
|
- new int[]{android.R.attr.state_checked},
|
|
|
- },
|
|
|
- new int[]{
|
|
|
- Color.GRAY,
|
|
|
- color
|
|
|
- }
|
|
|
- ));
|
|
|
- }
|
|
|
-
|
|
|
- public static void tintSwitch(SwitchCompat switchView, int color) {
|
|
|
- tintSwitch(switchView, color, false);
|
|
|
- }
|
|
|
-
|
|
|
- public static void tintSwitch(SwitchCompat switchView, int color, boolean colorText) {
|
|
|
- if (colorText) {
|
|
|
- switchView.setTextColor(color);
|
|
|
- }
|
|
|
-
|
|
|
- int trackColor = Color.argb(77, Color.red(color), Color.green(color), Color.blue(color));
|
|
|
-
|
|
|
- // setting the thumb color
|
|
|
- DrawableCompat.setTintList(switchView.getThumbDrawable(), new ColorStateList(
|
|
|
- new int[][]{new int[]{android.R.attr.state_checked}, new int[]{}},
|
|
|
- new int[]{color, Color.WHITE}));
|
|
|
-
|
|
|
- // setting the track color
|
|
|
- DrawableCompat.setTintList(switchView.getTrackDrawable(), new ColorStateList(
|
|
|
- new int[][]{new int[]{android.R.attr.state_checked}, new int[]{}},
|
|
|
- new int[]{trackColor, Color.parseColor("#4D000000")}));
|
|
|
- }
|
|
|
-
|
|
|
- public static Drawable tintDrawable(@DrawableRes int id, int color) {
|
|
|
- Drawable drawable = ResourcesCompat.getDrawable(MainApp.getAppContext().getResources(), id, null);
|
|
|
-
|
|
|
- return tintDrawable(drawable, color);
|
|
|
- }
|
|
|
-
|
|
|
- public static Drawable tintDrawable(Drawable drawable, int color) {
|
|
|
- Drawable wrap = DrawableCompat.wrap(drawable);
|
|
|
- wrap.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
|
|
|
-
|
|
|
- return wrap;
|
|
|
- }
|
|
|
-
|
|
|
- public static String getDefaultDisplayNameForRootFolder() {
|
|
|
- OCCapability capability = getCapability();
|
|
|
-
|
|
|
- if (capability.getServerSlogan() == null || capability.getServerSlogan().isEmpty()) {
|
|
|
- return MainApp.getAppContext().getResources().getString(R.string.default_display_name_for_root_folder);
|
|
|
- } else {
|
|
|
- return capability.getServerSlogan();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public static int adjustLightness(float lightnessDelta, int color) {
|
|
|
- float[] hsl = new float[3];
|
|
|
- ColorUtils.RGBToHSL(Color.red(color), Color.green(color), Color.blue(color), hsl);
|
|
|
-
|
|
|
- hsl[2] += lightnessDelta;
|
|
|
-
|
|
|
- return ColorUtils.HSLToColor(hsl);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @return int font color to use
|
|
|
- * adapted from https://github.com/nextcloud/server/blob/master/apps/theming/lib/Util.php#L90-L102
|
|
|
- */
|
|
|
- public static int fontColor() {
|
|
|
- if (darkTheme()) {
|
|
|
- return Color.WHITE;
|
|
|
- } else {
|
|
|
- return Color.BLACK;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Tests if dark color is set
|
|
|
- * @return true if dark theme -> e.g.use light font color, darker accent color
|
|
|
- */
|
|
|
- public static boolean darkTheme() {
|
|
|
- int primaryColor = primaryColor();
|
|
|
-
|
|
|
- int red = Color.red(primaryColor);
|
|
|
- int green = Color.green(primaryColor);
|
|
|
- int blue = Color.blue(primaryColor);
|
|
|
-
|
|
|
- return ((0.299 * red + 0.587 * green + 0.114 * blue) / 255) <= 0.5;
|
|
|
- }
|
|
|
-
|
|
|
- public static String colorToHexString(int color) {
|
|
|
- return String.format("#%06X", 0xFFFFFF & color);
|
|
|
- }
|
|
|
-
|
|
|
- public static int primaryAccentColor() {
|
|
|
- OCCapability capability = getCapability();
|
|
|
-
|
|
|
- try {
|
|
|
- float adjust;
|
|
|
- if (darkTheme()){
|
|
|
- adjust = +0.1f;
|
|
|
- } else {
|
|
|
- adjust = -0.1f;
|
|
|
- }
|
|
|
- return adjustLightness(adjust, Color.parseColor(capability.getServerColor()));
|
|
|
- } catch (Exception e) {
|
|
|
- return MainApp.getAppContext().getResources().getColor(R.color.color_accent);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public static int primaryDarkColor() {
|
|
|
- OCCapability capability = getCapability();
|
|
|
-
|
|
|
- try {
|
|
|
- return adjustLightness(-0.2f, Color.parseColor(capability.getServerColor()));
|
|
|
- } catch (Exception e) {
|
|
|
- return MainApp.getAppContext().getResources().getColor(R.color.primary_dark);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public static int primaryColor() {
|
|
|
- OCCapability capability = getCapability();
|
|
|
-
|
|
|
- try {
|
|
|
- return Color.parseColor(capability.getServerColor());
|
|
|
- } catch (Exception e) {
|
|
|
- return MainApp.getAppContext().getResources().getColor(R.color.primary);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public static boolean themingEnabled() {
|
|
|
- return getCapability().getServerColor() != null && !getCapability().getServerColor().isEmpty();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Set color of title to white/black depending on background color
|
|
|
- *
|
|
|
- * @param actionBar actionBar to be used
|
|
|
- * @param title title to be shown
|
|
|
- */
|
|
|
- public static void setColoredTitle(ActionBar actionBar, String title) {
|
|
|
- String colorHex = DisplayUtils.colorToHexString(DisplayUtils.fontColor());
|
|
|
- actionBar.setTitle(Html.fromHtml("<font color='" + colorHex + "'>" + title + "</font>"));
|
|
|
- }
|
|
|
-
|
|
|
- public static Spanned getColoredTitle(String title, int color) {
|
|
|
- String colorHex = DisplayUtils.colorToHexString(color);
|
|
|
- return Html.fromHtml("<font color='" + colorHex + "'>" + title + "</font>");
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Set color of title to white/black depending on background color
|
|
|
- *
|
|
|
- * @param actionBar actionBar to be used
|
|
|
- * @param titleId title to be shown
|
|
|
- */
|
|
|
- public static void setColoredTitle(ActionBar actionBar, int titleId, Context context) {
|
|
|
- String colorHex = DisplayUtils.colorToHexString(DisplayUtils.fontColor());
|
|
|
- String title = context.getString(titleId);
|
|
|
- actionBar.setTitle(Html.fromHtml("<font color='" + colorHex + "'>" + title + "</font>"));
|
|
|
- }
|
|
|
-
|
|
|
}
|