private void topIndex(int value) { if (topIndex() != value) findSubIndexForColor(value, mColorsTop[value]); getArguments().putInt("top_index", value); }
@NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { if (getArguments() == null || !getArguments().containsKey("builder")) throw new IllegalStateException( "ColorChooserDialog should be created using its Builder interface."); generateColors(); 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 if (getBuilder().mColorsSub != null) { findSubIndexForColor(topIndex, preselectColor); } else { subIndex(5); } break; } if (mColorsSub != null) { 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; } } } final DisplayMetrics dm = getResources().getDisplayMetrics(); mCircleSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 56, dm); mGrid = new GridView(getContext()); mGrid.setLayoutParams( new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); mGrid.setColumnWidth(mCircleSize); mGrid.setNumColumns(GridView.AUTO_FIT); final int eightDp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, dm); mGrid.setVerticalSpacing(eightDp); mGrid.setHorizontalSpacing(eightDp); final int sixteenDp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 16, dm); mGrid.setPadding(sixteenDp, sixteenDp, sixteenDp, sixteenDp); mGrid.setClipToPadding(false); mGrid.setStretchMode(GridView.STRETCH_COLUMN_WIDTH); mGrid.setGravity(Gravity.CENTER); Builder builder = getBuilder(); MaterialDialog dialog = new MaterialDialog.Builder(getActivity()) .title(getTitle()) .autoDismiss(false) .customView(mGrid, false) .neutralText(builder.mCancelBtn) .positiveText(builder.mDoneBtn) .onPositive( new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { mCallback.onColorSelection(ColorChooserDialog.this, getSelectedColor()); dismiss(); } }) .onNeutral( new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { if (isInSub()) { dialog.setActionButton(DialogAction.NEUTRAL, getBuilder().mCancelBtn); isInSub(false); invalidate(); } else { dialog.cancel(); } } }) .showListener( new DialogInterface.OnShowListener() { @Override public void onShow(DialogInterface dialog) { invalidateDynamicButtonColors(); } }) .build(); invalidate(); return dialog; }