haptic feedback duration preference
This commit is contained in:
@@ -152,7 +152,7 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
|
||||
|
||||
private class OnDragListenerVibrator extends OnDragListenerWrapper {
|
||||
|
||||
private static final long VIBRATION_TIME = 50;
|
||||
private static final float VIBRATION_TIME_SCALE = 0.5f;
|
||||
|
||||
@NotNull
|
||||
private final VibratorContainer vibrator;
|
||||
@@ -161,7 +161,7 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
|
||||
@Nullable Vibrator vibrator,
|
||||
@NotNull SharedPreferences preferences) {
|
||||
super(onDragListener);
|
||||
this.vibrator = new VibratorContainer(vibrator, preferences, VIBRATION_TIME);
|
||||
this.vibrator = new VibratorContainer(vibrator, preferences, VIBRATION_TIME_SCALE);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -9,6 +9,7 @@ import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceActivity;
|
||||
import org.solovyev.android.calculator.model.CalculatorEngine;
|
||||
import org.solovyev.android.view.widgets.VibratorContainer;
|
||||
|
||||
/**
|
||||
* User: serso
|
||||
@@ -26,12 +27,15 @@ public class CalculatorPreferencesActivity extends PreferenceActivity implements
|
||||
final SharedPreferences preferences = getPreferenceManager().getSharedPreferences();
|
||||
preferences.registerOnSharedPreferenceChangeListener(this);
|
||||
onSharedPreferenceChanged(preferences, CalculatorEngine.ROUND_RESULT_P_KEY);
|
||||
onSharedPreferenceChanged(preferences, VibratorContainer.HAPTIC_FEEDBACK_P_KEY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
|
||||
if (CalculatorEngine.ROUND_RESULT_P_KEY.equals(key)) {
|
||||
findPreference(CalculatorEngine.RESULT_PRECISION_P_KEY).setEnabled(preferences.getBoolean(key, true));
|
||||
} else if (VibratorContainer.HAPTIC_FEEDBACK_P_KEY.equals(key)) {
|
||||
findPreference(VibratorContainer.HAPTIC_FEEDBACK_DURATION_P_KEY).setEnabled(preferences.getBoolean(key, true));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -19,14 +19,14 @@ import org.jetbrains.annotations.Nullable;
|
||||
*/
|
||||
public class OnClickListenerVibrator implements View.OnClickListener {
|
||||
|
||||
private static final long VIBRATION_TIME = 100;
|
||||
private static final float VIBRATION_TIME_SCALE = 1.0f;
|
||||
|
||||
@NotNull
|
||||
private VibratorContainer vibrator;
|
||||
|
||||
public OnClickListenerVibrator(@Nullable Vibrator vibrator,
|
||||
@NotNull SharedPreferences preferences) {
|
||||
this.vibrator = new VibratorContainer(vibrator, preferences, VIBRATION_TIME);
|
||||
this.vibrator = new VibratorContainer(vibrator, preferences, VIBRATION_TIME_SCALE);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -10,6 +10,7 @@ import android.content.SharedPreferences;
|
||||
import android.os.Vibrator;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.solovyev.common.NumberMapper;
|
||||
|
||||
/**
|
||||
* User: serso
|
||||
@@ -18,18 +19,23 @@ import org.jetbrains.annotations.Nullable;
|
||||
*/
|
||||
public class VibratorContainer implements SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
|
||||
private static final String HAPTIC_FEEDBACK_PREFERENCE = "org.solovyev.android.calculator.CalculatorModel_haptic_feedback";
|
||||
public static final String HAPTIC_FEEDBACK_P_KEY = "org.solovyev.android.calculator.CalculatorModel_haptic_feedback";
|
||||
public static final String HAPTIC_FEEDBACK_DURATION_P_KEY = "org.solovyev.android.calculator.CalculatorActivity_calc_haptic_feedback_duration_key";
|
||||
|
||||
private final long defaultVibrationTime;
|
||||
private final static NumberMapper<Long> mapper = new NumberMapper<Long>(Long.class);
|
||||
|
||||
private static final long defaultVibrationTime = 100;
|
||||
|
||||
private final float vibrationTimeScale;
|
||||
|
||||
@Nullable
|
||||
private final Vibrator vibrator;
|
||||
|
||||
private long time = 0;
|
||||
|
||||
public VibratorContainer(@Nullable Vibrator vibrator, @NotNull SharedPreferences preferences, long defaultVibrationTime) {
|
||||
public VibratorContainer(@Nullable Vibrator vibrator, @NotNull SharedPreferences preferences, float vibrationTimeScale) {
|
||||
this.vibrator = vibrator;
|
||||
this.defaultVibrationTime = defaultVibrationTime;
|
||||
this.vibrationTimeScale = vibrationTimeScale;
|
||||
|
||||
preferences.registerOnSharedPreferenceChangeListener(this);
|
||||
onSharedPreferenceChanged(preferences, null);
|
||||
@@ -44,10 +50,15 @@ public class VibratorContainer implements SharedPreferences.OnSharedPreferenceCh
|
||||
|
||||
@Override
|
||||
public void onSharedPreferenceChanged(SharedPreferences preferences, @Nullable String key) {
|
||||
if (preferences.getBoolean(HAPTIC_FEEDBACK_PREFERENCE, false)) {
|
||||
this.time = defaultVibrationTime;
|
||||
if (preferences.getBoolean(HAPTIC_FEEDBACK_P_KEY, false)) {
|
||||
//noinspection ConstantConditions
|
||||
this.time = getScaledValue(mapper.parseValue(preferences.getString(HAPTIC_FEEDBACK_DURATION_P_KEY, mapper.formatValue(getScaledValue(defaultVibrationTime)))));
|
||||
} else {
|
||||
this.time = 0;
|
||||
}
|
||||
}
|
||||
|
||||
private long getScaledValue(long vibrationTime) {
|
||||
return (long) (vibrationTime * vibrationTimeScale);
|
||||
}
|
||||
}
|
||||
|
@@ -33,6 +33,8 @@ public class NumberParser<T extends Number> implements Parser<T> {
|
||||
result = (T) Integer.valueOf(value);
|
||||
} else if (this.clazz.equals(Float.class)) {
|
||||
result = (T) Float.valueOf(value);
|
||||
} else if (this.clazz.equals(Long.class)) {
|
||||
result = (T) Long.valueOf(value);
|
||||
} else {
|
||||
throw new UnsupportedOperationException(this.clazz + " is not supported!");
|
||||
}
|
||||
|
Reference in New Issue
Block a user