/*******************************************************************************
* Copyright 2011 The Regents of the University of California
*
* 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.ohmage.prompt.number;
import org.ohmage.NumberPicker;
import org.ohmage.NumberPicker.OnChangedListener;
import org.ohmage.R;
import org.ohmage.prompt.AbstractPrompt;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
public class NumberPrompt extends AbstractPrompt {
private int mMinimum;
private int mMaximum;
private int mValue;
private NumberPicker mNumberPicker;
public NumberPrompt() {
super();
}
public void setMinimum(int value) {
mMinimum = value;
}
public void setMaximum(int value) {
mMaximum = value;
}
public int getMinimum(){
return mMinimum;
}
public int getMaximum(){
return mMaximum;
}
public int getValue(){
return mValue;
}
@Override
protected void clearTypeSpecificResponseData() {
if (mDefaultValue != null && ! mDefaultValue.equals("")) {
mValue = Integer.parseInt(getDefaultValue());
} else {
mValue = mMinimum;
}
}
/**
* Returns true if the current value falls between the minimum and the
* maximum.
*/
@Override
public boolean isPromptAnswered() {
// If there is a number picker, see if the value is valid
// And check the value is between min and max
return (mNumberPicker != null && mNumberPicker.forceValidateInput() || mNumberPicker == null)
&& ((mValue >= mMinimum) && (mValue <= mMaximum));
}
@Override
protected Object getTypeSpecificResponseObject() {
return Integer.valueOf(mValue);
}
/**
* The text to be displayed to the user if the prompt is considered
* unanswered.
*/
@Override
public String getUnansweredPromptText() {
return("Please choose a value between " + mMinimum + " and " + mMaximum + ".");
}
@Override
protected Object getTypeSpecificExtrasObject() {
return null;
}
@Override
public View getView(Context context) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(getLayoutResource(), null);
mNumberPicker = (NumberPicker) layout.findViewById(R.id.number_picker);
mNumberPicker.setRange(mMinimum, mMaximum);
mNumberPicker.setCurrent(mValue);
mNumberPicker.setOnChangeListener(new OnChangedListener() {
@Override
public void onChanged(NumberPicker picker, int oldVal, int newVal) {
mValue = newVal;
}
});
return layout;
}
protected int getLayoutResource() {
return R.layout.prompt_number;
}
}