From 5804959223da53eca6155a6663ac8d75bde6d52e Mon Sep 17 00:00:00 2001 From: Musenkishi Date: Fri, 5 Jun 2015 14:14:41 +0200 Subject: [PATCH 1/4] Draft refactor SwatchType to more dynamic structure --- lib/build.gradle | 1 + .../paletteloader/PaletteLoader.java | 4 +- .../paletteloader/PaletteRequest.java | 245 +++++++++--------- .../musenkishi/paletteloader/SwatchColor.java | 10 + .../paletteloader/stuff/DarkMutedType.java | 38 +++ .../paletteloader/stuff/DarkVibrantType.java | 33 +++ .../paletteloader/stuff/LightMutedType.java | 33 +++ .../paletteloader/stuff/LightVibrantType.java | 33 +++ .../paletteloader/stuff/MutedType.java | 33 +++ .../paletteloader/stuff/SwatchType.java | 14 + .../musenkishi/paletteloader/stuff/Type.java | 20 ++ .../paletteloader/stuff/VibrantType.java | 33 +++ sample/build.gradle | 5 +- .../paletteloader/sample/CountryAdapter.java | 9 +- .../paletteloader/sample/MainActivity.java | 20 ++ sample/src/main/res/layout/activity_main.xml | 26 +- 16 files changed, 422 insertions(+), 135 deletions(-) create mode 100644 lib/src/main/java/com/musenkishi/paletteloader/SwatchColor.java create mode 100644 lib/src/main/java/com/musenkishi/paletteloader/stuff/DarkMutedType.java create mode 100644 lib/src/main/java/com/musenkishi/paletteloader/stuff/DarkVibrantType.java create mode 100644 lib/src/main/java/com/musenkishi/paletteloader/stuff/LightMutedType.java create mode 100644 lib/src/main/java/com/musenkishi/paletteloader/stuff/LightVibrantType.java create mode 100644 lib/src/main/java/com/musenkishi/paletteloader/stuff/MutedType.java create mode 100644 lib/src/main/java/com/musenkishi/paletteloader/stuff/SwatchType.java create mode 100644 lib/src/main/java/com/musenkishi/paletteloader/stuff/Type.java create mode 100644 lib/src/main/java/com/musenkishi/paletteloader/stuff/VibrantType.java diff --git a/lib/build.gradle b/lib/build.gradle index 9967e1b..df7320e 100644 --- a/lib/build.gradle +++ b/lib/build.gradle @@ -23,6 +23,7 @@ dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:palette-v7:21.0.0' compile 'com.android.support:cardview-v7:22.1.1' + compile 'com.android.support:design:22.2.0' compile 'org.apache.commons:commons-collections4:4.0' } diff --git a/lib/src/main/java/com/musenkishi/paletteloader/PaletteLoader.java b/lib/src/main/java/com/musenkishi/paletteloader/PaletteLoader.java index 67d34fd..19a440e 100644 --- a/lib/src/main/java/com/musenkishi/paletteloader/PaletteLoader.java +++ b/lib/src/main/java/com/musenkishi/paletteloader/PaletteLoader.java @@ -36,6 +36,8 @@ import android.widget.ImageView; import android.widget.TextView; +import com.musenkishi.paletteloader.stuff.VibrantType; + import org.apache.commons.collections4.map.LRUMap; import java.util.Collections; @@ -131,7 +133,7 @@ public static class PaletteBuilder { private Bitmap bitmap; private boolean maskDrawable; private int fallbackColor = Color.TRANSPARENT; - private PaletteRequest paletteRequest = new PaletteRequest(PaletteRequest.SwatchType.REGULAR_VIBRANT, PaletteRequest.SwatchColor.BACKGROUND); + private PaletteRequest paletteRequest = new PaletteRequest(new VibrantType(SwatchColor.BACKGROUND)); private Palette palette; private OnPaletteRenderedListener onPaletteRenderedListener; diff --git a/lib/src/main/java/com/musenkishi/paletteloader/PaletteRequest.java b/lib/src/main/java/com/musenkishi/paletteloader/PaletteRequest.java index 924c95e..69196a0 100644 --- a/lib/src/main/java/com/musenkishi/paletteloader/PaletteRequest.java +++ b/lib/src/main/java/com/musenkishi/paletteloader/PaletteRequest.java @@ -19,6 +19,8 @@ import android.graphics.Color; import android.support.v7.graphics.Palette; +import com.musenkishi.paletteloader.stuff.SwatchType; + /** * A class for storing and generating a requested color from a requested * {@link android.support.v7.graphics.Palette.Swatch}. @@ -27,35 +29,34 @@ */ public class PaletteRequest { - public enum SwatchType { - REGULAR_VIBRANT, - REGULAR_MUTED, - DARK_VIBRANT, - DARK_MUTED, - LIGHT_VIBRANT, - LIGHT_MUTED - } - - public enum SwatchColor { - BACKGROUND, - TEXT_BODY, - TEXT_TITLE - } - private SwatchType swatchType; - private SwatchColor swatchColor; +// private SwatchColor swatchColor; +// private SwatchColor[] swatchColors; public PaletteRequest(SwatchType swatchType, SwatchColor swatchColor) { this.swatchType = swatchType; - this.swatchColor = swatchColor; +// this.swatchColors = new SwatchColor[]{swatchColor}; + } + + public PaletteRequest(SwatchType swatchType, SwatchColor... swatchColors) { + this.swatchType = swatchType; +// this.swatchColors = swatchColors; } private SwatchType getSwatchType() { return swatchType; } - private SwatchColor getSwatchColor() { - return swatchColor; +// private SwatchColor getSwatchColor(int index) { +// return swatchColors[index]; +// } + + public int getColor(Palette palette) { + try { + return getSwatchType().getColor(palette); //FIXME: palette.getSwatch() can be null + } catch (IllegalArgumentException e) { + return Color.GRAY; + } } /** @@ -68,109 +69,109 @@ private SwatchColor getSwatchColor() { * @return requested color in integer form, otherwise next best available color, * and in worst case {@link Color}.GRAY. */ - public int getColor(Palette palette) { //Here be fugly code. - boolean requestedSwatchUsed = true; - try { - switch (getSwatchType()) { - case REGULAR_MUTED: - requestedSwatchUsed = palette.getMutedSwatch() != null; - if (requestedSwatchUsed) { - switch (getSwatchColor()) { - case BACKGROUND: - return palette.getMutedSwatch().getRgb(); - case TEXT_BODY: - return palette.getMutedSwatch().getBodyTextColor(); - case TEXT_TITLE: - return palette.getMutedSwatch().getTitleTextColor(); - } - } - break; - case DARK_MUTED: - requestedSwatchUsed = palette.getDarkMutedSwatch() != null; - if (requestedSwatchUsed) { - switch (getSwatchColor()) { - case BACKGROUND: - return palette.getDarkMutedSwatch().getRgb(); - case TEXT_BODY: - return palette.getDarkMutedSwatch().getBodyTextColor(); - case TEXT_TITLE: - return palette.getDarkMutedSwatch().getTitleTextColor(); - } - } - break; - case LIGHT_MUTED: - requestedSwatchUsed = palette.getLightMutedSwatch() != null; - if (requestedSwatchUsed) { - switch (getSwatchColor()) { - case BACKGROUND: - return palette.getLightMutedSwatch().getRgb(); - case TEXT_BODY: - return palette.getLightMutedSwatch().getBodyTextColor(); - case TEXT_TITLE: - return palette.getLightMutedSwatch().getTitleTextColor(); - } - } - break; - case REGULAR_VIBRANT: - requestedSwatchUsed = palette.getVibrantSwatch() != null; - if (requestedSwatchUsed) { - switch (getSwatchColor()) { - case BACKGROUND: - return palette.getVibrantSwatch().getRgb(); - case TEXT_BODY: - return palette.getVibrantSwatch().getBodyTextColor(); - case TEXT_TITLE: - return palette.getVibrantSwatch().getTitleTextColor(); - } - } - break; - case DARK_VIBRANT: - requestedSwatchUsed = palette.getDarkVibrantSwatch() != null; - if (requestedSwatchUsed) { - switch (getSwatchColor()) { - case BACKGROUND: - return palette.getDarkVibrantSwatch().getRgb(); - case TEXT_BODY: - return palette.getDarkVibrantSwatch().getBodyTextColor(); - case TEXT_TITLE: - return palette.getDarkVibrantSwatch().getTitleTextColor(); - } - } - break; - case LIGHT_VIBRANT: - requestedSwatchUsed = palette.getLightVibrantSwatch() != null; - if (requestedSwatchUsed) { - switch (getSwatchColor()) { - case BACKGROUND: - return palette.getLightVibrantSwatch().getRgb(); - case TEXT_BODY: - return palette.getLightVibrantSwatch().getBodyTextColor(); - case TEXT_TITLE: - return palette.getLightVibrantSwatch().getTitleTextColor(); - } - } - break; - } - - if (!requestedSwatchUsed) { - for (Palette.Swatch swatch : palette.getSwatches()){ - if (swatch != null) { - switch (getSwatchColor()) { - case BACKGROUND: - return swatch.getRgb(); - case TEXT_BODY: - return swatch.getBodyTextColor(); - case TEXT_TITLE: - return swatch.getTitleTextColor(); - } - } - } - } - } catch (IllegalArgumentException e) { - //This can happen if a Color we're trying to get is translucent. - } - return Color.GRAY; - } +// public int getColor(Palette palette, int index) { //Here be fugly code. +// boolean requestedSwatchUsed = true; +// try { +// switch (getSwatchType()) { +// case REGULAR_MUTED: +// requestedSwatchUsed = palette.getMutedSwatch() != null; +// if (requestedSwatchUsed) { +// switch (getSwatchColor(index)) { +// case BACKGROUND: +// return palette.getMutedSwatch().getRgb(); +// case TEXT_BODY: +// return palette.getMutedSwatch().getBodyTextColor(); +// case TEXT_TITLE: +// return palette.getMutedSwatch().getTitleTextColor(); +// } +// } +// break; +// case DARK_MUTED: +// requestedSwatchUsed = palette.getDarkMutedSwatch() != null; +// if (requestedSwatchUsed) { +// switch (getSwatchColor(index)) { +// case BACKGROUND: +// return palette.getDarkMutedSwatch().getRgb(); +// case TEXT_BODY: +// return palette.getDarkMutedSwatch().getBodyTextColor(); +// case TEXT_TITLE: +// return palette.getDarkMutedSwatch().getTitleTextColor(); +// } +// } +// break; +// case LIGHT_MUTED: +// requestedSwatchUsed = palette.getLightMutedSwatch() != null; +// if (requestedSwatchUsed) { +// switch (getSwatchColor(index)) { +// case BACKGROUND: +// return palette.getLightMutedSwatch().getRgb(); +// case TEXT_BODY: +// return palette.getLightMutedSwatch().getBodyTextColor(); +// case TEXT_TITLE: +// return palette.getLightMutedSwatch().getTitleTextColor(); +// } +// } +// break; +// case REGULAR_VIBRANT: +// requestedSwatchUsed = palette.getVibrantSwatch() != null; +// if (requestedSwatchUsed) { +// switch (getSwatchColor(index)) { +// case BACKGROUND: +// return palette.getVibrantSwatch().getRgb(); +// case TEXT_BODY: +// return palette.getVibrantSwatch().getBodyTextColor(); +// case TEXT_TITLE: +// return palette.getVibrantSwatch().getTitleTextColor(); +// } +// } +// break; +// case DARK_VIBRANT: +// requestedSwatchUsed = palette.getDarkVibrantSwatch() != null; +// if (requestedSwatchUsed) { +// switch (getSwatchColor(index)) { +// case BACKGROUND: +// return palette.getDarkVibrantSwatch().getRgb(); +// case TEXT_BODY: +// return palette.getDarkVibrantSwatch().getBodyTextColor(); +// case TEXT_TITLE: +// return palette.getDarkVibrantSwatch().getTitleTextColor(); +// } +// } +// break; +// case LIGHT_VIBRANT: +// requestedSwatchUsed = palette.getLightVibrantSwatch() != null; +// if (requestedSwatchUsed) { +// switch (getSwatchColor(index)) { +// case BACKGROUND: +// return palette.getLightVibrantSwatch().getRgb(); +// case TEXT_BODY: +// return palette.getLightVibrantSwatch().getBodyTextColor(); +// case TEXT_TITLE: +// return palette.getLightVibrantSwatch().getTitleTextColor(); +// } +// } +// break; +// } +// +// if (!requestedSwatchUsed) { +// for (Palette.Swatch swatch : palette.getSwatches()){ +// if (swatch != null) { +// switch (getSwatchColor(index)) { +// case BACKGROUND: +// return swatch.getRgb(); +// case TEXT_BODY: +// return swatch.getBodyTextColor(); +// case TEXT_TITLE: +// return swatch.getTitleTextColor(); +// } +// } +// } +// } +// } catch (IllegalArgumentException e) { +// //This can happen if a Color we're trying to get is translucent. +// } +// return Color.GRAY; +// } /** * A method for fetching the requested {@link android.support.v7.graphics.Palette.Swatch} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/SwatchColor.java b/lib/src/main/java/com/musenkishi/paletteloader/SwatchColor.java new file mode 100644 index 0000000..4748a8e --- /dev/null +++ b/lib/src/main/java/com/musenkishi/paletteloader/SwatchColor.java @@ -0,0 +1,10 @@ +package com.musenkishi.paletteloader; + +/** + * Created by frelus on 04/06/15. + */ +public enum SwatchColor { + BACKGROUND, + TEXT_BODY, + TEXT_TITLE +} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/stuff/DarkMutedType.java b/lib/src/main/java/com/musenkishi/paletteloader/stuff/DarkMutedType.java new file mode 100644 index 0000000..28ccaf1 --- /dev/null +++ b/lib/src/main/java/com/musenkishi/paletteloader/stuff/DarkMutedType.java @@ -0,0 +1,38 @@ +package com.musenkishi.paletteloader.stuff; + +import android.graphics.Color; +import android.support.v7.graphics.Palette; + +import com.musenkishi.paletteloader.SwatchColor; + +/** + * Created by frelus on 04/06/15. + */ +public class DarkMutedType extends Type { + + public DarkMutedType(SwatchColor swatchColor) { + super(swatchColor); + } + + @Override + public int getColor(Palette palette) { + + if (palette.getDarkMutedSwatch() != null) { + + switch (getSwatchColor()) { + case BACKGROUND: + return palette.getDarkMutedSwatch().getRgb(); + + case TEXT_BODY: + return palette.getDarkMutedSwatch().getBodyTextColor(); + + case TEXT_TITLE: + return palette.getDarkMutedSwatch().getTitleTextColor(); + + } + } else { + //TODO fallback? + } + return Color.GRAY; + } +} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/stuff/DarkVibrantType.java b/lib/src/main/java/com/musenkishi/paletteloader/stuff/DarkVibrantType.java new file mode 100644 index 0000000..534d611 --- /dev/null +++ b/lib/src/main/java/com/musenkishi/paletteloader/stuff/DarkVibrantType.java @@ -0,0 +1,33 @@ +package com.musenkishi.paletteloader.stuff; + +import android.graphics.Color; +import android.support.v7.graphics.Palette; + +import com.musenkishi.paletteloader.SwatchColor; + +/** + * Created by frelus on 04/06/15. + */ +public class DarkVibrantType extends Type { + + public DarkVibrantType(SwatchColor swatchColor) { + super(swatchColor); + } + + @Override + public int getColor(Palette palette) { + switch (getSwatchColor()) { + case BACKGROUND: + return palette.getDarkVibrantSwatch().getRgb(); + + case TEXT_BODY: + return palette.getDarkVibrantSwatch().getBodyTextColor(); + + case TEXT_TITLE: + return palette.getDarkVibrantSwatch().getTitleTextColor(); + + default: + return Color.GRAY; + } + } +} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/stuff/LightMutedType.java b/lib/src/main/java/com/musenkishi/paletteloader/stuff/LightMutedType.java new file mode 100644 index 0000000..eef2a8f --- /dev/null +++ b/lib/src/main/java/com/musenkishi/paletteloader/stuff/LightMutedType.java @@ -0,0 +1,33 @@ +package com.musenkishi.paletteloader.stuff; + +import android.graphics.Color; +import android.support.v7.graphics.Palette; + +import com.musenkishi.paletteloader.SwatchColor; + +/** + * Created by frelus on 04/06/15. + */ +public class LightMutedType extends Type { + + public LightMutedType(SwatchColor swatchColor) { + super(swatchColor); + } + + @Override + public int getColor(Palette palette) { + switch (getSwatchColor()) { + case BACKGROUND: + return palette.getLightMutedSwatch().getRgb(); + + case TEXT_BODY: + return palette.getLightMutedSwatch().getBodyTextColor(); + + case TEXT_TITLE: + return palette.getLightMutedSwatch().getTitleTextColor(); + + default: + return Color.GRAY; + } + } +} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/stuff/LightVibrantType.java b/lib/src/main/java/com/musenkishi/paletteloader/stuff/LightVibrantType.java new file mode 100644 index 0000000..a1ebb09 --- /dev/null +++ b/lib/src/main/java/com/musenkishi/paletteloader/stuff/LightVibrantType.java @@ -0,0 +1,33 @@ +package com.musenkishi.paletteloader.stuff; + +import android.graphics.Color; +import android.support.v7.graphics.Palette; + +import com.musenkishi.paletteloader.SwatchColor; + +/** + * Created by frelus on 04/06/15. + */ +public class LightVibrantType extends Type { + + public LightVibrantType(SwatchColor swatchColor) { + super(swatchColor); + } + + @Override + public int getColor(Palette palette) { + switch (getSwatchColor()) { + case BACKGROUND: + return palette.getLightVibrantSwatch().getRgb(); + + case TEXT_BODY: + return palette.getLightVibrantSwatch().getBodyTextColor(); + + case TEXT_TITLE: + return palette.getLightVibrantSwatch().getTitleTextColor(); + + default: + return Color.GRAY; + } + } +} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/stuff/MutedType.java b/lib/src/main/java/com/musenkishi/paletteloader/stuff/MutedType.java new file mode 100644 index 0000000..25c8113 --- /dev/null +++ b/lib/src/main/java/com/musenkishi/paletteloader/stuff/MutedType.java @@ -0,0 +1,33 @@ +package com.musenkishi.paletteloader.stuff; + +import android.graphics.Color; +import android.support.v7.graphics.Palette; + +import com.musenkishi.paletteloader.SwatchColor; + +/** + * Created by frelus on 04/06/15. + */ +public class MutedType extends Type { + + public MutedType(SwatchColor swatchColor) { + super(swatchColor); + } + + @Override + public int getColor(Palette palette) { + switch (getSwatchColor()) { + case BACKGROUND: + return palette.getMutedSwatch().getRgb(); + + case TEXT_BODY: + return palette.getMutedSwatch().getBodyTextColor(); + + case TEXT_TITLE: + return palette.getMutedSwatch().getTitleTextColor(); + + default: + return Color.GRAY; + } + } +} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/stuff/SwatchType.java b/lib/src/main/java/com/musenkishi/paletteloader/stuff/SwatchType.java new file mode 100644 index 0000000..9ab6d19 --- /dev/null +++ b/lib/src/main/java/com/musenkishi/paletteloader/stuff/SwatchType.java @@ -0,0 +1,14 @@ +package com.musenkishi.paletteloader.stuff; + +import android.support.v7.graphics.Palette; + +import com.musenkishi.paletteloader.SwatchColor; + +/** + * Created by frelus on 04/06/15. + */ +public interface SwatchType { + + int getColor(Palette palette); + +} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/stuff/Type.java b/lib/src/main/java/com/musenkishi/paletteloader/stuff/Type.java new file mode 100644 index 0000000..57c8300 --- /dev/null +++ b/lib/src/main/java/com/musenkishi/paletteloader/stuff/Type.java @@ -0,0 +1,20 @@ +package com.musenkishi.paletteloader.stuff; + +import com.musenkishi.paletteloader.SwatchColor; + +/** + * Created by frelus on 04/06/15. + */ +abstract class Type implements SwatchType { + + private SwatchColor swatchColor; + + public Type(SwatchColor swatchColor) { + this.swatchColor = swatchColor; + } + + protected SwatchColor getSwatchColor() { + return this.swatchColor; + } + +} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/stuff/VibrantType.java b/lib/src/main/java/com/musenkishi/paletteloader/stuff/VibrantType.java new file mode 100644 index 0000000..daff03c --- /dev/null +++ b/lib/src/main/java/com/musenkishi/paletteloader/stuff/VibrantType.java @@ -0,0 +1,33 @@ +package com.musenkishi.paletteloader.stuff; + +import android.graphics.Color; +import android.support.v7.graphics.Palette; + +import com.musenkishi.paletteloader.SwatchColor; + +/** + * Created by frelus on 04/06/15. + */ +public class VibrantType extends Type { + + public VibrantType(SwatchColor swatchColor) { + super(swatchColor); + } + + @Override + public int getColor(Palette palette) { + switch (getSwatchColor()) { + case BACKGROUND: + return palette.getVibrantSwatch().getRgb(); + + case TEXT_BODY: + return palette.getVibrantSwatch().getBodyTextColor(); + + case TEXT_TITLE: + return palette.getVibrantSwatch().getTitleTextColor(); + + default: + return Color.GRAY; + } + } +} diff --git a/sample/build.gradle b/sample/build.gradle index 7413f7c..dd40577 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -21,10 +21,11 @@ android { dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') - compile 'com.android.support:support-v4:22.1.1' - compile 'com.android.support:appcompat-v7:22.1.1' + compile 'com.android.support:support-v4:22.2.0' + compile 'com.android.support:appcompat-v7:22.2.0' compile 'com.android.support:recyclerview-v7:21.0.0' compile 'com.android.support:cardview-v7:22.1.1' + compile 'com.android.support:design:22.2.0' compile 'com.github.bumptech.glide:glide:3.6.0' compile project(':lib') } diff --git a/sample/src/main/java/com/musenkishi/paletteloader/sample/CountryAdapter.java b/sample/src/main/java/com/musenkishi/paletteloader/sample/CountryAdapter.java index e4bad73..e3fb3da 100644 --- a/sample/src/main/java/com/musenkishi/paletteloader/sample/CountryAdapter.java +++ b/sample/src/main/java/com/musenkishi/paletteloader/sample/CountryAdapter.java @@ -6,7 +6,6 @@ import android.support.v7.widget.CardView; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; -import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; @@ -18,6 +17,8 @@ import com.bumptech.glide.request.target.Target; import com.musenkishi.paletteloader.PaletteLoader; import com.musenkishi.paletteloader.PaletteRequest; +import com.musenkishi.paletteloader.SwatchColor; +import com.musenkishi.paletteloader.stuff.VibrantType; /** * A simple adapter for loading countries names and images. @@ -63,14 +64,12 @@ public boolean onResourceReady(GlideDrawable resource, PaletteLoader.with(context, url) .load(bitmap) .setPaletteRequest(new PaletteRequest( - PaletteRequest.SwatchType.REGULAR_VIBRANT, - PaletteRequest.SwatchColor.BACKGROUND)) + new VibrantType(SwatchColor.BACKGROUND))) .into(viewHolder.rootView); PaletteLoader.with(context, url) .load(bitmap) .setPaletteRequest(new PaletteRequest( - PaletteRequest.SwatchType.REGULAR_VIBRANT, - PaletteRequest.SwatchColor.TEXT_TITLE)) + new VibrantType(SwatchColor.TEXT_TITLE))) .into(viewHolder.textView); } return false; diff --git a/sample/src/main/java/com/musenkishi/paletteloader/sample/MainActivity.java b/sample/src/main/java/com/musenkishi/paletteloader/sample/MainActivity.java index 0e4422e..c622dee 100644 --- a/sample/src/main/java/com/musenkishi/paletteloader/sample/MainActivity.java +++ b/sample/src/main/java/com/musenkishi/paletteloader/sample/MainActivity.java @@ -1,12 +1,19 @@ package com.musenkishi.paletteloader.sample; +import android.graphics.BitmapFactory; import android.os.Bundle; +import android.support.design.widget.FloatingActionButton; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.Menu; import android.view.MenuItem; +import com.musenkishi.paletteloader.PaletteLoader; +import com.musenkishi.paletteloader.PaletteRequest; +import com.musenkishi.paletteloader.SwatchColor; +import com.musenkishi.paletteloader.stuff.DarkVibrantType; + public class MainActivity extends AppCompatActivity { @@ -19,6 +26,19 @@ protected void onCreate(Bundle savedInstanceState) { LinearLayoutManager layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); recyclerView.setAdapter(new CountryAdapter()); + + FloatingActionButton floatingActionButton = (FloatingActionButton) findViewById(R.id.floatingactionbutton); + loadRandomPaletteIntoFAB(floatingActionButton); + } + + private void loadRandomPaletteIntoFAB(FloatingActionButton floatingActionButton) { + Country country = Countries.countries.get(0); + PaletteLoader.with(this, "sample") + .load(BitmapFactory.decodeResource(getResources(), R.drawable.sample)) + .setPaletteRequest(new PaletteRequest( + new DarkVibrantType(SwatchColor.BACKGROUND) + )) + .into(floatingActionButton); } @Override diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml index 42f762a..d5c4a96 100644 --- a/sample/src/main/res/layout/activity_main.xml +++ b/sample/src/main/res/layout/activity_main.xml @@ -1,16 +1,32 @@ + xmlns:tools="http://schemstyleas.android.com/tools" + xmlns:custom="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".MainActivity"> + + + From d1a754514937836e2f6dfbc25dd7464f03d5ee65 Mon Sep 17 00:00:00 2001 From: Musenkishi Date: Mon, 8 Jun 2015 16:55:08 +0200 Subject: [PATCH 2/4] Fail-safe swatch fetching fixed. Refactor naming on packages and classes. --- lib/build.gradle | 2 +- .../musenkishi/paletteloader/ColorType.java | 28 +++ .../musenkishi/paletteloader/ColorUtils.java | 67 ++++++ .../paletteloader/PaletteLoader.java | 207 +++++++++++++----- .../paletteloader/PaletteRequest.java | 160 +------------- .../musenkishi/paletteloader/SwatchColor.java | 10 - .../paletteloader/stuff/DarkMutedType.java | 38 ---- .../paletteloader/stuff/DarkVibrantType.java | 33 --- .../paletteloader/stuff/LightMutedType.java | 33 --- .../paletteloader/stuff/LightVibrantType.java | 33 --- .../paletteloader/stuff/MutedType.java | 33 --- .../paletteloader/stuff/SwatchType.java | 14 -- .../musenkishi/paletteloader/stuff/Type.java | 20 -- .../paletteloader/stuff/VibrantType.java | 33 --- .../paletteloader/swatch/AbstractSwatch.java | 85 +++++++ .../paletteloader/swatch/DarkMutedSwatch.java | 38 ++++ .../swatch/DarkVibrantSwatch.java | 38 ++++ .../swatch/LightMutedSwatch.java | 38 ++++ .../swatch/LightVibrantSwatch.java | 38 ++++ .../paletteloader/swatch/MutedSwatch.java | 38 ++++ .../paletteloader/swatch/Swatch.java | 30 +++ .../paletteloader/swatch/VibrantSwatch.java | 38 ++++ .../paletteloader/sample/CountryAdapter.java | 8 +- .../paletteloader/sample/MainActivity.java | 41 ++-- sample/src/main/res/menu/menu_main.xml | 6 - 25 files changed, 618 insertions(+), 491 deletions(-) create mode 100644 lib/src/main/java/com/musenkishi/paletteloader/ColorType.java create mode 100644 lib/src/main/java/com/musenkishi/paletteloader/ColorUtils.java delete mode 100644 lib/src/main/java/com/musenkishi/paletteloader/SwatchColor.java delete mode 100644 lib/src/main/java/com/musenkishi/paletteloader/stuff/DarkMutedType.java delete mode 100644 lib/src/main/java/com/musenkishi/paletteloader/stuff/DarkVibrantType.java delete mode 100644 lib/src/main/java/com/musenkishi/paletteloader/stuff/LightMutedType.java delete mode 100644 lib/src/main/java/com/musenkishi/paletteloader/stuff/LightVibrantType.java delete mode 100644 lib/src/main/java/com/musenkishi/paletteloader/stuff/MutedType.java delete mode 100644 lib/src/main/java/com/musenkishi/paletteloader/stuff/SwatchType.java delete mode 100644 lib/src/main/java/com/musenkishi/paletteloader/stuff/Type.java delete mode 100644 lib/src/main/java/com/musenkishi/paletteloader/stuff/VibrantType.java create mode 100644 lib/src/main/java/com/musenkishi/paletteloader/swatch/AbstractSwatch.java create mode 100644 lib/src/main/java/com/musenkishi/paletteloader/swatch/DarkMutedSwatch.java create mode 100644 lib/src/main/java/com/musenkishi/paletteloader/swatch/DarkVibrantSwatch.java create mode 100644 lib/src/main/java/com/musenkishi/paletteloader/swatch/LightMutedSwatch.java create mode 100644 lib/src/main/java/com/musenkishi/paletteloader/swatch/LightVibrantSwatch.java create mode 100644 lib/src/main/java/com/musenkishi/paletteloader/swatch/MutedSwatch.java create mode 100644 lib/src/main/java/com/musenkishi/paletteloader/swatch/Swatch.java create mode 100644 lib/src/main/java/com/musenkishi/paletteloader/swatch/VibrantSwatch.java delete mode 100644 sample/src/main/res/menu/menu_main.xml diff --git a/lib/build.gradle b/lib/build.gradle index df7320e..1789f85 100644 --- a/lib/build.gradle +++ b/lib/build.gradle @@ -21,7 +21,7 @@ android { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.android.support:palette-v7:21.0.0' + compile 'com.android.support:palette-v7:22.1.1' compile 'com.android.support:cardview-v7:22.1.1' compile 'com.android.support:design:22.2.0' compile 'org.apache.commons:commons-collections4:4.0' diff --git a/lib/src/main/java/com/musenkishi/paletteloader/ColorType.java b/lib/src/main/java/com/musenkishi/paletteloader/ColorType.java new file mode 100644 index 0000000..f11e6b8 --- /dev/null +++ b/lib/src/main/java/com/musenkishi/paletteloader/ColorType.java @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2015 Freddie (Musenkishi) Lust-Hed + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.musenkishi.paletteloader; + +/** + * An enum representing the different colors available in a + * {@link android.support.v7.graphics.Palette.Swatch} + *

Created by Freddie (Musenkishi) Lust-Hed on 04/06/15.

+ */ +public enum ColorType { + BACKGROUND, + TEXT_BODY, + TEXT_TITLE +} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/ColorUtils.java b/lib/src/main/java/com/musenkishi/paletteloader/ColorUtils.java new file mode 100644 index 0000000..1bc906c --- /dev/null +++ b/lib/src/main/java/com/musenkishi/paletteloader/ColorUtils.java @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2015 Freddie (Musenkishi) Lust-Hed + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.musenkishi.paletteloader; + +import android.content.res.ColorStateList; +import android.graphics.Color; + +/** + * General class containing helpful functions regarding colors. + *

Created by Freddie (Musenkishi) Lust-Hed on 08/06/15.

+ */ +public class ColorUtils { + + /** + * Will generate a {@link ColorStateList} based on the color provided. + * The generated {@link ColorStateList} will contain 3 different colors based on the provided; + * a regular, a greyed out (disabled state), and a darkened (pressed state). + * @param color + * @return + */ + public static ColorStateList generateColorStateList(int color) { + int[][] states = new int[][] { + new int[] { android.R.attr.state_enabled}, // enabled + new int[] {-android.R.attr.state_enabled}, // disabled + new int[] {-android.R.attr.state_checked}, // unchecked + new int[] { android.R.attr.state_pressed} // pressed + }; + + int[] colors = new int[] { + color, + greyOutColor(color), + color, + darkenColor(color) + }; + + return new ColorStateList(states, colors); + } + + private static int darkenColor(int color) { + float[] hsv = new float[3]; + Color.colorToHSV(color, hsv); + hsv[2] *= 0.8f; + return Color.HSVToColor(hsv); + } + + private static int greyOutColor(int color) { + float[] hsv = new float[3]; + Color.colorToHSV(color, hsv); + hsv[1] *= 0.8f; + return Color.HSVToColor(hsv); + } + +} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/PaletteLoader.java b/lib/src/main/java/com/musenkishi/paletteloader/PaletteLoader.java index 19a440e..673c846 100644 --- a/lib/src/main/java/com/musenkishi/paletteloader/PaletteLoader.java +++ b/lib/src/main/java/com/musenkishi/paletteloader/PaletteLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014 Freddie (Musenkishi) Lust-Hed + * Copyright (C) 2015 Freddie (Musenkishi) Lust-Hed * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,6 +19,7 @@ import android.animation.ArgbEvaluator; import android.animation.ValueAnimator; import android.content.Context; +import android.content.res.ColorStateList; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.PorterDuff; @@ -29,6 +30,7 @@ import android.os.Handler; import android.os.HandlerThread; import android.os.Message; +import android.support.design.widget.FloatingActionButton; import android.support.v7.graphics.Palette; import android.support.v7.widget.CardView; import android.util.Pair; @@ -36,7 +38,7 @@ import android.widget.ImageView; import android.widget.TextView; -import com.musenkishi.paletteloader.stuff.VibrantType; +import com.musenkishi.paletteloader.swatch.VibrantSwatch; import org.apache.commons.collections4.map.LRUMap; @@ -100,7 +102,7 @@ public boolean handleMessage(Message message) { case MSG_RENDER_PALETTE: Pair pair = (Pair) message.obj; if (pair != null && !pair.first.isRecycled()) { - Palette palette = Palette.generate(pair.first); + Palette palette = Palette.from(pair.first).generate(); paletteCache.put(pair.second.getId(), palette); @@ -133,7 +135,7 @@ public static class PaletteBuilder { private Bitmap bitmap; private boolean maskDrawable; private int fallbackColor = Color.TRANSPARENT; - private PaletteRequest paletteRequest = new PaletteRequest(new VibrantType(SwatchColor.BACKGROUND)); + private PaletteRequest paletteRequest = new PaletteRequest(new VibrantSwatch(ColorType.BACKGROUND)); private Palette palette; private OnPaletteRenderedListener onPaletteRenderedListener; @@ -183,7 +185,7 @@ public void into(View view) { applyColorToView(paletteTarget, palette, true); callListener(palette, onPaletteRenderedListener); } else { - if (Build.VERSION.SDK_INT >= 21) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { executorService.submit(new PaletteRenderer(bitmap, paletteTarget)); } else { Message bgMessage = backgroundHandler.obtainMessage(); @@ -206,58 +208,16 @@ private static void applyColorToView(PaletteTarget target, Palette palette, bool private static void applyColorToView(final PaletteTarget target, int color, boolean fromCache) { if (target.getView() instanceof TextView) { applyColorToView((TextView) target.getView(), color, fromCache); - return; } else if (target.getView() instanceof CardView) { - applyColorToCardView((CardView) target.getView(), color, fromCache); - return; - } - if (fromCache) { - if (target.getView() instanceof ImageView && target.shouldMaskDrawable()) { - ImageView imageView = ((ImageView) target.getView()); - if (imageView.getDrawable() != null) { - imageView.getDrawable().mutate() - .setColorFilter(color, PorterDuff.Mode.MULTIPLY); - } else if (imageView.getBackground() != null) { - imageView.getBackground().mutate() - .setColorFilter(color, PorterDuff.Mode.MULTIPLY); - } - } else { - target.getView().setBackgroundColor(color); - } + applyColorToView((CardView) target.getView(), color, fromCache); + } else if (target.getView() instanceof FloatingActionButton) { + applyColorToView((FloatingActionButton) target.getView(), color, fromCache, target.shouldMaskDrawable()); + } else if (target.getView() instanceof ImageView) { + applyColorToView((ImageView) target.getView(), color, fromCache, target.shouldMaskDrawable()); } else { - if (target.getView() instanceof ImageView && target.shouldMaskDrawable()) { - - final ImageView imageView = ((ImageView) target.getView()); - - Integer colorFrom; - ValueAnimator.AnimatorUpdateListener imageAnimatorUpdateListener = new ValueAnimator.AnimatorUpdateListener() { - @Override - public void onAnimationUpdate(ValueAnimator valueAnimator) { - if (imageView.getDrawable() != null) { - imageView.getDrawable().mutate() - .setColorFilter((Integer) valueAnimator - .getAnimatedValue(), PorterDuff.Mode.MULTIPLY); - } else if (imageView.getBackground() != null) { - imageView.getBackground().mutate() - .setColorFilter((Integer) valueAnimator - .getAnimatedValue(), PorterDuff.Mode.MULTIPLY); - } - } - }; - ValueAnimator.AnimatorUpdateListener animatorUpdateListener; - - PaletteTag paletteTag = (PaletteTag) target.getView().getTag(); - animatorUpdateListener = imageAnimatorUpdateListener; - colorFrom = paletteTag.getColor(); - target.getView().setTag(new PaletteTag(paletteTag.getId(), color)); - - Integer colorTo = color; - ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), colorFrom, colorTo); - colorAnimation.addUpdateListener(animatorUpdateListener); - colorAnimation.setDuration(300); - colorAnimation.start(); + if (fromCache) { + target.getView().setBackgroundColor(color); } else { - Drawable preDrawable; if (target.getView().getBackground() == null) { @@ -297,7 +257,7 @@ public void onAnimationUpdate(ValueAnimator animator) { } } - private static void applyColorToCardView(final CardView cardView, int color, boolean fromCache) { + private static void applyColorToView(final CardView cardView, int color, boolean fromCache) { if (fromCache) { cardView.setCardBackgroundColor(color); } else { @@ -310,10 +270,145 @@ public void onAnimationUpdate(ValueAnimator animator) { cardView.setCardBackgroundColor((Integer) animator.getAnimatedValue()); } }); + colorAnimation.setDuration(300); colorAnimation.start(); } } + private static void applyColorToView(final FloatingActionButton floatingActionButton, int color, boolean fromCache, boolean shouldMask) { + if (fromCache) { + if (shouldMask) { + if (floatingActionButton.getDrawable() != null) { + floatingActionButton.getDrawable().mutate() + .setColorFilter(color, PorterDuff.Mode.MULTIPLY); + } else if (floatingActionButton.getBackground() != null) { + floatingActionButton.getBackground().mutate() + .setColorFilter(color, PorterDuff.Mode.MULTIPLY); + } + } else { + ColorStateList colorStateList = ColorUtils.generateColorStateList(color); + floatingActionButton.setBackgroundTintList(colorStateList); + } + } else { + if (shouldMask) { + + Integer colorFrom; + ValueAnimator.AnimatorUpdateListener imageAnimatorUpdateListener = new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + if (floatingActionButton.getDrawable() != null) { + floatingActionButton.getDrawable().mutate() + .setColorFilter((Integer) valueAnimator + .getAnimatedValue(), PorterDuff.Mode.MULTIPLY); + } else if (floatingActionButton.getBackground() != null) { + floatingActionButton.getBackground().mutate() + .setColorFilter((Integer) valueAnimator + .getAnimatedValue(), PorterDuff.Mode.MULTIPLY); + } + } + }; + ValueAnimator.AnimatorUpdateListener animatorUpdateListener; + + PaletteTag paletteTag = (PaletteTag) floatingActionButton.getTag(); + animatorUpdateListener = imageAnimatorUpdateListener; + colorFrom = paletteTag.getColor(); + floatingActionButton.setTag(new PaletteTag(paletteTag.getId(), color)); + + Integer colorTo = color; + ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), colorFrom, colorTo); + colorAnimation.addUpdateListener(animatorUpdateListener); + colorAnimation.setDuration(300); + colorAnimation.start(); + + } else { + + Integer colorFrom = Color.parseColor("#FFFAFAFA"); + + ColorStateList colorStateList = floatingActionButton.getBackgroundTintList(); + if (colorStateList != null) { + colorFrom = colorStateList.getDefaultColor(); + } + + Integer colorTo = color; + ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), colorFrom, colorTo); + colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animator) { + int color = (Integer) animator.getAnimatedValue(); + floatingActionButton.setBackgroundTintList(ColorUtils.generateColorStateList(color)); + } + }); + colorAnimation.setDuration(1000); + colorAnimation.start(); + } + } + } + + private static void applyColorToView(final ImageView imageView, int color, boolean fromCache, boolean shouldMask) { + if (fromCache) { + if (shouldMask) { + if (imageView.getDrawable() != null) { + imageView.getDrawable().mutate() + .setColorFilter(color, PorterDuff.Mode.MULTIPLY); + } else if (imageView.getBackground() != null) { + imageView.getBackground().mutate() + .setColorFilter(color, PorterDuff.Mode.MULTIPLY); + } + } else { + imageView.setBackgroundColor(color); + } + } else { + if (shouldMask) { + Integer colorFrom; + ValueAnimator.AnimatorUpdateListener imageAnimatorUpdateListener = new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + if (imageView.getDrawable() != null) { + imageView.getDrawable().mutate() + .setColorFilter((Integer) valueAnimator + .getAnimatedValue(), PorterDuff.Mode.MULTIPLY); + } else if (imageView.getBackground() != null) { + imageView.getBackground().mutate() + .setColorFilter((Integer) valueAnimator + .getAnimatedValue(), PorterDuff.Mode.MULTIPLY); + } + } + }; + ValueAnimator.AnimatorUpdateListener animatorUpdateListener; + + PaletteTag paletteTag = (PaletteTag) imageView.getTag(); + animatorUpdateListener = imageAnimatorUpdateListener; + colorFrom = paletteTag.getColor(); + imageView.setTag(new PaletteTag(paletteTag.getId(), color)); + + Integer colorTo = color; + ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), colorFrom, colorTo); + colorAnimation.addUpdateListener(animatorUpdateListener); + colorAnimation.setDuration(300); + colorAnimation.start(); + } else { + Drawable preDrawable; + + if (imageView.getBackground() == null) { + preDrawable = new ColorDrawable(Color.TRANSPARENT); + } else { + preDrawable = imageView.getBackground(); + } + + TransitionDrawable transitionDrawable = new TransitionDrawable(new Drawable[]{ + preDrawable, + new ColorDrawable(color) + }); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + imageView.setBackground(transitionDrawable); + } else { + imageView.setBackgroundDrawable(transitionDrawable); + } + transitionDrawable.startTransition(300); + } + } + } + /** * Is it null? Is that null? What about that one? Is that null too? What about this one? * And this one? Is this null? Is null even null? How can null be real if our eyes aren't real? @@ -354,7 +449,7 @@ private PaletteRenderer(Bitmap bitmap, PaletteTarget paletteTarget) { @Override public void run() { if (bitmap != null && !bitmap.isRecycled()) { - Palette palette = Palette.generate(bitmap); + Palette palette = Palette.from(bitmap).generate(); paletteCache.put(paletteTarget.getId(), palette); PalettePresenter palettePresenter = new PalettePresenter( diff --git a/lib/src/main/java/com/musenkishi/paletteloader/PaletteRequest.java b/lib/src/main/java/com/musenkishi/paletteloader/PaletteRequest.java index 69196a0..cb1051a 100644 --- a/lib/src/main/java/com/musenkishi/paletteloader/PaletteRequest.java +++ b/lib/src/main/java/com/musenkishi/paletteloader/PaletteRequest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014 Freddie (Musenkishi) Lust-Hed + * Copyright (C) 2015 Freddie (Musenkishi) Lust-Hed * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,44 +19,24 @@ import android.graphics.Color; import android.support.v7.graphics.Palette; -import com.musenkishi.paletteloader.stuff.SwatchType; +import com.musenkishi.paletteloader.swatch.Swatch; /** * A class for storing and generating a requested color from a requested * {@link android.support.v7.graphics.Palette.Swatch}. - * + *

* Created by Freddie (Musenkishi) Lust-Hed on 14-10-21. */ public class PaletteRequest { - private SwatchType swatchType; -// private SwatchColor swatchColor; -// private SwatchColor[] swatchColors; - - public PaletteRequest(SwatchType swatchType, SwatchColor swatchColor) { - this.swatchType = swatchType; -// this.swatchColors = new SwatchColor[]{swatchColor}; - } + private Swatch swatch; - public PaletteRequest(SwatchType swatchType, SwatchColor... swatchColors) { - this.swatchType = swatchType; -// this.swatchColors = swatchColors; + public PaletteRequest(Swatch swatch) { + this.swatch = swatch; } - private SwatchType getSwatchType() { - return swatchType; - } - -// private SwatchColor getSwatchColor(int index) { -// return swatchColors[index]; -// } - - public int getColor(Palette palette) { - try { - return getSwatchType().getColor(palette); //FIXME: palette.getSwatch() can be null - } catch (IllegalArgumentException e) { - return Color.GRAY; - } + private Swatch getSwatch() { + return swatch; } /** @@ -67,128 +47,10 @@ public int getColor(Palette palette) { * @param palette A generated {@link android.support.v7.graphics.Palette} where * colors are picked from * @return requested color in integer form, otherwise next best available color, - * and in worst case {@link Color}.GRAY. + * and in worst case {@link Color}.GRAY. */ -// public int getColor(Palette palette, int index) { //Here be fugly code. -// boolean requestedSwatchUsed = true; -// try { -// switch (getSwatchType()) { -// case REGULAR_MUTED: -// requestedSwatchUsed = palette.getMutedSwatch() != null; -// if (requestedSwatchUsed) { -// switch (getSwatchColor(index)) { -// case BACKGROUND: -// return palette.getMutedSwatch().getRgb(); -// case TEXT_BODY: -// return palette.getMutedSwatch().getBodyTextColor(); -// case TEXT_TITLE: -// return palette.getMutedSwatch().getTitleTextColor(); -// } -// } -// break; -// case DARK_MUTED: -// requestedSwatchUsed = palette.getDarkMutedSwatch() != null; -// if (requestedSwatchUsed) { -// switch (getSwatchColor(index)) { -// case BACKGROUND: -// return palette.getDarkMutedSwatch().getRgb(); -// case TEXT_BODY: -// return palette.getDarkMutedSwatch().getBodyTextColor(); -// case TEXT_TITLE: -// return palette.getDarkMutedSwatch().getTitleTextColor(); -// } -// } -// break; -// case LIGHT_MUTED: -// requestedSwatchUsed = palette.getLightMutedSwatch() != null; -// if (requestedSwatchUsed) { -// switch (getSwatchColor(index)) { -// case BACKGROUND: -// return palette.getLightMutedSwatch().getRgb(); -// case TEXT_BODY: -// return palette.getLightMutedSwatch().getBodyTextColor(); -// case TEXT_TITLE: -// return palette.getLightMutedSwatch().getTitleTextColor(); -// } -// } -// break; -// case REGULAR_VIBRANT: -// requestedSwatchUsed = palette.getVibrantSwatch() != null; -// if (requestedSwatchUsed) { -// switch (getSwatchColor(index)) { -// case BACKGROUND: -// return palette.getVibrantSwatch().getRgb(); -// case TEXT_BODY: -// return palette.getVibrantSwatch().getBodyTextColor(); -// case TEXT_TITLE: -// return palette.getVibrantSwatch().getTitleTextColor(); -// } -// } -// break; -// case DARK_VIBRANT: -// requestedSwatchUsed = palette.getDarkVibrantSwatch() != null; -// if (requestedSwatchUsed) { -// switch (getSwatchColor(index)) { -// case BACKGROUND: -// return palette.getDarkVibrantSwatch().getRgb(); -// case TEXT_BODY: -// return palette.getDarkVibrantSwatch().getBodyTextColor(); -// case TEXT_TITLE: -// return palette.getDarkVibrantSwatch().getTitleTextColor(); -// } -// } -// break; -// case LIGHT_VIBRANT: -// requestedSwatchUsed = palette.getLightVibrantSwatch() != null; -// if (requestedSwatchUsed) { -// switch (getSwatchColor(index)) { -// case BACKGROUND: -// return palette.getLightVibrantSwatch().getRgb(); -// case TEXT_BODY: -// return palette.getLightVibrantSwatch().getBodyTextColor(); -// case TEXT_TITLE: -// return palette.getLightVibrantSwatch().getTitleTextColor(); -// } -// } -// break; -// } -// -// if (!requestedSwatchUsed) { -// for (Palette.Swatch swatch : palette.getSwatches()){ -// if (swatch != null) { -// switch (getSwatchColor(index)) { -// case BACKGROUND: -// return swatch.getRgb(); -// case TEXT_BODY: -// return swatch.getBodyTextColor(); -// case TEXT_TITLE: -// return swatch.getTitleTextColor(); -// } -// } -// } -// } -// } catch (IllegalArgumentException e) { -// //This can happen if a Color we're trying to get is translucent. -// } -// return Color.GRAY; -// } - - /** - * A method for fetching the requested {@link android.support.v7.graphics.Palette.Swatch} - * if available. If it's not available, it will return the next available swatch in the - * {@link android.support.v7.graphics.Palette}. In worst case null. - */ - public static Palette.Swatch getBestSwatch(Palette palette, Palette.Swatch swatch) { - if (swatch != null) { - return swatch; - } else { - for (Palette.Swatch listSwatch : palette.getSwatches()){ - if (listSwatch != null) { - return listSwatch; - } - } - } - return null; + public int getColor(Palette palette) { + return getSwatch().getColor(palette); } } diff --git a/lib/src/main/java/com/musenkishi/paletteloader/SwatchColor.java b/lib/src/main/java/com/musenkishi/paletteloader/SwatchColor.java deleted file mode 100644 index 4748a8e..0000000 --- a/lib/src/main/java/com/musenkishi/paletteloader/SwatchColor.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.musenkishi.paletteloader; - -/** - * Created by frelus on 04/06/15. - */ -public enum SwatchColor { - BACKGROUND, - TEXT_BODY, - TEXT_TITLE -} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/stuff/DarkMutedType.java b/lib/src/main/java/com/musenkishi/paletteloader/stuff/DarkMutedType.java deleted file mode 100644 index 28ccaf1..0000000 --- a/lib/src/main/java/com/musenkishi/paletteloader/stuff/DarkMutedType.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.musenkishi.paletteloader.stuff; - -import android.graphics.Color; -import android.support.v7.graphics.Palette; - -import com.musenkishi.paletteloader.SwatchColor; - -/** - * Created by frelus on 04/06/15. - */ -public class DarkMutedType extends Type { - - public DarkMutedType(SwatchColor swatchColor) { - super(swatchColor); - } - - @Override - public int getColor(Palette palette) { - - if (palette.getDarkMutedSwatch() != null) { - - switch (getSwatchColor()) { - case BACKGROUND: - return palette.getDarkMutedSwatch().getRgb(); - - case TEXT_BODY: - return palette.getDarkMutedSwatch().getBodyTextColor(); - - case TEXT_TITLE: - return palette.getDarkMutedSwatch().getTitleTextColor(); - - } - } else { - //TODO fallback? - } - return Color.GRAY; - } -} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/stuff/DarkVibrantType.java b/lib/src/main/java/com/musenkishi/paletteloader/stuff/DarkVibrantType.java deleted file mode 100644 index 534d611..0000000 --- a/lib/src/main/java/com/musenkishi/paletteloader/stuff/DarkVibrantType.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.musenkishi.paletteloader.stuff; - -import android.graphics.Color; -import android.support.v7.graphics.Palette; - -import com.musenkishi.paletteloader.SwatchColor; - -/** - * Created by frelus on 04/06/15. - */ -public class DarkVibrantType extends Type { - - public DarkVibrantType(SwatchColor swatchColor) { - super(swatchColor); - } - - @Override - public int getColor(Palette palette) { - switch (getSwatchColor()) { - case BACKGROUND: - return palette.getDarkVibrantSwatch().getRgb(); - - case TEXT_BODY: - return palette.getDarkVibrantSwatch().getBodyTextColor(); - - case TEXT_TITLE: - return palette.getDarkVibrantSwatch().getTitleTextColor(); - - default: - return Color.GRAY; - } - } -} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/stuff/LightMutedType.java b/lib/src/main/java/com/musenkishi/paletteloader/stuff/LightMutedType.java deleted file mode 100644 index eef2a8f..0000000 --- a/lib/src/main/java/com/musenkishi/paletteloader/stuff/LightMutedType.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.musenkishi.paletteloader.stuff; - -import android.graphics.Color; -import android.support.v7.graphics.Palette; - -import com.musenkishi.paletteloader.SwatchColor; - -/** - * Created by frelus on 04/06/15. - */ -public class LightMutedType extends Type { - - public LightMutedType(SwatchColor swatchColor) { - super(swatchColor); - } - - @Override - public int getColor(Palette palette) { - switch (getSwatchColor()) { - case BACKGROUND: - return palette.getLightMutedSwatch().getRgb(); - - case TEXT_BODY: - return palette.getLightMutedSwatch().getBodyTextColor(); - - case TEXT_TITLE: - return palette.getLightMutedSwatch().getTitleTextColor(); - - default: - return Color.GRAY; - } - } -} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/stuff/LightVibrantType.java b/lib/src/main/java/com/musenkishi/paletteloader/stuff/LightVibrantType.java deleted file mode 100644 index a1ebb09..0000000 --- a/lib/src/main/java/com/musenkishi/paletteloader/stuff/LightVibrantType.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.musenkishi.paletteloader.stuff; - -import android.graphics.Color; -import android.support.v7.graphics.Palette; - -import com.musenkishi.paletteloader.SwatchColor; - -/** - * Created by frelus on 04/06/15. - */ -public class LightVibrantType extends Type { - - public LightVibrantType(SwatchColor swatchColor) { - super(swatchColor); - } - - @Override - public int getColor(Palette palette) { - switch (getSwatchColor()) { - case BACKGROUND: - return palette.getLightVibrantSwatch().getRgb(); - - case TEXT_BODY: - return palette.getLightVibrantSwatch().getBodyTextColor(); - - case TEXT_TITLE: - return palette.getLightVibrantSwatch().getTitleTextColor(); - - default: - return Color.GRAY; - } - } -} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/stuff/MutedType.java b/lib/src/main/java/com/musenkishi/paletteloader/stuff/MutedType.java deleted file mode 100644 index 25c8113..0000000 --- a/lib/src/main/java/com/musenkishi/paletteloader/stuff/MutedType.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.musenkishi.paletteloader.stuff; - -import android.graphics.Color; -import android.support.v7.graphics.Palette; - -import com.musenkishi.paletteloader.SwatchColor; - -/** - * Created by frelus on 04/06/15. - */ -public class MutedType extends Type { - - public MutedType(SwatchColor swatchColor) { - super(swatchColor); - } - - @Override - public int getColor(Palette palette) { - switch (getSwatchColor()) { - case BACKGROUND: - return palette.getMutedSwatch().getRgb(); - - case TEXT_BODY: - return palette.getMutedSwatch().getBodyTextColor(); - - case TEXT_TITLE: - return palette.getMutedSwatch().getTitleTextColor(); - - default: - return Color.GRAY; - } - } -} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/stuff/SwatchType.java b/lib/src/main/java/com/musenkishi/paletteloader/stuff/SwatchType.java deleted file mode 100644 index 9ab6d19..0000000 --- a/lib/src/main/java/com/musenkishi/paletteloader/stuff/SwatchType.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.musenkishi.paletteloader.stuff; - -import android.support.v7.graphics.Palette; - -import com.musenkishi.paletteloader.SwatchColor; - -/** - * Created by frelus on 04/06/15. - */ -public interface SwatchType { - - int getColor(Palette palette); - -} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/stuff/Type.java b/lib/src/main/java/com/musenkishi/paletteloader/stuff/Type.java deleted file mode 100644 index 57c8300..0000000 --- a/lib/src/main/java/com/musenkishi/paletteloader/stuff/Type.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.musenkishi.paletteloader.stuff; - -import com.musenkishi.paletteloader.SwatchColor; - -/** - * Created by frelus on 04/06/15. - */ -abstract class Type implements SwatchType { - - private SwatchColor swatchColor; - - public Type(SwatchColor swatchColor) { - this.swatchColor = swatchColor; - } - - protected SwatchColor getSwatchColor() { - return this.swatchColor; - } - -} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/stuff/VibrantType.java b/lib/src/main/java/com/musenkishi/paletteloader/stuff/VibrantType.java deleted file mode 100644 index daff03c..0000000 --- a/lib/src/main/java/com/musenkishi/paletteloader/stuff/VibrantType.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.musenkishi.paletteloader.stuff; - -import android.graphics.Color; -import android.support.v7.graphics.Palette; - -import com.musenkishi.paletteloader.SwatchColor; - -/** - * Created by frelus on 04/06/15. - */ -public class VibrantType extends Type { - - public VibrantType(SwatchColor swatchColor) { - super(swatchColor); - } - - @Override - public int getColor(Palette palette) { - switch (getSwatchColor()) { - case BACKGROUND: - return palette.getVibrantSwatch().getRgb(); - - case TEXT_BODY: - return palette.getVibrantSwatch().getBodyTextColor(); - - case TEXT_TITLE: - return palette.getVibrantSwatch().getTitleTextColor(); - - default: - return Color.GRAY; - } - } -} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/swatch/AbstractSwatch.java b/lib/src/main/java/com/musenkishi/paletteloader/swatch/AbstractSwatch.java new file mode 100644 index 0000000..f15548c --- /dev/null +++ b/lib/src/main/java/com/musenkishi/paletteloader/swatch/AbstractSwatch.java @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2015 Freddie (Musenkishi) Lust-Hed + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.musenkishi.paletteloader.swatch; + +import android.graphics.Color; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v7.graphics.Palette; + +import com.musenkishi.paletteloader.ColorType; + +/** + * An abstract class containing functions that should be available for all child classes. + *

Created by Freddie (Musenkishi) Lust-Hed on 04/06/15.

+ */ +abstract class AbstractSwatch implements Swatch { + + private ColorType colorType; + + public AbstractSwatch(@NonNull ColorType colorType) { + this.colorType = colorType; + } + + protected ColorType getColorType() { + return this.colorType; + } + + protected int getSwatchColor(@NonNull Palette palette, @Nullable Palette.Swatch swatch) { + + swatch = ensureSwatchIsNotNull(palette, swatch); + + switch (getColorType()) { + case BACKGROUND: + return swatch.getRgb(); + + case TEXT_BODY: + return swatch.getBodyTextColor(); + + case TEXT_TITLE: + return swatch.getTitleTextColor(); + } + + return Color.GRAY; + } + + /** + * A function that ensures a non-null {@link android.support.v7.graphics.Palette.Swatch} is + * returned, whether from the {@link Palette} or a new based on Color.GRAY. + * @param palette The desired {@link Palette} + * @param nullableSwatch The {@link Palette.Swatch} that could be null. + * @return A non-null {@link Palette.Swatch} from the + * {@link Palette}, or a new {@link Palette.Swatch} + * based on Color.GRAY. + */ + @NonNull + public Palette.Swatch ensureSwatchIsNotNull(@NonNull Palette palette, @Nullable Palette.Swatch nullableSwatch) { + + if (nullableSwatch != null) { + return nullableSwatch; + } + //nullableSwatch was null, fall back to a swatch that isn't null. + for (Palette.Swatch swatch : palette.getSwatches()) { + if (swatch != null) { + return swatch; + } + } + + return new Palette.Swatch(Color.GRAY, 1); + } + +} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/swatch/DarkMutedSwatch.java b/lib/src/main/java/com/musenkishi/paletteloader/swatch/DarkMutedSwatch.java new file mode 100644 index 0000000..1bed886 --- /dev/null +++ b/lib/src/main/java/com/musenkishi/paletteloader/swatch/DarkMutedSwatch.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2015 Freddie (Musenkishi) Lust-Hed + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.musenkishi.paletteloader.swatch; + +import android.support.v7.graphics.Palette; + +import com.musenkishi.paletteloader.ColorType; + +/** + * A Swatch delegate representing the {@link android.support.v7.graphics.Palette.Swatch} + * from {@link Palette}.getDarkMutedSwatch(). + *

Created by Freddie (Musenkishi) Lust-Hed on 04/06/15.

+ */ +public class DarkMutedSwatch extends AbstractSwatch { + + public DarkMutedSwatch(ColorType colorType) { + super(colorType); + } + + @Override + public int getColor(Palette palette) { + return getSwatchColor(palette, palette.getDarkMutedSwatch()); + } +} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/swatch/DarkVibrantSwatch.java b/lib/src/main/java/com/musenkishi/paletteloader/swatch/DarkVibrantSwatch.java new file mode 100644 index 0000000..0da7f5c --- /dev/null +++ b/lib/src/main/java/com/musenkishi/paletteloader/swatch/DarkVibrantSwatch.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2015 Freddie (Musenkishi) Lust-Hed + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.musenkishi.paletteloader.swatch; + +import android.support.v7.graphics.Palette; + +import com.musenkishi.paletteloader.ColorType; + +/** + * A Swatch delegate representing the {@link android.support.v7.graphics.Palette.Swatch} + * from {@link Palette}.getDarkVibrantSwatch(). + *

Created by Freddie (Musenkishi) Lust-Hed on 04/06/15.

+ */ +public class DarkVibrantSwatch extends AbstractSwatch { + + public DarkVibrantSwatch(ColorType colorType) { + super(colorType); + } + + @Override + public int getColor(Palette palette) { + return getSwatchColor(palette, palette.getDarkVibrantSwatch()); + } +} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/swatch/LightMutedSwatch.java b/lib/src/main/java/com/musenkishi/paletteloader/swatch/LightMutedSwatch.java new file mode 100644 index 0000000..e5d9057 --- /dev/null +++ b/lib/src/main/java/com/musenkishi/paletteloader/swatch/LightMutedSwatch.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2015 Freddie (Musenkishi) Lust-Hed + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.musenkishi.paletteloader.swatch; + +import android.support.v7.graphics.Palette; + +import com.musenkishi.paletteloader.ColorType; + +/** + * A Swatch delegate representing the {@link android.support.v7.graphics.Palette.Swatch} + * from {@link Palette}.getLightMutedSwatch(). + *

Created by Freddie (Musenkishi) Lust-Hed on 04/06/15.

+ */ +public class LightMutedSwatch extends AbstractSwatch { + + public LightMutedSwatch(ColorType colorType) { + super(colorType); + } + + @Override + public int getColor(Palette palette) { + return getSwatchColor(palette, palette.getLightMutedSwatch()); + } +} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/swatch/LightVibrantSwatch.java b/lib/src/main/java/com/musenkishi/paletteloader/swatch/LightVibrantSwatch.java new file mode 100644 index 0000000..36378d1 --- /dev/null +++ b/lib/src/main/java/com/musenkishi/paletteloader/swatch/LightVibrantSwatch.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2015 Freddie (Musenkishi) Lust-Hed + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.musenkishi.paletteloader.swatch; + +import android.support.v7.graphics.Palette; + +import com.musenkishi.paletteloader.ColorType; + +/** + * A Swatch delegate representing the {@link android.support.v7.graphics.Palette.Swatch} + * from {@link Palette}.getLightVibrantSwatch(). + *

Created by Freddie (Musenkishi) Lust-Hed on 04/06/15.

+ */ +public class LightVibrantSwatch extends AbstractSwatch { + + public LightVibrantSwatch(ColorType colorType) { + super(colorType); + } + + @Override + public int getColor(Palette palette) { + return getSwatchColor(palette, palette.getLightVibrantSwatch()); + } +} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/swatch/MutedSwatch.java b/lib/src/main/java/com/musenkishi/paletteloader/swatch/MutedSwatch.java new file mode 100644 index 0000000..2123a62 --- /dev/null +++ b/lib/src/main/java/com/musenkishi/paletteloader/swatch/MutedSwatch.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2015 Freddie (Musenkishi) Lust-Hed + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.musenkishi.paletteloader.swatch; + +import android.support.v7.graphics.Palette; + +import com.musenkishi.paletteloader.ColorType; + +/** + * A Swatch delegate representing the {@link android.support.v7.graphics.Palette.Swatch} + * from {@link Palette}.getMutedSwatch(). + *

Created by Freddie (Musenkishi) Lust-Hed on 04/06/15.

+ */ +public class MutedSwatch extends AbstractSwatch { + + public MutedSwatch(ColorType colorType) { + super(colorType); + } + + @Override + public int getColor(Palette palette) { + return getSwatchColor(palette, palette.getMutedSwatch()); + } +} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/swatch/Swatch.java b/lib/src/main/java/com/musenkishi/paletteloader/swatch/Swatch.java new file mode 100644 index 0000000..72d575b --- /dev/null +++ b/lib/src/main/java/com/musenkishi/paletteloader/swatch/Swatch.java @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2015 Freddie (Musenkishi) Lust-Hed + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.musenkishi.paletteloader.swatch; + +import android.support.v7.graphics.Palette; + +/** + * An interface representing the basic function that + * {@link com.musenkishi.paletteloader.PaletteRequest} wants (getColor()). + *

Created by Freddie (Musenkishi) Lust-Hed on 04/06/15.

+ */ +public interface Swatch { + + int getColor(Palette palette); + +} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/swatch/VibrantSwatch.java b/lib/src/main/java/com/musenkishi/paletteloader/swatch/VibrantSwatch.java new file mode 100644 index 0000000..cffe439 --- /dev/null +++ b/lib/src/main/java/com/musenkishi/paletteloader/swatch/VibrantSwatch.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2015 Freddie (Musenkishi) Lust-Hed + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.musenkishi.paletteloader.swatch; + +import android.support.v7.graphics.Palette; + +import com.musenkishi.paletteloader.ColorType; + +/** + * A Swatch delegate representing the {@link android.support.v7.graphics.Palette.Swatch} + * from {@link Palette}.getVibrantSwatch(). + *

Created by Freddie (Musenkishi) Lust-Hed on 04/06/15.

+ */ +public class VibrantSwatch extends AbstractSwatch { + + public VibrantSwatch(ColorType colorType) { + super(colorType); + } + + @Override + public int getColor(Palette palette) { + return getSwatchColor(palette, palette.getVibrantSwatch()); + } +} diff --git a/sample/src/main/java/com/musenkishi/paletteloader/sample/CountryAdapter.java b/sample/src/main/java/com/musenkishi/paletteloader/sample/CountryAdapter.java index e3fb3da..82fcd73 100644 --- a/sample/src/main/java/com/musenkishi/paletteloader/sample/CountryAdapter.java +++ b/sample/src/main/java/com/musenkishi/paletteloader/sample/CountryAdapter.java @@ -17,8 +17,8 @@ import com.bumptech.glide.request.target.Target; import com.musenkishi.paletteloader.PaletteLoader; import com.musenkishi.paletteloader.PaletteRequest; -import com.musenkishi.paletteloader.SwatchColor; -import com.musenkishi.paletteloader.stuff.VibrantType; +import com.musenkishi.paletteloader.ColorType; +import com.musenkishi.paletteloader.swatch.VibrantSwatch; /** * A simple adapter for loading countries names and images. @@ -64,12 +64,12 @@ public boolean onResourceReady(GlideDrawable resource, PaletteLoader.with(context, url) .load(bitmap) .setPaletteRequest(new PaletteRequest( - new VibrantType(SwatchColor.BACKGROUND))) + new VibrantSwatch(ColorType.BACKGROUND))) .into(viewHolder.rootView); PaletteLoader.with(context, url) .load(bitmap) .setPaletteRequest(new PaletteRequest( - new VibrantType(SwatchColor.TEXT_TITLE))) + new VibrantSwatch(ColorType.TEXT_TITLE))) .into(viewHolder.textView); } return false; diff --git a/sample/src/main/java/com/musenkishi/paletteloader/sample/MainActivity.java b/sample/src/main/java/com/musenkishi/paletteloader/sample/MainActivity.java index c622dee..4450895 100644 --- a/sample/src/main/java/com/musenkishi/paletteloader/sample/MainActivity.java +++ b/sample/src/main/java/com/musenkishi/paletteloader/sample/MainActivity.java @@ -1,19 +1,17 @@ package com.musenkishi.paletteloader.sample; +import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; -import android.view.Menu; -import android.view.MenuItem; import com.musenkishi.paletteloader.PaletteLoader; import com.musenkishi.paletteloader.PaletteRequest; -import com.musenkishi.paletteloader.SwatchColor; -import com.musenkishi.paletteloader.stuff.DarkVibrantType; - +import com.musenkishi.paletteloader.ColorType; +import com.musenkishi.paletteloader.swatch.DarkVibrantSwatch; public class MainActivity extends AppCompatActivity { @@ -32,34 +30,21 @@ protected void onCreate(Bundle savedInstanceState) { } private void loadRandomPaletteIntoFAB(FloatingActionButton floatingActionButton) { - Country country = Countries.countries.get(0); + Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sample); PaletteLoader.with(this, "sample") - .load(BitmapFactory.decodeResource(getResources(), R.drawable.sample)) + .load(bitmap) .setPaletteRequest(new PaletteRequest( - new DarkVibrantType(SwatchColor.BACKGROUND) + new DarkVibrantSwatch(ColorType.BACKGROUND) )) .into(floatingActionButton); - } - @Override - public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu; this adds items to the action bar if it is present. - getMenuInflater().inflate(R.menu.menu_main, menu); - return true; + PaletteLoader.with(this, "sample") + .load(bitmap) + .setPaletteRequest(new PaletteRequest( + new DarkVibrantSwatch(ColorType.TEXT_TITLE) + )) + .mask() + .into(floatingActionButton); } - @Override - public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. - int id = item.getItemId(); - - //noinspection SimplifiableIfStatement - if (id == R.id.action_settings) { - return true; - } - - return super.onOptionsItemSelected(item); - } } diff --git a/sample/src/main/res/menu/menu_main.xml b/sample/src/main/res/menu/menu_main.xml deleted file mode 100644 index b1cb908..0000000 --- a/sample/src/main/res/menu/menu_main.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - From 24da6ffd5ccd2ac7213962dfaff23f3889c0c111 Mon Sep 17 00:00:00 2001 From: Musenkishi Date: Mon, 8 Jun 2015 20:50:16 +0200 Subject: [PATCH 3/4] Rename lib --- .../ApplicationTest.java | 2 +- .../Atelier.java} | 221 +++++++++--------- .../{paletteloader => atelier}/ColorType.java | 2 +- .../ColorUtils.java | 10 +- .../swatch/AbstractSwatch.java | 4 +- .../swatch/DarkMutedSwatch.java | 4 +- .../swatch/DarkVibrantSwatch.java | 4 +- .../swatch/LightMutedSwatch.java | 4 +- .../swatch/LightVibrantSwatch.java | 4 +- .../swatch/MutedSwatch.java | 4 +- .../swatch/Swatch.java | 4 +- .../swatch/VibrantSwatch.java | 4 +- .../paletteloader/PaletteRequest.java | 56 ----- lib/src/main/res/values/strings.xml | 2 +- .../ApplicationTest.java | 2 +- sample/src/main/AndroidManifest.xml | 2 +- .../sample/Countries.java | 2 +- .../sample/Country.java | 3 +- .../sample/CountryAdapter.java | 19 +- .../sample/MainActivity.java | 25 +- sample/src/main/res/drawable-nodpi/sample.jpg | Bin 0 -> 178854 bytes .../drawable-xxxhdpi/ic_add_white_48dp.png | Bin 0 -> 116 bytes sample/src/main/res/layout/activity_main.xml | 5 +- sample/src/main/res/values/strings.xml | 2 +- 24 files changed, 162 insertions(+), 223 deletions(-) rename lib/src/androidTest/java/com/musenkishi/{paletteloader => atelier}/ApplicationTest.java (89%) rename lib/src/main/java/com/musenkishi/{paletteloader/PaletteLoader.java => atelier/Atelier.java} (92%) rename lib/src/main/java/com/musenkishi/{paletteloader => atelier}/ColorType.java (95%) rename lib/src/main/java/com/musenkishi/{paletteloader => atelier}/ColorUtils.java (91%) rename lib/src/main/java/com/musenkishi/{paletteloader => atelier}/swatch/AbstractSwatch.java (96%) rename lib/src/main/java/com/musenkishi/{paletteloader => atelier}/swatch/DarkMutedSwatch.java (92%) rename lib/src/main/java/com/musenkishi/{paletteloader => atelier}/swatch/DarkVibrantSwatch.java (92%) rename lib/src/main/java/com/musenkishi/{paletteloader => atelier}/swatch/LightMutedSwatch.java (92%) rename lib/src/main/java/com/musenkishi/{paletteloader => atelier}/swatch/LightVibrantSwatch.java (92%) rename lib/src/main/java/com/musenkishi/{paletteloader => atelier}/swatch/MutedSwatch.java (92%) rename lib/src/main/java/com/musenkishi/{paletteloader => atelier}/swatch/Swatch.java (87%) rename lib/src/main/java/com/musenkishi/{paletteloader => atelier}/swatch/VibrantSwatch.java (92%) delete mode 100644 lib/src/main/java/com/musenkishi/paletteloader/PaletteRequest.java rename sample/src/androidTest/java/com/musenkishi/{paletteloader => atelier}/ApplicationTest.java (89%) rename sample/src/main/java/com/musenkishi/{paletteloader => atelier}/sample/Countries.java (96%) rename sample/src/main/java/com/musenkishi/{paletteloader => atelier}/sample/Country.java (89%) rename sample/src/main/java/com/musenkishi/{paletteloader => atelier}/sample/CountryAdapter.java (84%) rename sample/src/main/java/com/musenkishi/{paletteloader => atelier}/sample/MainActivity.java (61%) create mode 100644 sample/src/main/res/drawable-nodpi/sample.jpg create mode 100644 sample/src/main/res/drawable-xxxhdpi/ic_add_white_48dp.png diff --git a/lib/src/androidTest/java/com/musenkishi/paletteloader/ApplicationTest.java b/lib/src/androidTest/java/com/musenkishi/atelier/ApplicationTest.java similarity index 89% rename from lib/src/androidTest/java/com/musenkishi/paletteloader/ApplicationTest.java rename to lib/src/androidTest/java/com/musenkishi/atelier/ApplicationTest.java index 4b8489c..ddf971d 100644 --- a/lib/src/androidTest/java/com/musenkishi/paletteloader/ApplicationTest.java +++ b/lib/src/androidTest/java/com/musenkishi/atelier/ApplicationTest.java @@ -1,4 +1,4 @@ -package com.musenkishi.paletteloader; +package com.musenkishi.atelier; import android.app.Application; import android.test.ApplicationTestCase; diff --git a/lib/src/main/java/com/musenkishi/paletteloader/PaletteLoader.java b/lib/src/main/java/com/musenkishi/atelier/Atelier.java similarity index 92% rename from lib/src/main/java/com/musenkishi/paletteloader/PaletteLoader.java rename to lib/src/main/java/com/musenkishi/atelier/Atelier.java index 673c846..704db71 100644 --- a/lib/src/main/java/com/musenkishi/paletteloader/PaletteLoader.java +++ b/lib/src/main/java/com/musenkishi/atelier/Atelier.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.musenkishi.paletteloader; +package com.musenkishi.atelier; import android.animation.ArgbEvaluator; import android.animation.ValueAnimator; @@ -38,7 +38,8 @@ import android.widget.ImageView; import android.widget.TextView; -import com.musenkishi.paletteloader.swatch.VibrantSwatch; +import com.musenkishi.atelier.swatch.Swatch; +import com.musenkishi.atelier.swatch.VibrantSwatch; import org.apache.commons.collections4.map.LRUMap; @@ -53,7 +54,7 @@ *

* Created by Freddie (Musenkishi) Lust-Hed on 2014-10-21. */ -public class PaletteLoader { +public class Atelier { private static final int MSG_RENDER_PALETTE = 4194; private static final int MSG_DISPLAY_PALETTE = 4195; @@ -69,31 +70,7 @@ public class PaletteLoader { private static Map paletteCache; private static ExecutorService executorService = Executors.newFixedThreadPool(MAX_CONCURRENT_THREADS); - - private PaletteLoader() { - //Don't use - } - - public static PaletteBuilder with(Context context, String id) { - if (paletteCache == null) { - paletteCache = Collections.synchronizedMap( - new LRUMap(MAX_ITEMS_IN_CACHE) - ); - } - if (uiHandler == null || backgroundHandler == null) { - setupHandlers(context); - } - return new PaletteBuilder(id); - } - - private static void setupHandlers(Context context) { - HandlerThread handlerThread = new HandlerThread("palette-loader-background"); - handlerThread.start(); - backgroundHandler = new Handler(handlerThread.getLooper(), sCallback); - uiHandler = new Handler(context.getMainLooper(), sCallback); - } - - private static Handler.Callback sCallback = new Handler.Callback() { + private static Handler.Callback callback = new Handler.Callback() { @Override public boolean handleMessage(Message message) { @@ -129,79 +106,32 @@ public boolean handleMessage(Message message) { } }; - public static class PaletteBuilder { - - private String id; - private Bitmap bitmap; - private boolean maskDrawable; - private int fallbackColor = Color.TRANSPARENT; - private PaletteRequest paletteRequest = new PaletteRequest(new VibrantSwatch(ColorType.BACKGROUND)); - private Palette palette; - private OnPaletteRenderedListener onPaletteRenderedListener; - - public PaletteBuilder(String id) { - this.id = id; - } - - public PaletteBuilder load(Bitmap bitmap) { - this.bitmap = bitmap; - return this; - } - - public PaletteBuilder load(Palette palette) { - this.palette = palette; - return this; - } - - public PaletteBuilder mask() { - maskDrawable = true; - return this; - } - - public PaletteBuilder fallbackColor(int fallbackColor) { - this.fallbackColor = fallbackColor; - return this; - } - - public PaletteBuilder setPaletteRequest(PaletteRequest paletteRequest) { - this.paletteRequest = paletteRequest; - return this; - } + private Atelier() { + //Don't use + } - public PaletteBuilder setListener(OnPaletteRenderedListener onPaletteRenderedListener) { - this.onPaletteRenderedListener = onPaletteRenderedListener; - return this; + public static AtelierBuilder with(Context context, String id) { + if (paletteCache == null) { + paletteCache = Collections.synchronizedMap( + new LRUMap(MAX_ITEMS_IN_CACHE) + ); } - - public void into(View view) { - final PaletteTarget paletteTarget = new PaletteTarget(id, paletteRequest, view, maskDrawable, fallbackColor, onPaletteRenderedListener); - if (palette != null) { - paletteCache.put(paletteTarget.getId(), palette); - applyColorToView(paletteTarget, palette, false); - callListener(palette, onPaletteRenderedListener); - } else { - if (paletteCache.get(id) != null) { - Palette palette = paletteCache.get(id); - applyColorToView(paletteTarget, palette, true); - callListener(palette, onPaletteRenderedListener); - } else { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - executorService.submit(new PaletteRenderer(bitmap, paletteTarget)); - } else { - Message bgMessage = backgroundHandler.obtainMessage(); - bgMessage.what = MSG_RENDER_PALETTE; - bgMessage.obj = new Pair<>(bitmap, paletteTarget); - backgroundHandler.sendMessage(bgMessage); - } - } - } + if (uiHandler == null || backgroundHandler == null) { + setupHandlers(context); } + return new AtelierBuilder(id); + } + private static void setupHandlers(Context context) { + HandlerThread handlerThread = new HandlerThread("palette-loader-background"); + handlerThread.start(); + backgroundHandler = new Handler(handlerThread.getLooper(), callback); + uiHandler = new Handler(context.getMainLooper(), callback); } private static void applyColorToView(PaletteTarget target, Palette palette, boolean fromCache) { if (!isViewRecycled(target)) { - applyColorToView(target, target.getPaletteRequest().getColor(palette), fromCache); + applyColorToView(target, target.getSwatch().getColor(palette), fromCache); } } @@ -338,7 +268,7 @@ public void onAnimationUpdate(ValueAnimator animator) { floatingActionButton.setBackgroundTintList(ColorUtils.generateColorStateList(color)); } }); - colorAnimation.setDuration(1000); + colorAnimation.setDuration(300); colorAnimation.start(); } } @@ -415,7 +345,7 @@ public void onAnimationUpdate(ValueAnimator valueAnimator) { *

*

Checks whether the view has been recycled or not.

* - * @param target A {@link com.musenkishi.paletteloader.PaletteLoader.PaletteTarget} to check + * @param target A {@link Atelier.PaletteTarget} to check * @return true is view has been recycled, otherwise false. */ private static boolean isViewRecycled(PaletteTarget target) { @@ -436,6 +366,86 @@ private static boolean isViewRecycled(PaletteTarget target) { } } + private static void callListener(Palette palette, OnPaletteRenderedListener onPaletteRenderedListener) { + if (onPaletteRenderedListener != null) { + onPaletteRenderedListener.onRendered(palette); + } + } + + public interface OnPaletteRenderedListener { + void onRendered(Palette palette); + } + + public static class AtelierBuilder { + + private String id; + private Bitmap bitmap; + private boolean maskDrawable; + private int fallbackColor = Color.TRANSPARENT; + private Swatch swatch = new VibrantSwatch(ColorType.BACKGROUND); + private Palette palette; + private OnPaletteRenderedListener onPaletteRenderedListener; + + public AtelierBuilder(String id) { + this.id = id; + } + + public AtelierBuilder load(Bitmap bitmap) { + this.bitmap = bitmap; + return this; + } + + public AtelierBuilder load(Palette palette) { + this.palette = palette; + return this; + } + + public AtelierBuilder mask() { + maskDrawable = true; + return this; + } + + public AtelierBuilder fallbackColor(int fallbackColor) { + this.fallbackColor = fallbackColor; + return this; + } + + public AtelierBuilder swatch(Swatch swatch) { + this.swatch = swatch; + return this; + } + + public AtelierBuilder listener(OnPaletteRenderedListener onPaletteRenderedListener) { + this.onPaletteRenderedListener = onPaletteRenderedListener; + return this; + } + + public void into(View view) { + final PaletteTarget paletteTarget = new PaletteTarget(id, swatch, view, maskDrawable, fallbackColor, onPaletteRenderedListener); + if (palette != null) { + paletteCache.put(paletteTarget.getId(), palette); + applyColorToView(paletteTarget, palette, false); + callListener(palette, onPaletteRenderedListener); + } else { + if (paletteCache.get(id) != null) { + Palette palette = paletteCache.get(id); + applyColorToView(paletteTarget, palette, true); + callListener(palette, onPaletteRenderedListener); + } else { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + executorService.submit(new PaletteRenderer(bitmap, paletteTarget)); + } else { + Message bgMessage = backgroundHandler.obtainMessage(); + bgMessage.what = MSG_RENDER_PALETTE; + bgMessage.obj = new Pair<>(bitmap, paletteTarget); + backgroundHandler.sendMessage(bgMessage); + } + } + } + } + + } + private static class PaletteRenderer implements Runnable { private Bitmap bitmap; @@ -483,14 +493,15 @@ public void run() { private static class PaletteTarget { private String id; - private PaletteRequest paletteRequest; + // private PaletteRequest paletteRequest; + private Swatch swatch; private View view; private boolean maskDrawable; private OnPaletteRenderedListener onPaletteRenderedListener; - private PaletteTarget(String id, PaletteRequest paletteRequest, View view, boolean maskDrawable, int fallbackColor, OnPaletteRenderedListener onPaletteRenderedListener) { + private PaletteTarget(String id, Swatch swatch, View view, boolean maskDrawable, int fallbackColor, OnPaletteRenderedListener onPaletteRenderedListener) { this.id = id; - this.paletteRequest = paletteRequest; + this.swatch = swatch; this.view = view; this.view.setTag(new PaletteTag(this.id, fallbackColor)); this.maskDrawable = maskDrawable; @@ -501,8 +512,8 @@ public String getId() { return id; } - public PaletteRequest getPaletteRequest() { - return paletteRequest; + public Swatch getSwatch() { + return swatch; } public View getView() { @@ -553,14 +564,4 @@ public NoPaletteTagFoundException(String message) { super(message); } } - - public interface OnPaletteRenderedListener { - abstract void onRendered(Palette palette); - } - - private static void callListener(Palette palette, OnPaletteRenderedListener onPaletteRenderedListener) { - if (onPaletteRenderedListener != null) { - onPaletteRenderedListener.onRendered(palette); - } - } } diff --git a/lib/src/main/java/com/musenkishi/paletteloader/ColorType.java b/lib/src/main/java/com/musenkishi/atelier/ColorType.java similarity index 95% rename from lib/src/main/java/com/musenkishi/paletteloader/ColorType.java rename to lib/src/main/java/com/musenkishi/atelier/ColorType.java index f11e6b8..0b93e6a 100644 --- a/lib/src/main/java/com/musenkishi/paletteloader/ColorType.java +++ b/lib/src/main/java/com/musenkishi/atelier/ColorType.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.musenkishi.paletteloader; +package com.musenkishi.atelier; /** * An enum representing the different colors available in a diff --git a/lib/src/main/java/com/musenkishi/paletteloader/ColorUtils.java b/lib/src/main/java/com/musenkishi/atelier/ColorUtils.java similarity index 91% rename from lib/src/main/java/com/musenkishi/paletteloader/ColorUtils.java rename to lib/src/main/java/com/musenkishi/atelier/ColorUtils.java index 1bc906c..b205ba2 100644 --- a/lib/src/main/java/com/musenkishi/paletteloader/ColorUtils.java +++ b/lib/src/main/java/com/musenkishi/atelier/ColorUtils.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.musenkishi.paletteloader; +package com.musenkishi.atelier; import android.content.res.ColorStateList; import android.graphics.Color; @@ -29,8 +29,8 @@ public class ColorUtils { * Will generate a {@link ColorStateList} based on the color provided. * The generated {@link ColorStateList} will contain 3 different colors based on the provided; * a regular, a greyed out (disabled state), and a darkened (pressed state). - * @param color - * @return + * @param color The color you want the ColorStateList based on + * @return a ColorStateList based on provided color */ public static ColorStateList generateColorStateList(int color) { int[][] states = new int[][] { @@ -53,14 +53,14 @@ public static ColorStateList generateColorStateList(int color) { private static int darkenColor(int color) { float[] hsv = new float[3]; Color.colorToHSV(color, hsv); - hsv[2] *= 0.8f; + hsv[2] *= 0.6f; return Color.HSVToColor(hsv); } private static int greyOutColor(int color) { float[] hsv = new float[3]; Color.colorToHSV(color, hsv); - hsv[1] *= 0.8f; + hsv[1] *= 0.6f; return Color.HSVToColor(hsv); } diff --git a/lib/src/main/java/com/musenkishi/paletteloader/swatch/AbstractSwatch.java b/lib/src/main/java/com/musenkishi/atelier/swatch/AbstractSwatch.java similarity index 96% rename from lib/src/main/java/com/musenkishi/paletteloader/swatch/AbstractSwatch.java rename to lib/src/main/java/com/musenkishi/atelier/swatch/AbstractSwatch.java index f15548c..a17218a 100644 --- a/lib/src/main/java/com/musenkishi/paletteloader/swatch/AbstractSwatch.java +++ b/lib/src/main/java/com/musenkishi/atelier/swatch/AbstractSwatch.java @@ -14,14 +14,14 @@ * limitations under the License. */ -package com.musenkishi.paletteloader.swatch; +package com.musenkishi.atelier.swatch; import android.graphics.Color; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.graphics.Palette; -import com.musenkishi.paletteloader.ColorType; +import com.musenkishi.atelier.ColorType; /** * An abstract class containing functions that should be available for all child classes. diff --git a/lib/src/main/java/com/musenkishi/paletteloader/swatch/DarkMutedSwatch.java b/lib/src/main/java/com/musenkishi/atelier/swatch/DarkMutedSwatch.java similarity index 92% rename from lib/src/main/java/com/musenkishi/paletteloader/swatch/DarkMutedSwatch.java rename to lib/src/main/java/com/musenkishi/atelier/swatch/DarkMutedSwatch.java index 1bed886..ddc3ce5 100644 --- a/lib/src/main/java/com/musenkishi/paletteloader/swatch/DarkMutedSwatch.java +++ b/lib/src/main/java/com/musenkishi/atelier/swatch/DarkMutedSwatch.java @@ -14,11 +14,11 @@ * limitations under the License. */ -package com.musenkishi.paletteloader.swatch; +package com.musenkishi.atelier.swatch; import android.support.v7.graphics.Palette; -import com.musenkishi.paletteloader.ColorType; +import com.musenkishi.atelier.ColorType; /** * A Swatch delegate representing the {@link android.support.v7.graphics.Palette.Swatch} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/swatch/DarkVibrantSwatch.java b/lib/src/main/java/com/musenkishi/atelier/swatch/DarkVibrantSwatch.java similarity index 92% rename from lib/src/main/java/com/musenkishi/paletteloader/swatch/DarkVibrantSwatch.java rename to lib/src/main/java/com/musenkishi/atelier/swatch/DarkVibrantSwatch.java index 0da7f5c..ec605a5 100644 --- a/lib/src/main/java/com/musenkishi/paletteloader/swatch/DarkVibrantSwatch.java +++ b/lib/src/main/java/com/musenkishi/atelier/swatch/DarkVibrantSwatch.java @@ -14,11 +14,11 @@ * limitations under the License. */ -package com.musenkishi.paletteloader.swatch; +package com.musenkishi.atelier.swatch; import android.support.v7.graphics.Palette; -import com.musenkishi.paletteloader.ColorType; +import com.musenkishi.atelier.ColorType; /** * A Swatch delegate representing the {@link android.support.v7.graphics.Palette.Swatch} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/swatch/LightMutedSwatch.java b/lib/src/main/java/com/musenkishi/atelier/swatch/LightMutedSwatch.java similarity index 92% rename from lib/src/main/java/com/musenkishi/paletteloader/swatch/LightMutedSwatch.java rename to lib/src/main/java/com/musenkishi/atelier/swatch/LightMutedSwatch.java index e5d9057..6a2880a 100644 --- a/lib/src/main/java/com/musenkishi/paletteloader/swatch/LightMutedSwatch.java +++ b/lib/src/main/java/com/musenkishi/atelier/swatch/LightMutedSwatch.java @@ -14,11 +14,11 @@ * limitations under the License. */ -package com.musenkishi.paletteloader.swatch; +package com.musenkishi.atelier.swatch; import android.support.v7.graphics.Palette; -import com.musenkishi.paletteloader.ColorType; +import com.musenkishi.atelier.ColorType; /** * A Swatch delegate representing the {@link android.support.v7.graphics.Palette.Swatch} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/swatch/LightVibrantSwatch.java b/lib/src/main/java/com/musenkishi/atelier/swatch/LightVibrantSwatch.java similarity index 92% rename from lib/src/main/java/com/musenkishi/paletteloader/swatch/LightVibrantSwatch.java rename to lib/src/main/java/com/musenkishi/atelier/swatch/LightVibrantSwatch.java index 36378d1..0ac47ca 100644 --- a/lib/src/main/java/com/musenkishi/paletteloader/swatch/LightVibrantSwatch.java +++ b/lib/src/main/java/com/musenkishi/atelier/swatch/LightVibrantSwatch.java @@ -14,11 +14,11 @@ * limitations under the License. */ -package com.musenkishi.paletteloader.swatch; +package com.musenkishi.atelier.swatch; import android.support.v7.graphics.Palette; -import com.musenkishi.paletteloader.ColorType; +import com.musenkishi.atelier.ColorType; /** * A Swatch delegate representing the {@link android.support.v7.graphics.Palette.Swatch} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/swatch/MutedSwatch.java b/lib/src/main/java/com/musenkishi/atelier/swatch/MutedSwatch.java similarity index 92% rename from lib/src/main/java/com/musenkishi/paletteloader/swatch/MutedSwatch.java rename to lib/src/main/java/com/musenkishi/atelier/swatch/MutedSwatch.java index 2123a62..2ab9884 100644 --- a/lib/src/main/java/com/musenkishi/paletteloader/swatch/MutedSwatch.java +++ b/lib/src/main/java/com/musenkishi/atelier/swatch/MutedSwatch.java @@ -14,11 +14,11 @@ * limitations under the License. */ -package com.musenkishi.paletteloader.swatch; +package com.musenkishi.atelier.swatch; import android.support.v7.graphics.Palette; -import com.musenkishi.paletteloader.ColorType; +import com.musenkishi.atelier.ColorType; /** * A Swatch delegate representing the {@link android.support.v7.graphics.Palette.Swatch} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/swatch/Swatch.java b/lib/src/main/java/com/musenkishi/atelier/swatch/Swatch.java similarity index 87% rename from lib/src/main/java/com/musenkishi/paletteloader/swatch/Swatch.java rename to lib/src/main/java/com/musenkishi/atelier/swatch/Swatch.java index 72d575b..c593c8c 100644 --- a/lib/src/main/java/com/musenkishi/paletteloader/swatch/Swatch.java +++ b/lib/src/main/java/com/musenkishi/atelier/swatch/Swatch.java @@ -14,13 +14,13 @@ * limitations under the License. */ -package com.musenkishi.paletteloader.swatch; +package com.musenkishi.atelier.swatch; import android.support.v7.graphics.Palette; /** * An interface representing the basic function that - * {@link com.musenkishi.paletteloader.PaletteRequest} wants (getColor()). + * {@link com.musenkishi.atelier.Atelier} wants (getColor()). *

Created by Freddie (Musenkishi) Lust-Hed on 04/06/15.

*/ public interface Swatch { diff --git a/lib/src/main/java/com/musenkishi/paletteloader/swatch/VibrantSwatch.java b/lib/src/main/java/com/musenkishi/atelier/swatch/VibrantSwatch.java similarity index 92% rename from lib/src/main/java/com/musenkishi/paletteloader/swatch/VibrantSwatch.java rename to lib/src/main/java/com/musenkishi/atelier/swatch/VibrantSwatch.java index cffe439..1a97bb0 100644 --- a/lib/src/main/java/com/musenkishi/paletteloader/swatch/VibrantSwatch.java +++ b/lib/src/main/java/com/musenkishi/atelier/swatch/VibrantSwatch.java @@ -14,11 +14,11 @@ * limitations under the License. */ -package com.musenkishi.paletteloader.swatch; +package com.musenkishi.atelier.swatch; import android.support.v7.graphics.Palette; -import com.musenkishi.paletteloader.ColorType; +import com.musenkishi.atelier.ColorType; /** * A Swatch delegate representing the {@link android.support.v7.graphics.Palette.Swatch} diff --git a/lib/src/main/java/com/musenkishi/paletteloader/PaletteRequest.java b/lib/src/main/java/com/musenkishi/paletteloader/PaletteRequest.java deleted file mode 100644 index cb1051a..0000000 --- a/lib/src/main/java/com/musenkishi/paletteloader/PaletteRequest.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2015 Freddie (Musenkishi) Lust-Hed - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.musenkishi.paletteloader; - -import android.graphics.Color; -import android.support.v7.graphics.Palette; - -import com.musenkishi.paletteloader.swatch.Swatch; - -/** - * A class for storing and generating a requested color from a requested - * {@link android.support.v7.graphics.Palette.Swatch}. - *

- * Created by Freddie (Musenkishi) Lust-Hed on 14-10-21. - */ -public class PaletteRequest { - - private Swatch swatch; - - public PaletteRequest(Swatch swatch) { - this.swatch = swatch; - } - - private Swatch getSwatch() { - return swatch; - } - - /** - * This method will return the requested color if it's available. If the requested - * {@link android.support.v7.graphics.Palette.Swatch} is null, it will iterate over all - * swatches in the palette and grab the first one that doesn't return null. - * - * @param palette A generated {@link android.support.v7.graphics.Palette} where - * colors are picked from - * @return requested color in integer form, otherwise next best available color, - * and in worst case {@link Color}.GRAY. - */ - public int getColor(Palette palette) { - return getSwatch().getColor(palette); - } - -} diff --git a/lib/src/main/res/values/strings.xml b/lib/src/main/res/values/strings.xml index 8aadd84..fa530a0 100644 --- a/lib/src/main/res/values/strings.xml +++ b/lib/src/main/res/values/strings.xml @@ -1,3 +1,3 @@ - PaletteLoader + Atelier diff --git a/sample/src/androidTest/java/com/musenkishi/paletteloader/ApplicationTest.java b/sample/src/androidTest/java/com/musenkishi/atelier/ApplicationTest.java similarity index 89% rename from sample/src/androidTest/java/com/musenkishi/paletteloader/ApplicationTest.java rename to sample/src/androidTest/java/com/musenkishi/atelier/ApplicationTest.java index 4b8489c..ddf971d 100644 --- a/sample/src/androidTest/java/com/musenkishi/paletteloader/ApplicationTest.java +++ b/sample/src/androidTest/java/com/musenkishi/atelier/ApplicationTest.java @@ -1,4 +1,4 @@ -package com.musenkishi.paletteloader; +package com.musenkishi.atelier; import android.app.Application; import android.test.ApplicationTestCase; diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml index 92e7ab5..056fa56 100644 --- a/sample/src/main/AndroidManifest.xml +++ b/sample/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ + package="com.musenkishi.atelier.sample"> diff --git a/sample/src/main/java/com/musenkishi/paletteloader/sample/Countries.java b/sample/src/main/java/com/musenkishi/atelier/sample/Countries.java similarity index 96% rename from sample/src/main/java/com/musenkishi/paletteloader/sample/Countries.java rename to sample/src/main/java/com/musenkishi/atelier/sample/Countries.java index d6ea7d0..09c80b8 100644 --- a/sample/src/main/java/com/musenkishi/paletteloader/sample/Countries.java +++ b/sample/src/main/java/com/musenkishi/atelier/sample/Countries.java @@ -1,4 +1,4 @@ -package com.musenkishi.paletteloader.sample; +package com.musenkishi.atelier.sample; import java.util.ArrayList; import java.util.Arrays; diff --git a/sample/src/main/java/com/musenkishi/paletteloader/sample/Country.java b/sample/src/main/java/com/musenkishi/atelier/sample/Country.java similarity index 89% rename from sample/src/main/java/com/musenkishi/paletteloader/sample/Country.java rename to sample/src/main/java/com/musenkishi/atelier/sample/Country.java index 54ddbeb..bb29737 100644 --- a/sample/src/main/java/com/musenkishi/paletteloader/sample/Country.java +++ b/sample/src/main/java/com/musenkishi/atelier/sample/Country.java @@ -1,6 +1,7 @@ -package com.musenkishi.paletteloader.sample; +package com.musenkishi.atelier.sample; /** + * Sample data * Created by frelus on 13/05/15. */ public class Country { diff --git a/sample/src/main/java/com/musenkishi/paletteloader/sample/CountryAdapter.java b/sample/src/main/java/com/musenkishi/atelier/sample/CountryAdapter.java similarity index 84% rename from sample/src/main/java/com/musenkishi/paletteloader/sample/CountryAdapter.java rename to sample/src/main/java/com/musenkishi/atelier/sample/CountryAdapter.java index 82fcd73..d2813c6 100644 --- a/sample/src/main/java/com/musenkishi/paletteloader/sample/CountryAdapter.java +++ b/sample/src/main/java/com/musenkishi/atelier/sample/CountryAdapter.java @@ -1,4 +1,4 @@ -package com.musenkishi.paletteloader.sample; +package com.musenkishi.atelier.sample; import android.content.Context; import android.graphics.Bitmap; @@ -15,10 +15,9 @@ import com.bumptech.glide.load.resource.drawable.GlideDrawable; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.Target; -import com.musenkishi.paletteloader.PaletteLoader; -import com.musenkishi.paletteloader.PaletteRequest; -import com.musenkishi.paletteloader.ColorType; -import com.musenkishi.paletteloader.swatch.VibrantSwatch; +import com.musenkishi.atelier.Atelier; +import com.musenkishi.atelier.ColorType; +import com.musenkishi.atelier.swatch.VibrantSwatch; /** * A simple adapter for loading countries names and images. @@ -61,15 +60,13 @@ public boolean onResourceReady(GlideDrawable resource, Bitmap bitmap = ((GlideBitmapDrawable) resource).getBitmap(); if (bitmap != null) { Context context = viewHolder.rootView.getContext(); - PaletteLoader.with(context, url) + Atelier.with(context, url) .load(bitmap) - .setPaletteRequest(new PaletteRequest( - new VibrantSwatch(ColorType.BACKGROUND))) + .swatch(new VibrantSwatch(ColorType.BACKGROUND)) .into(viewHolder.rootView); - PaletteLoader.with(context, url) + Atelier.with(context, url) .load(bitmap) - .setPaletteRequest(new PaletteRequest( - new VibrantSwatch(ColorType.TEXT_TITLE))) + .swatch(new VibrantSwatch(ColorType.TEXT_TITLE)) .into(viewHolder.textView); } return false; diff --git a/sample/src/main/java/com/musenkishi/paletteloader/sample/MainActivity.java b/sample/src/main/java/com/musenkishi/atelier/sample/MainActivity.java similarity index 61% rename from sample/src/main/java/com/musenkishi/paletteloader/sample/MainActivity.java rename to sample/src/main/java/com/musenkishi/atelier/sample/MainActivity.java index 4450895..041d3a7 100644 --- a/sample/src/main/java/com/musenkishi/paletteloader/sample/MainActivity.java +++ b/sample/src/main/java/com/musenkishi/atelier/sample/MainActivity.java @@ -1,4 +1,4 @@ -package com.musenkishi.paletteloader.sample; +package com.musenkishi.atelier.sample; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -8,10 +8,9 @@ import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; -import com.musenkishi.paletteloader.PaletteLoader; -import com.musenkishi.paletteloader.PaletteRequest; -import com.musenkishi.paletteloader.ColorType; -import com.musenkishi.paletteloader.swatch.DarkVibrantSwatch; +import com.musenkishi.atelier.Atelier; +import com.musenkishi.atelier.ColorType; +import com.musenkishi.atelier.swatch.DarkVibrantSwatch; public class MainActivity extends AppCompatActivity { @@ -26,23 +25,19 @@ protected void onCreate(Bundle savedInstanceState) { recyclerView.setAdapter(new CountryAdapter()); FloatingActionButton floatingActionButton = (FloatingActionButton) findViewById(R.id.floatingactionbutton); - loadRandomPaletteIntoFAB(floatingActionButton); + loadSamplePaletteIntoFAB(floatingActionButton); } - private void loadRandomPaletteIntoFAB(FloatingActionButton floatingActionButton) { + private void loadSamplePaletteIntoFAB(FloatingActionButton floatingActionButton) { Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sample); - PaletteLoader.with(this, "sample") + Atelier.with(this, "sample") .load(bitmap) - .setPaletteRequest(new PaletteRequest( - new DarkVibrantSwatch(ColorType.BACKGROUND) - )) + .swatch(new DarkVibrantSwatch(ColorType.BACKGROUND)) .into(floatingActionButton); - PaletteLoader.with(this, "sample") + Atelier.with(this, "sample") .load(bitmap) - .setPaletteRequest(new PaletteRequest( - new DarkVibrantSwatch(ColorType.TEXT_TITLE) - )) + .swatch(new DarkVibrantSwatch(ColorType.TEXT_TITLE)) .mask() .into(floatingActionButton); } diff --git a/sample/src/main/res/drawable-nodpi/sample.jpg b/sample/src/main/res/drawable-nodpi/sample.jpg new file mode 100644 index 0000000000000000000000000000000000000000..71b0842f5d5910edba79149fb458eb3bed88ba35 GIT binary patch literal 178854 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�`QktZAC%>w4`H!!)C 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%0A`g&GP7f5uYO1ZQ8Bzg3ia=9*yL{Y{^B!ph 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

`(+7PsOvE_d90h7V6BGxHoCMp*upG-b^x)Njdr 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 diff --git a/sample/src/main/res/values/strings.xml b/sample/src/main/res/values/strings.xml index fac0da4..f31d3ae 100644 --- a/sample/src/main/res/values/strings.xml +++ b/sample/src/main/res/values/strings.xml @@ -1,4 +1,4 @@ - PaletteLoader Sample + Atelier Sample Settings From e1a4217868cb80c1ea0b086f4a791a9d6ebde48a Mon Sep 17 00:00:00 2001 From: Freddie Lust-Hed Date: Mon, 8 Jun 2015 21:06:19 +0200 Subject: [PATCH 4/4] Update readme.md --- readme.md | 46 ++++++++++++++++++---------------------------- 1 file changed, 18 insertions(+), 28 deletions(-) diff --git a/readme.md b/readme.md index e900d09..16a34fd 100644 --- a/readme.md +++ b/readme.md @@ -1,4 +1,5 @@ -# PaletteLoader +# Atelier +*Every artist needs a place where he can paint in peace and store his tools such as palette and swatches.* ![](https://img.shields.io/github/release/Musenkishi/PaletteLoader.svg?label=JitPack%20Maven) @@ -17,29 +18,27 @@ repositories { } ``` -Now, you can add the PaletteLoader dependency: +Now, you can add the Atelier dependency: ```groovy -compile 'com.github.Musenkishi:PaletteLoader:1.1.0' +compile 'com.github.Musenkishi:Atelier:1.2.0' ``` ## Usage -Currently PaletteLoader supports classes (and extensions of): +Currently Atelier supports classes (and extensions of): * View * ImageView (masking and background) * TextView +* Floating Action Button (icon masking and background) * CardView -If the supplied view is or extends `View`, PaletteLoader will apply the color to the background. If view extends `ImageView` and you use `.mask()`, PaletteLoader will apply the color to the image, not the background. And lastly if view is, or extends `TextView`, the color will be applied to the text, not the background. If view is or extends `CardView`, PaletteLoader will apply the color through `.setCardBackgroundColor()`. +If the supplied view is or extends `View`, Atelier will apply the color to the background. If view extends `ImageView` and you use `.mask()`, Atelier will apply the color to the image, not the background. This is also true for Floating Action Button. And if view is, or extends `TextView`, the color will be applied to the text, not the background. If view is or extends `CardView`, Atelier will apply the color through `.setCardBackgroundColor()`. ```java -PaletteLoader.with(context, uniqueStringForBitmap) //For reuse purposes uniqueStringForBitmap could be the url for the image. - .load(bitmap) - .setPaletteRequest( - new PaletteRequest( - PaletteRequest.SwatchType.REGULAR_VIBRANT, - PaletteRequest.SwatchColor.BACKGROUND)) - .into(view); +Atelier.with(context, uniqueStringForBitmap) //For reuse purposes uniqueStringForBitmap could be the url for the image. + .load(bitmap) + .swatch(new DarkVibrantSwatch(ColorType.BACKGROUND)) + .into(view); ``` ## Example @@ -57,32 +56,23 @@ RequestListener glideDrawableRequestListener = new Reques Context context = viewHolder.bottomBar.getContext(); //Set color to a View's background - PaletteLoader.with(context, model) + Atelier.with(context, model) .load(bitmap) - .setPaletteRequest( - new PaletteRequest( - PaletteRequest.SwatchType.REGULAR_VIBRANT, - PaletteRequest.SwatchColor.BACKGROUND)) + .swatch(new VibrantSwatch(ColorType.BACKGROUND)) .into(viewHolder.bottomBar); //Set color to text in a TextView - PaletteLoader.with(context, model) + Atelier.with(context, model) .load(bitmap) - .setPaletteRequest( - new PaletteRequest( - PaletteRequest.SwatchType.REGULAR_VIBRANT, - PaletteRequest.SwatchColor.TEXT_TITLE)) + .swatch(new VibrantSwatch(ColorType.TEXT_TITLE)) .into(viewHolder.textViewResolution); //Colorize an ImageView/ImageButton with .mask(). //Best result is accomplished with a white image (transparent bakground). - PaletteLoader.with(context, model) + Atelier.with(context, model) .load(bitmap) .fallbackColor(viewHolder.textViewResolution.getCurrentTextColor()) - .setPaletteRequest( - new PaletteRequest( - PaletteRequest.SwatchType.REGULAR_VIBRANT, - PaletteRequest.SwatchColor.TEXT_TITLE)) + .swatch(new VibrantSwatch(ColorType.TEXT_TITLE)) .mask() .into(viewHolder.imageButton); } @@ -98,7 +88,7 @@ RequestListener glideDrawableRequestListener = new Reques .into(viewHolder.imageView); ``` -PaletteLoader will generate the palette in a seperate thread (up to 5 threads on post-lollipop) and apply the color in the assigned view. +Atelier will generate the palette in a seperate thread (up to 5 threads on post-lollipop) and apply the color in the assigned view. ## License