blob: f8a9e4af4b64299b58e77f260b0e1315f4d0119f [file] [log] [blame]
/*
* Copyright (C) 2016 The Android Open Source Project
*
* 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
* distributed under the License is distributed on an "AS IS" BASIS,
* 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 org.drrickorang.loopback;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.TextView;
public class SettingsPicker extends LinearLayout implements SeekBar.OnSeekBarChangeListener,
CatchEventsEditText.EditTextEventListener {
protected TextView mTitleTextView;
protected CatchEventsEditText mValueEditText;
protected SeekBar mValueSeekBar;
protected SettingChangeListener mSettingsChangeListener;
protected int mMinimumValue;
protected int mMaximumValue;
public interface SettingChangeListener {
public void settingChanged(int value);
}
public SettingsPicker(Context context, AttributeSet attrs) {
super(context, attrs);
inflate(context, R.layout.settings_picker, this);
mTitleTextView = (TextView) findViewById(R.id.settings_title);
mValueEditText = (CatchEventsEditText) findViewById(R.id.settings_valueText);
mValueSeekBar = (SeekBar) findViewById(R.id.settings_seekbar);
mValueEditText.setEditTextEvenListener(this);
mValueSeekBar.setOnSeekBarChangeListener(this);
}
public void setMinMaxDefault(int min, int max, int def) {
mMinimumValue = min;
mMaximumValue = max;
mValueSeekBar.setMax(max - min);
setValue(def);
}
public void setTitle(String title) {
mTitleTextView.setText(title);
}
public void setValue(int value) {
mValueSeekBar.setProgress(value - mMinimumValue);
mValueEditText.setText(Integer.toString(value));
}
public void setSettingsChangeListener(SettingChangeListener settingsChangeListener) {
mSettingsChangeListener = settingsChangeListener;
}
protected void textChanged(int value) {
mValueSeekBar.setProgress(value - mMinimumValue);
if (mSettingsChangeListener != null) {
mSettingsChangeListener.settingChanged(value);
}
}
protected void sliderChanged(int value, boolean userInteractionFinished) {
mValueEditText.setText(Integer.toString(value));
if (userInteractionFinished && mSettingsChangeListener != null) {
mSettingsChangeListener.settingChanged(value);
}
}
@Override
public void textEdited(EditText v) {
if (!v.getText().toString().isEmpty()) {
int value;
try {
value = Integer.parseInt(v.getText().toString());
} catch (NumberFormatException e) {
value = mMinimumValue;
v.setText(Integer.toString(value));
}
if (value < mMinimumValue) {
value = mMinimumValue;
v.setText(Integer.toString(value));
} else if (value > mMaximumValue) {
value = mMaximumValue;
v.setText(Integer.toString(value));
}
textChanged(value);
} else {
sliderChanged(mMinimumValue + mValueSeekBar.getProgress(), false);
}
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
sliderChanged(mMinimumValue + progress, false);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
sliderChanged(mMinimumValue + seekBar.getProgress(), true);
}
@Override
public void setEnabled(boolean enabled) {
mValueEditText.setEnabled(enabled);
mValueSeekBar.setEnabled(enabled);
}
}