Browse Source

Color chooser dialog now has an accent mode. Simplified it a bit. Should be complete.

Aidan Follestad 9 years ago
parent
commit
b362dc1a20

+ 50 - 336
library/src/main/java/com/afollestad/materialdialogs/ColorChooserDialog.java

@@ -2,7 +2,6 @@ package com.afollestad.materialdialogs;
 
 import android.app.Activity;
 import android.app.Dialog;
-import android.graphics.Color;
 import android.os.Bundle;
 import android.support.annotation.ColorInt;
 import android.support.annotation.NonNull;
@@ -19,295 +18,26 @@ import android.widget.BaseAdapter;
 import android.widget.GridView;
 
 import com.afollestad.materialdialogs.internal.CircleView;
+import com.afollestad.materialdialogs.internal.ColorPalette;
 
 import java.io.Serializable;
 
 /**
  * @author Aidan Follestad (afollestad)
  */
-@SuppressWarnings("FieldCanBeLocal")
+@SuppressWarnings({"FieldCanBeLocal", "ConstantConditions"})
 public class ColorChooserDialog extends DialogFragment implements View.OnClickListener {
 
-    private final static int[] COLORS_TOP = new int[]{
-            Color.parseColor("#F44336"),
-            Color.parseColor("#E91E63"),
-            Color.parseColor("#9C27B0"),
-            Color.parseColor("#673AB7"),
-            Color.parseColor("#3F51B5"),
-            Color.parseColor("#2196F3"),
-            Color.parseColor("#03A9F4"),
-            Color.parseColor("#00BCD4"),
-            Color.parseColor("#009688"),
-            Color.parseColor("#4CAF50"),
-            Color.parseColor("#8BC34A"),
-            Color.parseColor("#CDDC39"),
-            Color.parseColor("#FFEB3B"),
-            Color.parseColor("#FFC107"),
-            Color.parseColor("#FF9800"),
-            Color.parseColor("#FF5722"),
-            Color.parseColor("#795548"),
-            Color.parseColor("#9E9E9E"),
-            Color.parseColor("#607D8B")
-    };
-    private final static int[][] COLORS_SUB = new int[][]{
-            new int[]{
-                    Color.parseColor("#FFEBEE"),
-                    Color.parseColor("#FFCDD2"),
-                    Color.parseColor("#EF9A9A"),
-                    Color.parseColor("#E57373"),
-                    Color.parseColor("#EF5350"),
-                    Color.parseColor("#F44336"),
-                    Color.parseColor("#E53935"),
-                    Color.parseColor("#D32F2F"),
-                    Color.parseColor("#C62828"),
-                    Color.parseColor("#B71C1C")
-            },
-            new int[]{
-                    Color.parseColor("#FCE4EC"),
-                    Color.parseColor("#F8BBD0"),
-                    Color.parseColor("#F48FB1"),
-                    Color.parseColor("#F06292"),
-                    Color.parseColor("#EC407A"),
-                    Color.parseColor("#E91E63"),
-                    Color.parseColor("#D81B60"),
-                    Color.parseColor("#C2185B"),
-                    Color.parseColor("#AD1457"),
-                    Color.parseColor("#880E4F")
-            },
-            new int[]{
-                    Color.parseColor("#F3E5F5"),
-                    Color.parseColor("#E1BEE7"),
-                    Color.parseColor("#CE93D8"),
-                    Color.parseColor("#BA68C8"),
-                    Color.parseColor("#AB47BC"),
-                    Color.parseColor("#9C27B0"),
-                    Color.parseColor("#8E24AA"),
-                    Color.parseColor("#7B1FA2"),
-                    Color.parseColor("#6A1B9A"),
-                    Color.parseColor("#4A148C")
-            },
-            new int[]{
-                    Color.parseColor("#EDE7F6"),
-                    Color.parseColor("#D1C4E9"),
-                    Color.parseColor("#B39DDB"),
-                    Color.parseColor("#9575CD"),
-                    Color.parseColor("#7E57C2"),
-                    Color.parseColor("#673AB7"),
-                    Color.parseColor("#5E35B1"),
-                    Color.parseColor("#512DA8"),
-                    Color.parseColor("#4527A0"),
-                    Color.parseColor("#311B92")
-            },
-            new int[]{
-                    Color.parseColor("#E8EAF6"),
-                    Color.parseColor("#C5CAE9"),
-                    Color.parseColor("#9FA8DA"),
-                    Color.parseColor("#7986CB"),
-                    Color.parseColor("#5C6BC0"),
-                    Color.parseColor("#3F51B5"),
-                    Color.parseColor("#3949AB"),
-                    Color.parseColor("#303F9F"),
-                    Color.parseColor("#283593"),
-                    Color.parseColor("#1A237E")
-            },
-            new int[]{
-                    Color.parseColor("#E3F2FD"),
-                    Color.parseColor("#BBDEFB"),
-                    Color.parseColor("#90CAF9"),
-                    Color.parseColor("#64B5F6"),
-                    Color.parseColor("#42A5F5"),
-                    Color.parseColor("#2196F3"),
-                    Color.parseColor("#1E88E5"),
-                    Color.parseColor("#1976D2"),
-                    Color.parseColor("#1565C0"),
-                    Color.parseColor("#0D47A1")
-            },
-            new int[]{
-                    Color.parseColor("#E1F5FE"),
-                    Color.parseColor("#B3E5FC"),
-                    Color.parseColor("#81D4FA"),
-                    Color.parseColor("#4FC3F7"),
-                    Color.parseColor("#29B6F6"),
-                    Color.parseColor("#03A9F4"),
-                    Color.parseColor("#039BE5"),
-                    Color.parseColor("#0288D1"),
-                    Color.parseColor("#0277BD"),
-                    Color.parseColor("#01579B")
-            },
-            new int[]{
-                    Color.parseColor("#E0F7FA"),
-                    Color.parseColor("#B2EBF2"),
-                    Color.parseColor("#80DEEA"),
-                    Color.parseColor("#4DD0E1"),
-                    Color.parseColor("#26C6DA"),
-                    Color.parseColor("#00BCD4"),
-                    Color.parseColor("#00ACC1"),
-                    Color.parseColor("#0097A7"),
-                    Color.parseColor("#00838F"),
-                    Color.parseColor("#006064")
-            },
-            new int[]{
-                    Color.parseColor("#E0F2F1"),
-                    Color.parseColor("#B2DFDB"),
-                    Color.parseColor("#80CBC4"),
-                    Color.parseColor("#4DB6AC"),
-                    Color.parseColor("#26A69A"),
-                    Color.parseColor("#009688"),
-                    Color.parseColor("#00897B"),
-                    Color.parseColor("#00796B"),
-                    Color.parseColor("#00695C"),
-                    Color.parseColor("#004D40")
-            },
-            new int[]{
-                    Color.parseColor("#E8F5E9"),
-                    Color.parseColor("#C8E6C9"),
-                    Color.parseColor("#A5D6A7"),
-                    Color.parseColor("#81C784"),
-                    Color.parseColor("#66BB6A"),
-                    Color.parseColor("#4CAF50"),
-                    Color.parseColor("#43A047"),
-                    Color.parseColor("#388E3C"),
-                    Color.parseColor("#2E7D32"),
-                    Color.parseColor("#1B5E20")
-            },
-            new int[]{
-                    Color.parseColor("#F1F8E9"),
-                    Color.parseColor("#DCEDC8"),
-                    Color.parseColor("#C5E1A5"),
-                    Color.parseColor("#AED581"),
-                    Color.parseColor("#9CCC65"),
-                    Color.parseColor("#8BC34A"),
-                    Color.parseColor("#7CB342"),
-                    Color.parseColor("#689F38"),
-                    Color.parseColor("#558B2F"),
-                    Color.parseColor("#33691E")
-            },
-            new int[]{
-                    Color.parseColor("#F9FBE7"),
-                    Color.parseColor("#F0F4C3"),
-                    Color.parseColor("#E6EE9C"),
-                    Color.parseColor("#DCE775"),
-                    Color.parseColor("#D4E157"),
-                    Color.parseColor("#CDDC39"),
-                    Color.parseColor("#C0CA33"),
-                    Color.parseColor("#AFB42B"),
-                    Color.parseColor("#9E9D24"),
-                    Color.parseColor("#827717")
-            },
-            new int[]{
-                    Color.parseColor("#FFFDE7"),
-                    Color.parseColor("#FFF9C4"),
-                    Color.parseColor("#FFF59D"),
-                    Color.parseColor("#FFF176"),
-                    Color.parseColor("#FFEE58"),
-                    Color.parseColor("#FFEB3B"),
-                    Color.parseColor("#FDD835"),
-                    Color.parseColor("#FBC02D"),
-                    Color.parseColor("#F9A825"),
-                    Color.parseColor("#F57F17")
-            },
-            new int[]{
-                    Color.parseColor("#FFF8E1"),
-                    Color.parseColor("#FFECB3"),
-                    Color.parseColor("#FFE082"),
-                    Color.parseColor("#FFD54F"),
-                    Color.parseColor("#FFCA28"),
-                    Color.parseColor("#FFC107"),
-                    Color.parseColor("#FFB300"),
-                    Color.parseColor("#FFA000"),
-                    Color.parseColor("#FF8F00"),
-                    Color.parseColor("#FF6F00")
-            },
-            new int[]{
-                    Color.parseColor("#FFF3E0"),
-                    Color.parseColor("#FFE0B2"),
-                    Color.parseColor("#FFCC80"),
-                    Color.parseColor("#FFB74D"),
-                    Color.parseColor("#FFA726"),
-                    Color.parseColor("#FF9800"),
-                    Color.parseColor("#FB8C00"),
-                    Color.parseColor("#F57C00"),
-                    Color.parseColor("#EF6C00"),
-                    Color.parseColor("#E65100")
-            },
-            new int[]{
-                    Color.parseColor("#FBE9E7"),
-                    Color.parseColor("#FFCCBC"),
-                    Color.parseColor("#FFAB91"),
-                    Color.parseColor("#FF8A65"),
-                    Color.parseColor("#FF7043"),
-                    Color.parseColor("#FF5722"),
-                    Color.parseColor("#F4511E"),
-                    Color.parseColor("#E64A19"),
-                    Color.parseColor("#D84315"),
-                    Color.parseColor("#BF360C")
-            },
-            new int[]{
-                    Color.parseColor("#EFEBE9"),
-                    Color.parseColor("#D7CCC8"),
-                    Color.parseColor("#BCAAA4"),
-                    Color.parseColor("#A1887F"),
-                    Color.parseColor("#8D6E63"),
-                    Color.parseColor("#795548"),
-                    Color.parseColor("#6D4C41"),
-                    Color.parseColor("#5D4037"),
-                    Color.parseColor("#4E342E"),
-                    Color.parseColor("#3E2723")
-            },
-            new int[]{
-                    Color.parseColor("#FAFAFA"),
-                    Color.parseColor("#F5F5F5"),
-                    Color.parseColor("#EEEEEE"),
-                    Color.parseColor("#E0E0E0"),
-                    Color.parseColor("#BDBDBD"),
-                    Color.parseColor("#9E9E9E"),
-                    Color.parseColor("#757575"),
-                    Color.parseColor("#616161"),
-                    Color.parseColor("#424242"),
-                    Color.parseColor("#212121")
-            },
-            new int[]{
-                    Color.parseColor("#ECEFF1"),
-                    Color.parseColor("#CFD8DC"),
-                    Color.parseColor("#B0BEC5"),
-                    Color.parseColor("#90A4AE"),
-                    Color.parseColor("#78909C"),
-                    Color.parseColor("#607D8B"),
-                    Color.parseColor("#546E7A"),
-                    Color.parseColor("#455A64"),
-                    Color.parseColor("#37474F"),
-                    Color.parseColor("#263238")
-            }
-    };
-
     private int[] mColorsTop;
     private int[][] mColorsSub;
 
     private void generateColors() {
-        if (getBuilder().mHideToplevel == 0) {
-            mColorsTop = COLORS_TOP;
-            mColorsSub = COLORS_SUB;
-            return;
-        }
-
-        mColorsTop = new int[COLORS_TOP.length - 1];
-        int index = 0;
-        int skipIndex = -1;
-        for (int color : COLORS_TOP) {
-            if (color == getBuilder().mHideToplevel) {
-                skipIndex = index;
-                continue;
-            }
-            mColorsTop[index] = color;
-            index++;
-        }
-
-        mColorsSub = new int[mColorsTop.length][COLORS_SUB[0].length];
-        index = 0;
-        for (int i = 0; i < COLORS_SUB.length; i++) {
-            if (i == skipIndex) continue;
-            mColorsSub[index] = COLORS_SUB[i];
-            index++;
+        if (getBuilder().mAccentMode) {
+            mColorsTop = ColorPalette.ACCENT_COLORS;
+            mColorsSub = ColorPalette.ACCENT_COLORS_SUB;
+        } else {
+            mColorsTop = ColorPalette.PRIMARY_COLORS;
+            mColorsSub = ColorPalette.PRIMARY_COLORS_SUB;
         }
     }
 
@@ -340,7 +70,7 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi
 
     private void topIndex(int value) {
         if (topIndex() != value)
-            subIndex(5);
+            subIndex(getBuilder().mAccentMode ? 2 : 5);
         getArguments().putInt("top_index", value);
     }
 
@@ -352,24 +82,8 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi
         getArguments().putInt("sub_index", value);
     }
 
-    private int preselectTop() {
-        return getBuilder().mPreselectTopLevel;
-    }
-
-    private void preselectTop(int value) {
-        setBuilder(getBuilder().preselect(value, getBuilder().mPreselectTopLevel));
-    }
-
-    private int preselectSub() {
-        return getBuilder().mPreselectSubLevel;
-    }
-
-    private void preselectSub(int value) {
-        setBuilder(getBuilder().preselect(getBuilder().mPreselectTopLevel, value));
-    }
-
     @StringRes
-    private int title() {
+    public int getTitle() {
         Builder builder = getBuilder();
         int title;
         if (isInSub()) title = builder.mTitleSub;
@@ -378,6 +92,10 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi
         return title;
     }
 
+    public boolean isAccentMode() {
+        return getBuilder().mAccentMode;
+    }
+
     @Override
     public void onClick(View v) {
         if (v.getTag() != null) {
@@ -394,7 +112,7 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi
     }
 
     public interface ColorCallback {
-        void onColorSelection(@StringRes int dialogTitle, @ColorInt int topLevelColor, @ColorInt int subLevelColor);
+        void onColorSelection(@NonNull ColorChooserDialog dialog, @ColorInt int selectedColor);
     }
 
     @NonNull
@@ -402,27 +120,30 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi
     public Dialog onCreateDialog(Bundle savedInstanceState) {
         if (getBuilder() == null)
             throw new IllegalStateException("ColorChooserDialog should be created using its Builder interface.");
-
         generateColors();
-        final int preselectTop = preselectTop();
-        if (preselectTop != 0) {
-            for (int i = 0; i < mColorsTop.length; i++) {
-                if (mColorsTop[i] == preselectTop) {
-                    topIndex(i);
-                    final int preselectSub = preselectSub();
-                    if (preselectSub != 0) {
-                        for (int b = 0; b < mColorsSub[i].length; b++) {
-                            if (preselectSub == mColorsSub[i][b]) {
-                                subIndex(b);
-                                break;
-                            }
-                        }
-                        preselectSub(0);
-                    }
+
+        final int preselectColor = getBuilder().mPreselect;
+        if (preselectColor != 0) {
+            for (int topIndex = 0; topIndex < mColorsTop.length; topIndex++) {
+                if (mColorsTop[topIndex] == preselectColor) {
+                    topIndex(topIndex);
+                    if (getBuilder().mAccentMode) {
+                        subIndex(2);
+                    } else subIndex(5);
                     break;
                 }
+
+                boolean found = false;
+                for (int subIndex = 0; subIndex < mColorsSub[topIndex].length; subIndex++) {
+                    if (mColorsSub[topIndex][subIndex] == preselectColor) {
+                        topIndex(topIndex);
+                        subIndex(subIndex);
+                        found = true;
+                        break;
+                    }
+                }
+                if (found) break;
             }
-            preselectTop(0);
         }
 
         final DisplayMetrics dm = getResources().getDisplayMetrics();
@@ -442,7 +163,7 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi
         mGrid.setGravity(Gravity.CENTER);
 
         MaterialDialog dialog = new MaterialDialog.Builder(getActivity())
-                .title(title())
+                .title(getTitle())
                 .autoDismiss(false)
                 .customView(mGrid, false)
                 .positiveText(R.string.done)
@@ -450,13 +171,12 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi
                     @Override
                     public void onPositive(MaterialDialog dialog) {
                         super.onPositive(dialog);
-                        int topLevelColor = 0;
-                        int subLevelColor = 0;
-                        if (topIndex() > -1)
-                            topLevelColor = mColorsTop[topIndex()];
+                        int color = 0;
                         if (subIndex() > -1)
-                            subLevelColor = mColorsSub[topIndex()][subIndex()];
-                        mCallback.onColorSelection(title(), topLevelColor, subLevelColor);
+                            color = mColorsSub[topIndex()][subIndex()];
+                        else if (topIndex() > -1)
+                            color = mColorsTop[topIndex()];
+                        mCallback.onColorSelection(ColorChooserDialog.this, color);
                         dismiss();
                     }
 
@@ -478,7 +198,7 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi
             mGrid.setSelector(ResourcesCompat.getDrawable(getResources(), R.drawable.md_transparent, null));
         } else ((BaseAdapter) mGrid.getAdapter()).notifyDataSetChanged();
         if (getDialog() != null)
-            getDialog().setTitle(title());
+            getDialog().setTitle(getTitle());
     }
 
     private class ColorGridAdapter extends BaseAdapter {
@@ -530,11 +250,8 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi
         @StringRes
         protected int mTitleSub;
         @ColorInt
-        protected int mPreselectTopLevel;
-        @ColorInt
-        protected int mPreselectSubLevel;
-        @ColorInt
-        protected int mHideToplevel;
+        protected int mPreselect;
+        protected boolean mAccentMode;
 
         public <ActivityType extends AppCompatActivity & ColorCallback> Builder(@NonNull ActivityType context, @StringRes int title) {
             mContext = context;
@@ -548,22 +265,19 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi
         }
 
         @NonNull
-        public Builder preselect(@ColorInt int topLevelColor, @ColorInt int subLevelColor) {
-            mPreselectTopLevel = topLevelColor;
-            mPreselectSubLevel = subLevelColor;
+        public Builder preselect(@ColorInt int preselect) {
+            mPreselect = preselect;
             return this;
         }
 
         @NonNull
-        public Builder hideTopLevel(@ColorInt int topLevelColor) {
-            mHideToplevel = topLevelColor;
+        public Builder accentMode(boolean accentMode) {
+            mAccentMode = accentMode;
             return this;
         }
 
         @NonNull
         public ColorChooserDialog build() {
-            if (mHideToplevel == mPreselectTopLevel)
-                mPreselectTopLevel = 0;
             ColorChooserDialog dialog = new ColorChooserDialog();
             Bundle args = new Bundle();
             args.putSerializable("builder", this);
@@ -579,12 +293,12 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi
         }
     }
 
-    public Builder getBuilder() {
+    private Builder getBuilder() {
         if (getArguments() == null || !getArguments().containsKey("builder")) return null;
         return (Builder) getArguments().getSerializable("builder");
     }
 
-    public void setBuilder(Builder builder) {
+    private void setBuilder(Builder builder) {
         getArguments().putSerializable("builder", builder);
     }
 

+ 380 - 0
library/src/main/java/com/afollestad/materialdialogs/internal/ColorPalette.java

@@ -0,0 +1,380 @@
+package com.afollestad.materialdialogs.internal;
+
+import android.graphics.Color;
+
+/**
+ * @author Aidan Follestad (afollestad)
+ */
+public final class ColorPalette {
+
+    public final static int[] PRIMARY_COLORS = new int[]{
+            Color.parseColor("#F44336"),
+            Color.parseColor("#E91E63"),
+            Color.parseColor("#9C27B0"),
+            Color.parseColor("#673AB7"),
+            Color.parseColor("#3F51B5"),
+            Color.parseColor("#2196F3"),
+            Color.parseColor("#03A9F4"),
+            Color.parseColor("#00BCD4"),
+            Color.parseColor("#009688"),
+            Color.parseColor("#4CAF50"),
+            Color.parseColor("#8BC34A"),
+            Color.parseColor("#CDDC39"),
+            Color.parseColor("#FFEB3B"),
+            Color.parseColor("#FFC107"),
+            Color.parseColor("#FF9800"),
+            Color.parseColor("#FF5722"),
+            Color.parseColor("#795548"),
+            Color.parseColor("#9E9E9E"),
+            Color.parseColor("#607D8B")
+    };
+
+    public final static int[][] PRIMARY_COLORS_SUB = new int[][]{
+            new int[]{
+                    Color.parseColor("#FFEBEE"),
+                    Color.parseColor("#FFCDD2"),
+                    Color.parseColor("#EF9A9A"),
+                    Color.parseColor("#E57373"),
+                    Color.parseColor("#EF5350"),
+                    Color.parseColor("#F44336"),
+                    Color.parseColor("#E53935"),
+                    Color.parseColor("#D32F2F"),
+                    Color.parseColor("#C62828"),
+                    Color.parseColor("#B71C1C")
+            },
+            new int[]{
+                    Color.parseColor("#FCE4EC"),
+                    Color.parseColor("#F8BBD0"),
+                    Color.parseColor("#F48FB1"),
+                    Color.parseColor("#F06292"),
+                    Color.parseColor("#EC407A"),
+                    Color.parseColor("#E91E63"),
+                    Color.parseColor("#D81B60"),
+                    Color.parseColor("#C2185B"),
+                    Color.parseColor("#AD1457"),
+                    Color.parseColor("#880E4F")
+            },
+            new int[]{
+                    Color.parseColor("#F3E5F5"),
+                    Color.parseColor("#E1BEE7"),
+                    Color.parseColor("#CE93D8"),
+                    Color.parseColor("#BA68C8"),
+                    Color.parseColor("#AB47BC"),
+                    Color.parseColor("#9C27B0"),
+                    Color.parseColor("#8E24AA"),
+                    Color.parseColor("#7B1FA2"),
+                    Color.parseColor("#6A1B9A"),
+                    Color.parseColor("#4A148C")
+            },
+            new int[]{
+                    Color.parseColor("#EDE7F6"),
+                    Color.parseColor("#D1C4E9"),
+                    Color.parseColor("#B39DDB"),
+                    Color.parseColor("#9575CD"),
+                    Color.parseColor("#7E57C2"),
+                    Color.parseColor("#673AB7"),
+                    Color.parseColor("#5E35B1"),
+                    Color.parseColor("#512DA8"),
+                    Color.parseColor("#4527A0"),
+                    Color.parseColor("#311B92")
+            },
+            new int[]{
+                    Color.parseColor("#E8EAF6"),
+                    Color.parseColor("#C5CAE9"),
+                    Color.parseColor("#9FA8DA"),
+                    Color.parseColor("#7986CB"),
+                    Color.parseColor("#5C6BC0"),
+                    Color.parseColor("#3F51B5"),
+                    Color.parseColor("#3949AB"),
+                    Color.parseColor("#303F9F"),
+                    Color.parseColor("#283593"),
+                    Color.parseColor("#1A237E")
+            },
+            new int[]{
+                    Color.parseColor("#E3F2FD"),
+                    Color.parseColor("#BBDEFB"),
+                    Color.parseColor("#90CAF9"),
+                    Color.parseColor("#64B5F6"),
+                    Color.parseColor("#42A5F5"),
+                    Color.parseColor("#2196F3"),
+                    Color.parseColor("#1E88E5"),
+                    Color.parseColor("#1976D2"),
+                    Color.parseColor("#1565C0"),
+                    Color.parseColor("#0D47A1")
+            },
+            new int[]{
+                    Color.parseColor("#E1F5FE"),
+                    Color.parseColor("#B3E5FC"),
+                    Color.parseColor("#81D4FA"),
+                    Color.parseColor("#4FC3F7"),
+                    Color.parseColor("#29B6F6"),
+                    Color.parseColor("#03A9F4"),
+                    Color.parseColor("#039BE5"),
+                    Color.parseColor("#0288D1"),
+                    Color.parseColor("#0277BD"),
+                    Color.parseColor("#01579B")
+            },
+            new int[]{
+                    Color.parseColor("#E0F7FA"),
+                    Color.parseColor("#B2EBF2"),
+                    Color.parseColor("#80DEEA"),
+                    Color.parseColor("#4DD0E1"),
+                    Color.parseColor("#26C6DA"),
+                    Color.parseColor("#00BCD4"),
+                    Color.parseColor("#00ACC1"),
+                    Color.parseColor("#0097A7"),
+                    Color.parseColor("#00838F"),
+                    Color.parseColor("#006064")
+            },
+            new int[]{
+                    Color.parseColor("#E0F2F1"),
+                    Color.parseColor("#B2DFDB"),
+                    Color.parseColor("#80CBC4"),
+                    Color.parseColor("#4DB6AC"),
+                    Color.parseColor("#26A69A"),
+                    Color.parseColor("#009688"),
+                    Color.parseColor("#00897B"),
+                    Color.parseColor("#00796B"),
+                    Color.parseColor("#00695C"),
+                    Color.parseColor("#004D40")
+            },
+            new int[]{
+                    Color.parseColor("#E8F5E9"),
+                    Color.parseColor("#C8E6C9"),
+                    Color.parseColor("#A5D6A7"),
+                    Color.parseColor("#81C784"),
+                    Color.parseColor("#66BB6A"),
+                    Color.parseColor("#4CAF50"),
+                    Color.parseColor("#43A047"),
+                    Color.parseColor("#388E3C"),
+                    Color.parseColor("#2E7D32"),
+                    Color.parseColor("#1B5E20")
+            },
+            new int[]{
+                    Color.parseColor("#F1F8E9"),
+                    Color.parseColor("#DCEDC8"),
+                    Color.parseColor("#C5E1A5"),
+                    Color.parseColor("#AED581"),
+                    Color.parseColor("#9CCC65"),
+                    Color.parseColor("#8BC34A"),
+                    Color.parseColor("#7CB342"),
+                    Color.parseColor("#689F38"),
+                    Color.parseColor("#558B2F"),
+                    Color.parseColor("#33691E")
+            },
+            new int[]{
+                    Color.parseColor("#F9FBE7"),
+                    Color.parseColor("#F0F4C3"),
+                    Color.parseColor("#E6EE9C"),
+                    Color.parseColor("#DCE775"),
+                    Color.parseColor("#D4E157"),
+                    Color.parseColor("#CDDC39"),
+                    Color.parseColor("#C0CA33"),
+                    Color.parseColor("#AFB42B"),
+                    Color.parseColor("#9E9D24"),
+                    Color.parseColor("#827717")
+            },
+            new int[]{
+                    Color.parseColor("#FFFDE7"),
+                    Color.parseColor("#FFF9C4"),
+                    Color.parseColor("#FFF59D"),
+                    Color.parseColor("#FFF176"),
+                    Color.parseColor("#FFEE58"),
+                    Color.parseColor("#FFEB3B"),
+                    Color.parseColor("#FDD835"),
+                    Color.parseColor("#FBC02D"),
+                    Color.parseColor("#F9A825"),
+                    Color.parseColor("#F57F17")
+            },
+            new int[]{
+                    Color.parseColor("#FFF8E1"),
+                    Color.parseColor("#FFECB3"),
+                    Color.parseColor("#FFE082"),
+                    Color.parseColor("#FFD54F"),
+                    Color.parseColor("#FFCA28"),
+                    Color.parseColor("#FFC107"),
+                    Color.parseColor("#FFB300"),
+                    Color.parseColor("#FFA000"),
+                    Color.parseColor("#FF8F00"),
+                    Color.parseColor("#FF6F00")
+            },
+            new int[]{
+                    Color.parseColor("#FFF3E0"),
+                    Color.parseColor("#FFE0B2"),
+                    Color.parseColor("#FFCC80"),
+                    Color.parseColor("#FFB74D"),
+                    Color.parseColor("#FFA726"),
+                    Color.parseColor("#FF9800"),
+                    Color.parseColor("#FB8C00"),
+                    Color.parseColor("#F57C00"),
+                    Color.parseColor("#EF6C00"),
+                    Color.parseColor("#E65100")
+            },
+            new int[]{
+                    Color.parseColor("#FBE9E7"),
+                    Color.parseColor("#FFCCBC"),
+                    Color.parseColor("#FFAB91"),
+                    Color.parseColor("#FF8A65"),
+                    Color.parseColor("#FF7043"),
+                    Color.parseColor("#FF5722"),
+                    Color.parseColor("#F4511E"),
+                    Color.parseColor("#E64A19"),
+                    Color.parseColor("#D84315"),
+                    Color.parseColor("#BF360C")
+            },
+            new int[]{
+                    Color.parseColor("#EFEBE9"),
+                    Color.parseColor("#D7CCC8"),
+                    Color.parseColor("#BCAAA4"),
+                    Color.parseColor("#A1887F"),
+                    Color.parseColor("#8D6E63"),
+                    Color.parseColor("#795548"),
+                    Color.parseColor("#6D4C41"),
+                    Color.parseColor("#5D4037"),
+                    Color.parseColor("#4E342E"),
+                    Color.parseColor("#3E2723")
+            },
+            new int[]{
+                    Color.parseColor("#FAFAFA"),
+                    Color.parseColor("#F5F5F5"),
+                    Color.parseColor("#EEEEEE"),
+                    Color.parseColor("#E0E0E0"),
+                    Color.parseColor("#BDBDBD"),
+                    Color.parseColor("#9E9E9E"),
+                    Color.parseColor("#757575"),
+                    Color.parseColor("#616161"),
+                    Color.parseColor("#424242"),
+                    Color.parseColor("#212121")
+            },
+            new int[]{
+                    Color.parseColor("#ECEFF1"),
+                    Color.parseColor("#CFD8DC"),
+                    Color.parseColor("#B0BEC5"),
+                    Color.parseColor("#90A4AE"),
+                    Color.parseColor("#78909C"),
+                    Color.parseColor("#607D8B"),
+                    Color.parseColor("#546E7A"),
+                    Color.parseColor("#455A64"),
+                    Color.parseColor("#37474F"),
+                    Color.parseColor("#263238")
+            }
+    };
+
+    public final static int[] ACCENT_COLORS = new int[]{
+            Color.parseColor("#FF1744"),
+            Color.parseColor("#F50057"),
+            Color.parseColor("#D500F9"),
+            Color.parseColor("#651FFF"),
+            Color.parseColor("#3D5AFE"),
+            Color.parseColor("#2979FF"),
+            Color.parseColor("#00B0FF"),
+            Color.parseColor("#00E5FF"),
+            Color.parseColor("#1DE9B6"),
+            Color.parseColor("#00E676"),
+            Color.parseColor("#76FF03"),
+            Color.parseColor("#C6FF00"),
+            Color.parseColor("#FFEA00"),
+            Color.parseColor("#FFC400"),
+            Color.parseColor("#FF9100"),
+            Color.parseColor("#FF3D00")
+    };
+
+    public final static int[][] ACCENT_COLORS_SUB = new int[][]{
+            new int[]{
+                    Color.parseColor("#FF8A80"),
+                    Color.parseColor("#FF5252"),
+                    Color.parseColor("#FF1744"),
+                    Color.parseColor("#D50000")
+            },
+            new int[]{
+                    Color.parseColor("#FF80AB"),
+                    Color.parseColor("#FF4081"),
+                    Color.parseColor("#F50057"),
+                    Color.parseColor("#C51162")
+            },
+            new int[]{
+                    Color.parseColor("#EA80FC"),
+                    Color.parseColor("#E040FB"),
+                    Color.parseColor("#D500F9"),
+                    Color.parseColor("#AA00FF")
+            },
+            new int[]{
+                    Color.parseColor("#B388FF"),
+                    Color.parseColor("#7C4DFF"),
+                    Color.parseColor("#651FFF"),
+                    Color.parseColor("#6200EA")
+            },
+            new int[]{
+                    Color.parseColor("#8C9EFF"),
+                    Color.parseColor("#536DFE"),
+                    Color.parseColor("#3D5AFE"),
+                    Color.parseColor("#304FFE")
+            },
+            new int[]{
+                    Color.parseColor("#82B1FF"),
+                    Color.parseColor("#448AFF"),
+                    Color.parseColor("#2979FF"),
+                    Color.parseColor("#2962FF")
+            },
+            new int[]{
+                    Color.parseColor("#80D8FF"),
+                    Color.parseColor("#40C4FF"),
+                    Color.parseColor("#00B0FF"),
+                    Color.parseColor("#0091EA")
+            },
+            new int[]{
+                    Color.parseColor("#84FFFF"),
+                    Color.parseColor("#18FFFF"),
+                    Color.parseColor("#00E5FF"),
+                    Color.parseColor("#00B8D4")
+            },
+            new int[]{
+                    Color.parseColor("#A7FFEB"),
+                    Color.parseColor("#64FFDA"),
+                    Color.parseColor("#1DE9B6"),
+                    Color.parseColor("#00BFA5")
+            },
+            new int[]{
+                    Color.parseColor("#B9F6CA"),
+                    Color.parseColor("#69F0AE"),
+                    Color.parseColor("#00E676"),
+                    Color.parseColor("#00C853")
+            },
+            new int[]{
+                    Color.parseColor("#CCFF90"),
+                    Color.parseColor("#B2FF59"),
+                    Color.parseColor("#76FF03"),
+                    Color.parseColor("#64DD17")
+            },
+            new int[]{
+                    Color.parseColor("#F4FF81"),
+                    Color.parseColor("#EEFF41"),
+                    Color.parseColor("#C6FF00"),
+                    Color.parseColor("#AEEA00")
+            },
+            new int[]{
+                    Color.parseColor("#FFFF8D"),
+                    Color.parseColor("#FFFF00"),
+                    Color.parseColor("#FFEA00"),
+                    Color.parseColor("#FFD600")
+            },
+            new int[]{
+                    Color.parseColor("#FFE57F"),
+                    Color.parseColor("#FFD740"),
+                    Color.parseColor("#FFC400"),
+                    Color.parseColor("#FFAB00")
+            },
+            new int[]{
+                    Color.parseColor("#FFD180"),
+                    Color.parseColor("#FFAB40"),
+                    Color.parseColor("#FF9100"),
+                    Color.parseColor("#FF6D00")
+            },
+            new int[]{
+                    Color.parseColor("#FF9E80"),
+                    Color.parseColor("#FF6E40"),
+                    Color.parseColor("#FF3D00"),
+                    Color.parseColor("#DD2C00")
+            }
+    };
+}

+ 32 - 21
sample/src/main/java/com/afollestad/materialdialogssample/MainActivity.java

@@ -6,6 +6,8 @@ import android.graphics.Color;
 import android.graphics.drawable.ColorDrawable;
 import android.os.Build;
 import android.os.Bundle;
+import android.support.annotation.ColorInt;
+import android.support.annotation.NonNull;
 import android.support.annotation.StringRes;
 import android.support.v4.content.ContextCompat;
 import android.support.v7.app.AppCompatActivity;
@@ -189,10 +191,17 @@ public class MainActivity extends AppCompatActivity implements
             }
         });
 
-        findViewById(R.id.customView_colorChooser).setOnClickListener(new View.OnClickListener() {
+        findViewById(R.id.colorChooser_primary).setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                showCustomColorChooser();
+                showColorChooser(false);
+            }
+        });
+
+        findViewById(R.id.colorChooser_accent).setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                showColorChooser(true);
             }
         });
 
@@ -566,34 +575,36 @@ public class MainActivity extends AppCompatActivity implements
                 .show(getSupportFragmentManager(), "changelog");
     }
 
-    private int topLevelColor;
-    private int subLevelColor;
+    private int primaryPreselect;
+    private int accentPreselect;
 
-    private void showCustomColorChooser() {
+    private void showColorChooser(boolean accent) {
         new ColorChooserDialog.Builder(this, R.string.color_palette)
                 .titleSub(R.string.colors)
-                .hideTopLevel(topLevelColor)
-                .preselect(topLevelColor, subLevelColor)
+                .accentMode(accent)
+                .preselect(accent ? primaryPreselect : accentPreselect)
                 .show();
     }
 
     // Receives callback from color chooser dialog
     @Override
-    public void onColorSelection(@StringRes int dialogTitle, int topLevelColor, int subLevelColor) {
-        this.topLevelColor = topLevelColor;
-        this.subLevelColor = subLevelColor;
-        final int color = subLevelColor != 0 ? subLevelColor : topLevelColor;
-
-        if (getSupportActionBar() != null)
-            getSupportActionBar().setBackgroundDrawable(new ColorDrawable(color));
-        ThemeSingleton.get().positiveColor = DialogUtils.getActionTextStateList(this, color);
-        ThemeSingleton.get().neutralColor = DialogUtils.getActionTextStateList(this, color);
-        ThemeSingleton.get().negativeColor = DialogUtils.getActionTextStateList(this, color);
-        ThemeSingleton.get().widgetColor = color;
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-            getWindow().setStatusBarColor(CircleView.shiftColorDown(color));
-            getWindow().setNavigationBarColor(color);
+    public void onColorSelection(@NonNull ColorChooserDialog dialog, @ColorInt int color) {
+        if (dialog.isAccentMode()) {
+            accentPreselect = color;
+            ThemeSingleton.get().positiveColor = DialogUtils.getActionTextStateList(this, color);
+            ThemeSingleton.get().neutralColor = DialogUtils.getActionTextStateList(this, color);
+            ThemeSingleton.get().negativeColor = DialogUtils.getActionTextStateList(this, color);
+            ThemeSingleton.get().widgetColor = color;
+        } else {
+            primaryPreselect = color;
+            if (getSupportActionBar() != null)
+                getSupportActionBar().setBackgroundDrawable(new ColorDrawable(color));
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+                getWindow().setStatusBarColor(CircleView.shiftColorDown(color));
+                getWindow().setNavigationBarColor(color);
+            }
         }
+
     }
 
     private void showThemed() {

+ 9 - 2
sample/src/main/res/layout/activity_main.xml

@@ -129,11 +129,18 @@
             android:text="@string/customView_webView" />
 
         <Button
-            android:id="@+id/customView_colorChooser"
+            android:id="@+id/colorChooser_primary"
             android:layout_width="match_parent"
             android:layout_height="56dp"
             android:layout_marginTop="@dimen/sample_button_spacing"
-            android:text="@string/customView_colorChooser" />
+            android:text="@string/color_chooser_primary" />
+
+        <Button
+            android:id="@+id/colorChooser_accent"
+            android:layout_width="match_parent"
+            android:layout_height="56dp"
+            android:layout_marginTop="@dimen/sample_button_spacing"
+            android:text="@string/color_chooser_accent" />
 
         <Button
             android:id="@+id/themed"

+ 2 - 1
sample/src/main/res/values/strings.xml

@@ -54,7 +54,8 @@
     <string name="showCancelDismissCallbacks">Show/Cancel/Dismiss Callbacks</string>
     <string name="changelog">Changelog</string>
     <string name="customView_webView">Custom View No Scroll #1</string>
-    <string name="customView_colorChooser">Custom View No Scroll #2</string>
+    <string name="color_chooser_primary">Color Chooser Primary</string>
+    <string name="color_chooser_accent">Color Chooser Accent</string>
     <string name="ssid">SSID</string>
     <string name="ssidLit">Material Dialogs</string>