package org.odk.collect.android.views;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.preference.ListPreference;
import android.util.AttributeSet;
public class DynamicListPreference extends ListPreference {
// control whether dialog should show or not
private boolean showDialog = false;
public DynamicListPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
public DynamicListPreference(Context context) {
super(context);
}
public DynamicListPreference(Context context, boolean show) {
super(context);
showDialog = show;
}
// This is just to simulate that the user 'clicked' on the preference.
public void show() {
showDialog(null);
}
public boolean shouldShow() {
return showDialog;
}
@Override
protected void showDialog(Bundle state) {
if (showDialog) {
super.showDialog(state);
} else {
// we don't want the dialog to show sometimes
// like immediately after click, so we don't until we've generated
// the
// list choices
return;
}
}
public void setShowDialog(boolean show) {
showDialog = show;
}
@Override
public void onClick(DialogInterface dialog, int which) {
super.onClick(dialog, which);
// causes list to refresh next time dialog is requested
if (which == DialogInterface.BUTTON_NEGATIVE) {
setShowDialog(false);
}
}
}