diff --git a/assets/resources/application/en.xml b/assets/resources/application/en.xml index 8ef7dcade..71bde9eb2 100644 --- a/assets/resources/application/en.xml +++ b/assets/resources/application/en.xml @@ -320,10 +320,10 @@ - - - - + + + + diff --git a/res/layout/color_dialog.xml b/res/layout/color_dialog.xml new file mode 100644 index 000000000..354195e7e --- /dev/null +++ b/res/layout/color_dialog.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + diff --git a/src/org/geometerplus/android/fbreader/preferences/PreferenceActivity.java b/src/org/geometerplus/android/fbreader/preferences/PreferenceActivity.java index f7850588d..f7d0b7435 100644 --- a/src/org/geometerplus/android/fbreader/preferences/PreferenceActivity.java +++ b/src/org/geometerplus/android/fbreader/preferences/PreferenceActivity.java @@ -230,17 +230,18 @@ public class PreferenceActivity extends ZLPreferenceActivity { final Screen colorsScreen = optionsCategory.createPreferenceScreen("colors"); final Category colorsCategory = colorsScreen.createCategory(null); + final ColorProfile profile = fbReader.getColorProfile(); colorsCategory.addPreference(new ZLColorPreference( - this, colorsCategory.Resource, "background" + this, colorsCategory.Resource, "background", profile.BackgroundOption )); colorsCategory.addPreference(new ZLColorPreference( - this, colorsCategory.Resource, "highlighting" + this, colorsCategory.Resource, "highlighting", profile.HighlightingOption )); colorsCategory.addPreference(new ZLColorPreference( - this, colorsCategory.Resource, "text" + this, colorsCategory.Resource, "text", profile.RegularTextOption )); colorsCategory.addPreference(new ZLColorPreference( - this, colorsCategory.Resource, "hyperlink" + this, colorsCategory.Resource, "hyperlink", profile.HyperlinkTextOption )); final Screen marginsScreen = optionsCategory.createPreferenceScreen("margins"); diff --git a/src/org/geometerplus/android/fbreader/preferences/ZLColorPreference.java b/src/org/geometerplus/android/fbreader/preferences/ZLColorPreference.java index d04390981..b0261e76e 100644 --- a/src/org/geometerplus/android/fbreader/preferences/ZLColorPreference.java +++ b/src/org/geometerplus/android/fbreader/preferences/ZLColorPreference.java @@ -20,27 +20,107 @@ package org.geometerplus.android.fbreader.preferences; import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.graphics.drawable.*; import android.preference.DialogPreference; import android.view.View; -import android.widget.ImageView; +import android.widget.SeekBar; +import org.geometerplus.zlibrary.core.util.ZLColor; +import org.geometerplus.zlibrary.core.options.ZLColorOption; import org.geometerplus.zlibrary.core.resources.ZLResource; import org.geometerplus.zlibrary.ui.android.R; +import org.geometerplus.zlibrary.ui.android.util.ZLAndroidColorUtil; class ZLColorPreference extends DialogPreference implements ZLPreference { - ZLColorPreference(Context context, ZLResource resource, String resourceKey) { + private final ZLColorOption myOption; + + private SeekBar myRedSlider; + private SeekBar myGreenSlider; + private SeekBar myBlueSlider; + private final GradientDrawable myPreviewDrawable = new GradientDrawable(); + + ZLColorPreference(Context context, ZLResource resource, String resourceKey, ZLColorOption option) { super(context, null); - setWidgetLayoutResource(R.layout.color_preference_widget); - setTitle(resource.getResource(resourceKey).getValue()); + myOption = option; + //setWidgetLayoutResource(R.layout.color_preference_widget); + final String title = resource.getResource(resourceKey).getValue(); + setTitle(title); + setDialogTitle(title); + setDialogLayoutResource(R.layout.color_dialog); } + @Override + protected void onBindDialogView(View view) { + final ZLColor color = myOption.getValue(); + + myRedSlider = (SeekBar)view.findViewById(R.id.color_red); + myRedSlider.setProgress(color.Red); + + myGreenSlider = (SeekBar)view.findViewById(R.id.color_green); + myGreenSlider.setProgress(color.Green); + + myBlueSlider = (SeekBar)view.findViewById(R.id.color_blue); + myBlueSlider.setProgress(color.Blue); + + final View colorBox = view.findViewById(R.id.color_box); + colorBox.setBackgroundDrawable(myPreviewDrawable); + myPreviewDrawable.setCornerRadius(7); + myPreviewDrawable.setColor(ZLAndroidColorUtil.rgb(color)); + + final SeekBar.OnSeekBarChangeListener listener = new SeekBar.OnSeekBarChangeListener() { + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + myPreviewDrawable.setColor(Color.rgb( + myRedSlider.getProgress(), + myGreenSlider.getProgress(), + myBlueSlider.getProgress() + )); + myPreviewDrawable.invalidateSelf(); + } + + public void onStartTrackingTouch(SeekBar seekBar) { + } + + public void onStopTrackingTouch(SeekBar seekBar) { + myPreviewDrawable.setColor(Color.rgb( + myRedSlider.getProgress(), + myGreenSlider.getProgress(), + myBlueSlider.getProgress() + )); + myPreviewDrawable.invalidateSelf(); + } + }; + myRedSlider.setOnSeekBarChangeListener(listener); + myGreenSlider.setOnSeekBarChangeListener(listener); + myBlueSlider.setOnSeekBarChangeListener(listener); + + super.onBindDialogView(view); + } + + @Override + public void onClick(DialogInterface dialog, int which) { + if (which == DialogInterface.BUTTON_POSITIVE) { + myOption.setValue(new ZLColor( + myRedSlider.getProgress(), + myGreenSlider.getProgress(), + myBlueSlider.getProgress() + )); + } + } + + /* @Override protected void onBindView(View view) { final ImageView colorView = (ImageView)view.findViewById(R.id.color_preference_color); - colorView.setImageResource(R.drawable.fbreader); + //colorView.setImageResource(R.drawable.fbreader); + final Drawable drawable = new ColorDrawable(0x00FF00); + colorView.setImageDrawable(drawable); + super.onBindView(view); } + */ public void onAccept() { }