Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5a8fe081 authored by Gabor Keszthelyi's avatar Gabor Keszthelyi Committed by Marten Gajda
Browse files

Extract dynamic color adjusting codes to Color classes. #522 (#560)

parent 7c93b869
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@ ext.deps = [
        xml_magic          : 'org.dmfs:android-xml-magic:0.1.1',
        color_picker       : 'com.github.dmfs.color-picker:colorpicker-activity:1.1',
        android_carrot     : 'com.github.dmfs.androidcarrot:androidcarrot:13edc04',
        bolts_color        : 'com.github.dmfs.bolts:color-bolts:27f34f7', // 27f34f7 -> 2017-12-04
        bolts_color        : 'com.github.dmfs.bolts:color-bolts:2b1b95d', // 2b1b95d -> 2017-12-12
        contentpal         : "com.github.dmfs.contentpal:contentpal:$contentpal_version",

        // 3rd party
+7 −64
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Build.VERSION;
@@ -47,6 +46,7 @@ import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.Toast;

import org.dmfs.android.bolts.color.elementary.ValueColor;
import org.dmfs.android.retentionmagic.SupportFragment;
import org.dmfs.android.retentionmagic.annotations.Parameter;
import org.dmfs.android.retentionmagic.annotations.Retain;
@@ -64,6 +64,9 @@ import org.dmfs.tasks.utils.ContentValueMapper;
import org.dmfs.tasks.utils.OnModelLoadedListener;
import org.dmfs.tasks.utils.RecentlyUsedLists;
import org.dmfs.tasks.utils.TasksListCursorSpinnerAdapter;
import org.dmfs.tasks.utils.colors.BlendColor;
import org.dmfs.tasks.utils.colors.DarkenedForStatusBar;
import org.dmfs.tasks.utils.colors.Mixed;
import org.dmfs.tasks.widget.ListenableScrollView;
import org.dmfs.tasks.widget.ListenableScrollView.OnScrollListener;
import org.dmfs.tasks.widget.TaskEdit;
@@ -614,67 +617,6 @@ public class EditTaskFragment extends SupportFragment implements LoaderManager.L
    }


    private static int darkenColor(int color)
    {
        float[] hsv = new float[3];
        Color.colorToHSV(color, hsv);
        hsv[2] = hsv[2] * 0.75f;
        color = Color.HSVToColor(hsv);
        return color;
    }


    public int mixColors(int col1, int col2)
    {
        int r1, g1, b1, r2, g2, b2;

        int a1 = Color.alpha(col1);

        r1 = Color.red(col1);
        g1 = Color.green(col1);
        b1 = Color.blue(col1);

        r2 = Color.red(col2);
        g2 = Color.green(col2);
        b2 = Color.blue(col2);

        int r3 = (r1 * a1 + r2 * (255 - a1)) / 255;
        int g3 = (g1 * a1 + g2 * (255 - a1)) / 255;
        int b3 = (b1 * a1 + b2 * (255 - a1)) / 255;

        return Color.rgb(r3, g3, b3);
    }


    private int getBlendColor(int baseColor, int targetColor, float alpha)
    {
        int r1, g1, b1, r3, g3, b3;

        if (alpha <= 0)
        {
            return targetColor;
        }
        else if (alpha > 254)
        {
            return targetColor;
        }

        r1 = Color.red(baseColor);
        g1 = Color.green(baseColor);
        b1 = Color.blue(baseColor);

        r3 = Color.red(targetColor);
        g3 = Color.green(targetColor);
        b3 = Color.blue(targetColor);

        int r2 = (int) Math.ceil((Math.max(0, r3 * 255 - r1 * (255 - alpha))) / alpha);
        int g2 = (int) Math.ceil((Math.max(0, g3 * 255 - g1 * (255 - alpha))) / alpha);
        int b2 = (int) Math.ceil((Math.max(0, b3 * 255 - b1 * (255 - alpha))) / alpha);

        return Color.argb((int) alpha, r2, g2, b2);
    }


    @SuppressLint("NewApi")
    private void updateColor(float percentage)
    {
@@ -686,8 +628,9 @@ public class EditTaskFragment extends SupportFragment implements LoaderManager.L
        {
            percentage = Math.max(0, Math.min(Float.isNaN(percentage) ? 0 : percentage, 1));
        }
        int alpha = (int) ((0.5 + 0.5 * percentage) * 255);

        int newColor = getBlendColor(mListColor, darkenColor(mListColor), (int) ((0.5 + 0.5 * percentage) * 255));
        int newColor = new BlendColor(new ValueColor(mListColor), new DarkenedForStatusBar(mListColor), alpha).argb();
        ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
        actionBar.setBackgroundDrawable(new ColorDrawable(newColor));

@@ -699,7 +642,7 @@ public class EditTaskFragment extends SupportFragment implements LoaderManager.L
        {
            Window window = getActivity().getWindow();
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(mixColors(newColor, mListColor));
            window.setStatusBarColor(new Mixed(newColor, mListColor).argb());
            // window.setNavigationBarColor(mixColors(newColor, mListColor));
        }
        mTaskListBar.setBackgroundColor(mListColor);
+2 −11
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ import org.dmfs.tasks.utils.BaseActivity;
import org.dmfs.tasks.utils.ExpandableGroupDescriptor;
import org.dmfs.tasks.utils.SearchHistoryHelper;
import org.dmfs.tasks.utils.Unchecked;
import org.dmfs.tasks.utils.colors.DarkenedForStatusBar;


/**
@@ -595,7 +596,7 @@ public class TaskListActivity extends BaseActivity implements TaskListFragment.C
            {
                Window window = getWindow();
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setStatusBarColor(darkenColor(colorInt));
                window.setStatusBarColor(new DarkenedForStatusBar(color).argb());
            }
        }
    }
@@ -750,16 +751,6 @@ public class TaskListActivity extends BaseActivity implements TaskListFragment.C
    };


    private int darkenColor(@ColorInt int color)
    {
        float[] hsv = new float[3];
        android.graphics.Color.colorToHSV(color, hsv);
        hsv[2] = hsv[2] * 0.75f;
        color = android.graphics.Color.HSVToColor(hsv);
        return color;
    }


    public Uri getSelectedTaskUri()
    {
        if (mShouldSelectTaskListItem)
+2 −11
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import org.dmfs.android.bolts.color.colors.PrimaryColor;
import org.dmfs.android.bolts.color.elementary.ValueColor;
import org.dmfs.tasks.model.ContentSet;
import org.dmfs.tasks.utils.BaseActivity;
import org.dmfs.tasks.utils.colors.DarkenedForStatusBar;


/**
@@ -151,16 +152,6 @@ public class ViewTaskActivity extends BaseActivity implements ViewTaskFragment.C
    }


    private int darkenColor(@ColorInt int color)
    {
        float[] hsv = new float[3];
        android.graphics.Color.colorToHSV(color, hsv);
        hsv[2] = hsv[2] * 0.75f;
        color = android.graphics.Color.HSVToColor(hsv);
        return color;
    }


    @SuppressLint("NewApi")
    @Override
    public void onListColorLoaded(@NonNull Color color)
@@ -170,7 +161,7 @@ public class ViewTaskActivity extends BaseActivity implements ViewTaskFragment.C
        {
            Window window = getWindow();
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(darkenColor(color.argb()));
            window.setStatusBarColor(new DarkenedForStatusBar(color).argb());
        }
    }

+2 −13
Original line number Diff line number Diff line
@@ -67,6 +67,7 @@ import org.dmfs.tasks.share.ShareIntentFactory;
import org.dmfs.tasks.utils.ContentValueMapper;
import org.dmfs.tasks.utils.OnModelLoadedListener;
import org.dmfs.tasks.utils.SafeFragmentUiRunnable;
import org.dmfs.tasks.utils.colors.AdjustedForFab;
import org.dmfs.tasks.widget.TaskView;

import java.util.Arrays;
@@ -644,19 +645,7 @@ public class ViewTaskFragment extends SupportFragment

        if (mShowFloatingActionButton && mFloatingActionButton.getVisibility() == View.VISIBLE)
        {
            // the FAB gets a slightly lighter color to stand out a bit more. If it's too light, we darken it instead.
            float[] hsv = new float[3];
            android.graphics.Color.colorToHSV(mListColor, hsv);
            if (hsv[2] * (1 - hsv[1]) < 0.4)
            {
                hsv[2] *= 1.2;
            }
            else
            {
                hsv[2] /= 1.2;
            }
            mFloatingActionButton.setBackgroundTintList(
                    new ColorStateList(new int[][] { new int[] { 0 } }, new int[] { android.graphics.Color.HSVToColor(hsv) }));
            mFloatingActionButton.setBackgroundTintList(ColorStateList.valueOf(new AdjustedForFab(mListColor).argb()));
        }
    }

Loading