Improve Preference

This commit is contained in:
seven332 committed 2015-05-30 03:07:38 +08:00
1 parent 374395eec9
commit 2ffd764e63
19 files changed
+472 -119

No files matched your search

@@ -0,0 +1,84 @@
/*
* Copyright (C) 2015 Hippo Seven
*
* 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
* 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.hippo.ehviewer.ui.scene;
import android.content.res.Resources;
import android.os.Bundle;
import com.hippo.ehviewer.BuildConfig;
import com.hippo.ehviewer.Constants;
import com.hippo.ehviewer.R;
import com.hippo.scene.preference.Preference;
import com.hippo.scene.preference.PreferenceCategory;
import com.hippo.scene.preference.PreferenceScene;
import com.hippo.scene.preference.PreferenceSet;
import com.hippo.scene.preference.SwitchPreference;
import com.hippo.util.Messenger;
public class AdvanceSettingsScene extends PreferenceScene implements Preference.OnValueChangeListener {
private static final String KEY_SHOW_APPLICATION_STATS = "show_application_stats";
private static final boolean DEFAULT_SHOW_APPLICATION_STATS = BuildConfig.DEBUG;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle(R.string.settings);
setIcon(R.drawable.ic_arrow_left_dark);
setPreferenceSet(getPreferenceSet());
}
@Override
public void onIconClick() {
finish();
}
private PreferenceSet[] getPreferenceSet() {
Resources resources = getStageActivity().getResources();
SwitchPreference statsPreference = new SwitchPreference(KEY_SHOW_APPLICATION_STATS,
resources.getString(R.string.settings_show_application_stats_title),
resources.getString(R.string.settings_show_application_stats_summary));
statsPreference.setDefaultValue(DEFAULT_SHOW_APPLICATION_STATS);
statsPreference.setOnValueChangeListener(this);
PreferenceSet preferenceSet = new PreferenceSet();
preferenceSet.setPreferenceCategory(
new PreferenceCategory(resources.getString(R.string.settings_advance)));
preferenceSet.setPreferenceList(new Preference[] {
statsPreference
});
return new PreferenceSet[] {
preferenceSet
};
}
@Override
public boolean OnValueChange(Preference preference, Object newValue) {
String key = preference.getKey();
switch (key) {
case KEY_SHOW_APPLICATION_STATS:
Messenger.getInstance().notify(Constants.MESSENGER_ID_SHOW_APP_STATUS, newValue);
return true;
default:
return true;
}
}
}
@@ -19,12 +19,10 @@ import android.content.res.Resources;
import android.os.Bundle;
import com.hippo.ehviewer.R;
import com.hippo.scene.preference.DialogPreference;
import com.hippo.scene.preference.Preference;
import com.hippo.scene.preference.PreferenceCategory;
import com.hippo.scene.preference.PreferenceScene;
import com.hippo.scene.preference.PreferenceSet;
import com.hippo.scene.preference.SwitchPreference;
public class DisplaySettingsScene extends PreferenceScene {
@@ -42,18 +40,9 @@ public class DisplaySettingsScene extends PreferenceScene {
Resources resources = getStageActivity().getResources();
PreferenceSet preferenceSet = new PreferenceSet();
preferenceSet.setPreferenceCategory(new PreferenceCategory("Display"));
preferenceSet.setPreferenceCategory(new PreferenceCategory(resources.getString(R.string.settings_display)));
Preference[] preferences = new Preference[] {
new SwitchPreference("custom_theme_color", "屏幕方向", "速度速度速度速度加快"),
new Preference("fdfdfdf", "哈哈哈", "恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地"),
new Preference("fdfdfdf", "哈哈哈", "恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地"),
new Preference("fdfdfdf", "哈哈哈", "恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地"),
new Preference("fdfdfdf", "哈哈哈", "恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地"),
new Preference("fdfdfdf", "哈哈哈", "恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地"),
new Preference("fdfdfdf", "哈哈哈", "恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地"),
new DialogPreference("sssss", "ssssssssss", "sssssssssss"),
new Preference("fdfdfdf", "哈哈哈", "恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地")
};
preferenceSet.setPreferenceList(preferences);
@@ -0,0 +1,86 @@
/*
* Copyright (C) 2015 Hippo Seven
*
* 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
* 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.hippo.ehviewer.ui.scene;
import android.content.res.Resources;
import android.os.Bundle;
import com.hippo.ehviewer.BuildConfig;
import com.hippo.ehviewer.Constants;
import com.hippo.ehviewer.R;
import com.hippo.ehviewer.client.EhClient;
import com.hippo.scene.preference.ListPreference;
import com.hippo.scene.preference.Preference;
import com.hippo.scene.preference.PreferenceCategory;
import com.hippo.scene.preference.PreferenceScene;
import com.hippo.scene.preference.PreferenceSet;
import com.hippo.util.Messenger;
public final class EHSettingsScene extends PreferenceScene implements Preference.OnValueChangeListener {
private static final String KEY_EH_SOURCE = "eh_source";
private static final int DEFAULT_EH_SOURCE = BuildConfig.DEBUG ?
EhClient.SOURCE_EX : EhClient.SOURCE_G;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle(R.string.settings);
setIcon(R.drawable.ic_arrow_left_dark);
setPreferenceSet(getPreferenceSet());
}
@Override
public void onIconClick() {
finish();
}
private PreferenceSet[] getPreferenceSet() {
Resources resources = getStageActivity().getResources();
ListPreference sourcePreference = new ListPreference(KEY_EH_SOURCE,
resources.getString(R.string.settings_eh_source_title), null);
sourcePreference.setKeys(resources.getStringArray(R.array.settings_eh_source_entries));
sourcePreference.setValues(resources.getIntArray(R.array.settings_eh_source_entry_values));
sourcePreference.setDefaultValue(DEFAULT_EH_SOURCE);
sourcePreference.setOnValueChangeListener(this);
PreferenceSet preferenceSet = new PreferenceSet();
preferenceSet.setPreferenceCategory(new PreferenceCategory(resources.getString(R.string.settings_eh)));
preferenceSet.setPreferenceList(new Preference[] {
sourcePreference
});
return new PreferenceSet[] {
preferenceSet
};
}
@Override
public boolean OnValueChange(Preference preference, Object newValue) {
String key = preference.getKey();
switch (key) {
case KEY_EH_SOURCE:
Messenger.getInstance().notify(Constants.MESSENGER_ID_EH_SOURCE, newValue);
return true;
default:
return true;
}
}
}
@@ -34,20 +34,31 @@ public final class MainSettingsScene extends PreferenceHeaderScene {
Resources resources = getStageActivity().getResources();
PreferenceHeader[] phs = new PreferenceHeader[] {
new PreferenceHeader(
resources.getDrawable(R.drawable.ic_cellphone_android_theme_primary),
resources.getString(R.string.display),
DisplaySettingsScene.class
),
new PreferenceHeader(
resources.getDrawable(R.drawable.ic_eh_theme_primary),
resources.getString(R.string.eh),
null
)
newPreferenceHeader(
R.drawable.ic_cellphone_android_theme_primary,
R.string.settings_display,
DisplaySettingsScene.class),
newPreferenceHeader(
R.drawable.ic_eh_theme_primary,
R.string.settings_eh,
EHSettingsScene.class),
newPreferenceHeader(
R.drawable.ic_lambda_theme_primary,
R.string.settings_advance,
AdvanceSettingsScene.class)
};
setPreferenceHeaders(phs);
}
private PreferenceHeader newPreferenceHeader(int drawableId, int titleId, Class clazz) {
Resources resources = getStageActivity().getResources();
return new PreferenceHeader(
resources.getDrawable(drawableId),
resources.getString(titleId),
clazz
);
}
@Override
public void onIconClick() {
finish();
@@ -20,9 +20,7 @@ import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import com.hippo.ehviewer.BuildConfig;
import com.hippo.ehviewer.Constants;
import com.hippo.ehviewer.client.EhClient;
import com.hippo.util.Messenger;
public final class Config {
@@ -104,7 +102,6 @@ public final class Config {
value = DEFAULT_EH_SOURCE;
}
putInt(KEY_EH_SOURCE, value);
Messenger.getInstance().notify(Constants.MESSENGER_ID_EH_SOURCE, value);
}
public static boolean getSignIn() {
@@ -254,9 +254,9 @@ public class SimpleDialog extends SceneDialog implements View.OnClickListener,
}
}
public int getSelectItemPosition() {
public int getCheckedItemPosition() {
// TODO check mListView isShown
return mListView.getSelectedItemPosition();
return mListView.getCheckedItemPosition();
}
@Override
@@ -1,54 +0,0 @@
package com.hippo.scene.preference;
import android.support.v7.widget.RecyclerView;
import com.hippo.ehviewer.util.Config;
import com.hippo.scene.SimpleDialog;
// TODO show current value as summary
public class DialogPreference extends Preference {
private CharSequence[] mKeys;
private int[] mValues;
private int mDefaultValue;
public DialogPreference(String key, String title, String summary) {
super(key, title, summary);
}
public void setKeys(CharSequence[] keys) {
mKeys = keys;
}
public void setValues(int[] values) {
mValues = values;
}
public void setDefaultValue(int defaultValue) {
mDefaultValue = defaultValue;
}
@Override
public boolean onClick(RecyclerView.ViewHolder viewHolder, int x, int y) {
if (!super.onClick(viewHolder, x, y)) {
new SimpleDialog.Builder(viewHolder.itemView.getContext())
.setTitle(getTitle())
.setSingleChoiceItems(mKeys, Config.getInt(getKey(), mDefaultValue), null)
.setStartPoint(x, y)
.setOnCloseListener(new SimpleDialog.OnCloseListener() {
@Override
public void onClose(SimpleDialog dialog, boolean cancel) {
if (!cancel) {
int position = dialog.getSelectItemPosition();
if (position >= 0 && position < mValues.length) {
Config.putInt(getKey(), mValues[position]);
// TODO Update summary
}
}
}
}).show();
}
return true;
}
}
@@ -0,0 +1,88 @@
package com.hippo.scene.preference;
import android.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import com.hippo.ehviewer.util.Config;
import com.hippo.scene.SimpleDialog;
// TODO show current value as summary
public class ListPreference extends Preference {
private String[] mKeys;
private int[] mValues;
private int mDefaultValue;
public ListPreference(String key, String title, String summary) {
super(key, title, summary);
}
public void setKeys(String[] keys) {
mKeys = keys;
}
public void setValues(int[] values) {
mValues = values;
}
public void setDefaultValue(int defaultValue) {
mDefaultValue = defaultValue;
}
@Override
public String getDisplaySummary() {
int position = getValuePosition();
if (position >= 0 && position < mKeys.length) {
return mKeys[getValuePosition()];
} else {
return null;
}
}
private int getValuePosition() {
return getValuePosition(Config.getInt(getKey(), mDefaultValue));
}
private int getValuePosition(int value) {
int length = mValues.length;
for (int i = 0; i < length; i++) {
if (value == mValues[i]) {
return i;
}
}
return -1;
}
@Override
protected void storeValue(Object newValue) {
Config.putInt(getKey(), (Integer) newValue);
}
@Override
protected void onUpdateViewByNewValue(@NonNull RecyclerView.ViewHolder viewHolder, Object newValue) {
updateSummary(viewHolder);
}
@Override
public boolean onClick(RecyclerView.ViewHolder viewHolder, int x, int y) {
if (!super.onClick(viewHolder, x, y)) {
new SimpleDialog.Builder(viewHolder.itemView.getContext())
.setTitle(getTitle())
.setSingleChoiceItems(mKeys, getValuePosition(), null)
.setStartPoint(x, y)
.setOnCloseListener(new SimpleDialog.OnCloseListener() {
@Override
public void onClose(SimpleDialog dialog, boolean cancel) {
if (!cancel) {
int position = dialog.getCheckedItemPosition();
if (position >= 0 && position < mValues.length) {
setValue(mValues[position]);
}
}
}
}).show();
}
return true;
}
}
@@ -15,9 +15,11 @@
package com.hippo.scene.preference;
import android.annotation.NonNull;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
@@ -27,23 +29,32 @@ public class Preference extends PreferenceBase {
private int mPosition;
private String mKey;
private @NonNull String mKey;
private String mTitle;
private String mSummary;
private OnClickListener mOnClickListener;
private OnValueChangeListener mOnValueChangeListener;
private ViewHolderGetter mViewHolderGetter;
public Preference(String key, String title, String summary) {
public Preference(@NonNull String key, String title, String summary) {
mKey = key;
mTitle = title;
mSummary = summary;
}
public String getKey() {
public @NonNull String getKey() {
return mKey;
}
public String getTitle() {
return mTitle;
}
public String getSummary() {
return mSummary;
}
public int getPosition() {
return mPosition;
}
@@ -52,6 +63,38 @@ public class Preference extends PreferenceBase {
mPosition = position;
}
/**
* @return the text display below title
*/
public String getDisplaySummary() {
return mSummary;
}
/**
* Call it when you want to save new value
*/
public void setValue(Object newValue) {
if (mOnValueChangeListener == null || mOnValueChangeListener.OnValueChange(this, newValue)) {
storeValue(newValue);
RecyclerView.ViewHolder viewHolder = getViewHolder();
if (viewHolder != null) {
onUpdateViewByNewValue(viewHolder, newValue);
}
}
}
/**
* Save value to file
*/
protected void storeValue(Object newValue) {
}
/**
* Update view because value change
*/
protected void onUpdateViewByNewValue(@NonNull RecyclerView.ViewHolder viewHolder, Object newValue) {
}
@Override
int getItemViewType() {
return PreferenceCenter.TYPE_PEFERENCE;
@@ -65,7 +108,9 @@ public class Preference extends PreferenceBase {
void bindViewHolder(Context context, RecyclerView.ViewHolder viewHolder) {
PreferenceHolder pvh = (PreferenceHolder) viewHolder;
pvh.title.setText(mTitle);
pvh.summary.setText(mSummary);
updateSummary(viewHolder);
if (!stableWidgetFrame() || !pvh.hasSetWidgetFrame) {
pvh.widgetFrame.removeAllViews();
onBind(context, pvh.widgetFrame);
@@ -81,6 +126,22 @@ public class Preference extends PreferenceBase {
protected void onUpdateView(RecyclerView.ViewHolder viewHolder) {
}
protected void updateSummary(RecyclerView.ViewHolder viewHolder) {
if (viewHolder == null) {
viewHolder = getViewHolder();
}
if (viewHolder != null) {
PreferenceHolder pvh = (PreferenceHolder) viewHolder;
String displaySummary = getDisplaySummary();
if (displaySummary == null) {
pvh.summary.setVisibility(View.GONE);
} else {
pvh.summary.setVisibility(View.VISIBLE);
pvh.summary.setText(displaySummary);
}
}
}
@Override
public boolean onClick(RecyclerView.ViewHolder viewHolder, int x, int y) {
return mOnClickListener != null && mOnClickListener.onClick();
@@ -90,23 +151,7 @@ public class Preference extends PreferenceBase {
return false;
}
public String getSummary() {
return mSummary;
}
public void setSummary(String summary) {
mSummary = summary;
}
public String getTitle() {
return mTitle;
}
public void setTitle(String title) {
mTitle = title;
}
public RecyclerView.ViewHolder getViewHolder() {
private RecyclerView.ViewHolder getViewHolder() {
if (mViewHolderGetter != null) {
return mViewHolderGetter.getViewHolder(mPosition);
} else {
@@ -118,7 +163,11 @@ public class Preference extends PreferenceBase {
mOnClickListener = listener;
}
public void setViewHolderGetter(ViewHolderGetter viewHolderGetter) {
public void setOnValueChangeListener(OnValueChangeListener listener) {
mOnValueChangeListener = listener;
}
void setViewHolderGetter(ViewHolderGetter viewHolderGetter) {
mViewHolderGetter = viewHolderGetter;
}
@@ -126,7 +175,11 @@ public class Preference extends PreferenceBase {
boolean onClick();
}
public interface ViewHolderGetter {
public interface OnValueChangeListener {
boolean OnValueChange(Preference preference, Object newValue);
}
interface ViewHolderGetter {
RecyclerView.ViewHolder getViewHolder(int position);
}
}
@@ -38,7 +38,7 @@ public final class PreferenceCenter {
register(TYPE_PEFERENCE_CATEGORY, PreferenceCategory.class);
register(TYPE_PEFERENCE, Preference.class);
register(TYPE_SWITCH_PEFERENCE, SwitchPreference.class);
register(TYPE_DIALOG_PEFERENCE, DialogPreference.class);
register(TYPE_DIALOG_PEFERENCE, ListPreference.class);
}
@SuppressWarnings("unchecked")
@@ -36,7 +36,7 @@ public class PreferenceDivider extends PreferenceBase {
}
@Override
void bindViewHolde(Context context, RecyclerView.ViewHolder viewHolder) {
void bindViewHolder(Context context, RecyclerView.ViewHolder viewHolder) {
// Empty
}
}
@@ -89,6 +89,7 @@ public class PreferenceScene extends AppbarScene {
}
Preference p = ps.getPreferenceData(i);
p.setPosition(position);
p.setViewHolderGetter(mPreferenceViewHolderGetter);
preferenceBaseList.add(p);
position++;
}
@@ -15,6 +15,7 @@
package com.hippo.scene.preference;
import android.annotation.NonNull;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.SwitchCompat;
@@ -26,16 +27,55 @@ import com.hippo.ehviewer.util.Config;
public class SwitchPreference extends Preference {
private String mSummaryOn;
private String mSummaryOff;
private boolean mDefaultValue;
public SwitchPreference(String key, String title, String summary) {
super(key, title, summary);
}
public void setSummaryOn(String summaryOn) {
mSummaryOn = summaryOn;
}
public void setSummaryOff(String summaryOff) {
mSummaryOff = summaryOff;
}
public void setDefaultValue(boolean defaultValue) {
mDefaultValue = defaultValue;
}
@Override
public String getDisplaySummary() {
String displaySummary = getValue() ? mSummaryOn : mSummaryOff;
if (displaySummary == null) {
displaySummary = getSummary();
}
return displaySummary;
}
private boolean getValue() {
return Config.getBoolean(getKey(), mDefaultValue);
}
private SwitchCompat getSwitch(RecyclerView.ViewHolder viewHolder) {
return (SwitchCompat) ((PreferenceHolder) viewHolder).widgetFrame.getChildAt(0);
}
@Override
protected void storeValue(Object newValue) {
Config.putBoolean(getKey(), (Boolean) newValue);
}
@Override
protected void onUpdateViewByNewValue(@NonNull RecyclerView.ViewHolder viewHolder, Object newValue) {
getSwitch(viewHolder).setChecked((Boolean) newValue);
updateSummary(viewHolder);
}
@Override
int getItemViewType() {
return PreferenceCenter.TYPE_SWITCH_PEFERENCE;
@@ -49,18 +89,13 @@ public class SwitchPreference extends Preference {
@Override
protected void onUpdateView(RecyclerView.ViewHolder viewHolder) {
PreferenceHolder pvh = (PreferenceHolder) viewHolder;
((SwitchCompat) pvh.widgetFrame.getChildAt(0))
.setChecked(Config.getBoolean(getKey(), mDefaultValue));
getSwitch(viewHolder).setChecked(getValue());
}
@Override
public boolean onClick(RecyclerView.ViewHolder viewHolder, int x, int y) {
if (!super.onClick(viewHolder, x, y)) {
PreferenceHolder pvh = (PreferenceHolder) viewHolder;
SwitchCompat switchCompat = (SwitchCompat) pvh.widgetFrame.getChildAt(0);
switchCompat.toggle();
Config.putBoolean(getKey(), switchCompat.isChecked());
setValue(!getValue());
}
return true;
}