Code example for JSONObject

Methods: optBoolean, optString

0
        protected final boolean mAutofocus;
        public static final String INPUT_TYPE = "textbox";
 
        public EditInput(JSONObject object) {
            super(object);
            mHint = object.optString("hint");
            mAutofocus = object.optBoolean("autofocus");
        } 
 
        public View getView(final Context context) throws UnsupportedOperationException {
            EditText input = new EditText(context);
            input.setInputType(InputType.TYPE_CLASS_TEXT);
            input.setText(mValue);
 
            if (!TextUtils.isEmpty(mHint)) {
                input.setHint(mHint);
            } 
 
            if (mAutofocus) {
                input.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                    @Override 
                    public void onFocusChange(View v, boolean hasFocus) {
                        if (hasFocus) {
                            ((InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(v, 0);
                        } 
                    } 
                }); 
                input.requestFocus();
            } 
 
            mView = (View)input;
            return mView;
        } 
 
        public String getValue() {
            EditText edit = (EditText)mView;
            return edit.getText().toString();
        } 
    } 
 
    public static class PasswordInput extends EditInput { 
        public static final String INPUT_TYPE = "password";
        public PasswordInput(JSONObject obj) {
            super(obj);
        } 
 
        public View getView(Context context) throws UnsupportedOperationException {
            EditText input = (EditText) super.getView(context);
            input.setInputType(InputType.TYPE_CLASS_TEXT |
                               InputType.TYPE_TEXT_VARIATION_PASSWORD |
                               InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
            return input;
        } 
 
        public String getValue() {
            EditText edit = (EditText)mView;
            return edit.getText().toString();
        } 
    } 
 
    public static class CheckboxInput extends PromptInput { 
        public static final String INPUT_TYPE = "checkbox";
        private boolean mChecked;
 
        public CheckboxInput(JSONObject obj) {
            super(obj);
            mChecked = obj.optBoolean("checked");
        } 
 
        public View getView(Context context) throws UnsupportedOperationException {
            CheckBox checkbox = new CheckBox(context);
            checkbox.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
            checkbox.setText(mLabel);
            checkbox.setChecked(mChecked);
            mView = (View)checkbox;
            return mView;
        } 
 
        public String getValue() {
            CheckBox checkbox = (CheckBox)mView;
            return checkbox.isChecked() ? "true" : "false";
        } 
    } 
 
    public static class DateTimeInput extends PromptInput { 
        public static final String[] INPUT_TYPES = new String[] {
            "date", 
            "week", 
            "time", 
            "datetime-local", 
            "datetime", 
            "month" 
        }; 
 
        public DateTimeInput(JSONObject obj) {
            super(obj);
        } 
 
        public View getView(Context context) throws UnsupportedOperationException {
            if (mType.equals("date")) {
                try { 
                    DateTimePicker input = new DateTimePicker(context, "yyyy-MM-dd", mValue,
                                                              DateTimePicker.PickersState.DATE); 
                    input.toggleCalendar(true);
                    mView = (View)input;
                } catch (UnsupportedOperationException ex) {
                    // We can't use our custom version of the DatePicker widget because the sdk is too old. 
                    // But we can fallback on the native one. 
                    DatePicker input = new DatePicker(context);
                    try { 
                        if (!TextUtils.isEmpty(mValue)) {
                            GregorianCalendar calendar = new GregorianCalendar();
                            calendar.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(mValue));
                            input.updateDate(calendar.get(Calendar.YEAR),
                                             calendar.get(Calendar.MONTH),
                                             calendar.get(Calendar.DAY_OF_MONTH));
                        } 
                    } catch (Exception e) {
                        Log.e(LOGTAG, "error parsing format string: " + e);
                    } 
                    mView = (View)input;
                } 
            } else if (mType.equals("week")) {
                DateTimePicker input = new DateTimePicker(context, "yyyy-'W'ww", mValue,
                                                          DateTimePicker.PickersState.WEEK); 
                mView = (View)input;
            } else if (mType.equals("time")) {
                TimePicker input = new TimePicker(context);
                input.setIs24HourView(DateFormat.is24HourFormat(context));
 
                GregorianCalendar calendar = new GregorianCalendar();
                if (!TextUtils.isEmpty(mValue)) {
                    try { 
                        calendar.setTime(new SimpleDateFormat("HH:mm").parse(mValue));
                    } catch (Exception e) { }
                } 
                input.setCurrentHour(calendar.get(GregorianCalendar.HOUR_OF_DAY));
                input.setCurrentMinute(calendar.get(GregorianCalendar.MINUTE));
                mView = (View)input;
            } else if (mType.equals("datetime-local") || mType.equals("datetime")) {
                DateTimePicker input = new DateTimePicker(context, "yyyy-MM-dd HH:mm", mValue,
                                                          DateTimePicker.PickersState.DATETIME); 
                input.toggleCalendar(true);
                mView = (View)input;
            } else if (mType.equals("month")) {
                DateTimePicker input = new DateTimePicker(context, "yyyy-MM", mValue,
                                                          DateTimePicker.PickersState.MONTH); 
                mView = (View)input;
            } 
            return mView;
        } 
 
        private static String formatDateString(String dateFormat, Calendar calendar) {
            return new SimpleDateFormat(dateFormat).format(calendar.getTime());
        } 
 
        public String getValue() {
            if (Build.VERSION.SDK_INT < 11 && mType.equals("date")) {
                // We can't use the custom DateTimePicker with a sdk older than 11. 
                // Fallback on the native DatePicker. 
                DatePicker dp = (DatePicker)mView;
                GregorianCalendar calendar =
                    new GregorianCalendar(dp.getYear(),dp.getMonth(),dp.getDayOfMonth());
                return formatDateString("yyyy-MM-dd",calendar);
            } else if (mType.equals("time")) {
                TimePicker tp = (TimePicker)mView;
                GregorianCalendar calendar =
                    new GregorianCalendar(0,0,0,tp.getCurrentHour(),tp.getCurrentMinute());
                return formatDateString("HH:mm",calendar);
            } else { 
                DateTimePicker dp = (DateTimePicker)mView;
                GregorianCalendar calendar = new GregorianCalendar();
                calendar.setTimeInMillis(dp.getTimeInMillis());
                if (mType.equals("date")) {
                    return formatDateString("yyyy-MM-dd",calendar);
                } else if (mType.equals("week")) {
                    return formatDateString("yyyy-'W'ww",calendar);
                } else if (mType.equals("datetime-local")) {
                    return formatDateString("yyyy-MM-dd HH:mm",calendar);
                } else if (mType.equals("datetime")) {
                    calendar.set(GregorianCalendar.ZONE_OFFSET,0);
                    calendar.setTimeInMillis(dp.getTimeInMillis());
                    return formatDateString("yyyy-MM-dd HH:mm",calendar);
                } else if (mType.equals("month")) {
                    return formatDateString("yyyy-MM",calendar);
                } 
            } 
            return super.getValue(); 
        } 
    } 
 
    public static class MenulistInput extends PromptInput { 
        public static final String INPUT_TYPE = "menulist";
        private static String[] mListitems;
        private static int mSelected;
 
        public Spinner spinner;
        public AllCapsTextView textView;
 
        public MenulistInput(JSONObject obj) {
            super(obj);
            mListitems = Prompt.getStringArray(obj, "values");
            mSelected = obj.optInt("selected");
        } 
 
        public View getView(final Context context) throws UnsupportedOperationException {
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
                spinner = new Spinner(context);
            } else { 
                spinner = new Spinner(context, Spinner.MODE_DIALOG);
            } 
            try { 
                if (mListitems.length > 0) {
                    ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, mListitems);
                    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 
                    spinner.setAdapter(adapter);
                    spinner.setSelection(mSelected);
                } 
            } catch(Exception ex) { }
 
            if (!TextUtils.isEmpty(mLabel)) {
                LinearLayout container = new LinearLayout(context);
                container.setOrientation(LinearLayout.VERTICAL);
 
                textView = new AllCapsTextView(context, null);
                textView.setText(mLabel);
                container.addView(textView);
 
                container.addView(spinner);
                return container;
            } 
 
            return spinner;
        } 
 
        public String getValue() {
            return Integer.toString(spinner.getSelectedItemPosition());
        } 
    } 
 
    public static class LabelInput extends PromptInput { 
        public static final String INPUT_TYPE = "label";
        public LabelInput(JSONObject obj) {
            super(obj);
        } 
 
        public View getView(Context context) throws UnsupportedOperationException {
            // not really an input, but a way to add labels and such to the dialog 
            TextView view = new TextView(context);
            view.setText(Html.fromHtml(mLabel));
            mView = view;
            return mView;
        } 
 
        public String getValue() {
            return ""; 
        } 
    } 
 
    public PromptInput(JSONObject obj) {
        mJSONInput = obj;
        mLabel = obj.optString("label");
        mType = obj.optString("type");
        String id = obj.optString("id");
        mId = TextUtils.isEmpty(id) ? mType : id;
        mValue = obj.optString("value");
    } 
 
    public static PromptInput getInput(JSONObject obj) {
        String type = obj.optString("type");
        if (EditInput.INPUT_TYPE.equals(type)) {