private static View createSwitch( @NonNull LayoutInflater inflater, @NonNull ViewGroup parent, @NonNull FormField field, @NonNull String value, @NonNull String instructions, boolean readOnly, @NonNull final SwitchListener switchListener) { final View view = inflater.inflate(R.layout.edit_user_profile_switch, parent, false); ((TextView) view.findViewById(R.id.label)).setText(field.getLabel()); ((TextView) view.findViewById(R.id.instructions)).setText(instructions); final RadioGroup group = ((RadioGroup) view.findViewById(R.id.options)); { final RadioButton optionOne = ((RadioButton) view.findViewById(R.id.option_one)); final RadioButton optionTwo = ((RadioButton) view.findViewById(R.id.option_two)); optionOne.setText(field.getOptions().getValues().get(0).getName()); optionOne.setTag(field.getOptions().getValues().get(0).getValue()); optionTwo.setText(field.getOptions().getValues().get(1).getName()); optionTwo.setTag(field.getOptions().getValues().get(1).getValue()); } for (int i = 0; i < group.getChildCount(); i++) { final View child = group.getChildAt(i); child.setEnabled(!readOnly); if (child.getTag().equals(value)) { group.check(child.getId()); break; } } if (readOnly) { group.setEnabled(false); view.setBackgroundColor(view.getResources().getColor(R.color.edx_grayscale_neutral_x_light)); } else { group.setOnCheckedChangeListener( new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switchListener.onSwitch((String) group.findViewById(checkedId).getTag()); } }); } parent.addView(view); return view; }
@Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); getActivity().setTitle(formField.getLabel()); final List<FormOption> options = new ArrayList<>(); final FormOptions formOptions = formField.getOptions(); final ArrayAdapter<FormOption> adapter = new ArrayAdapter<>(getActivity(), R.layout.edx_selectable_list_item, options); if (formOptions.getReference() != null) { new GetFormOptionsTask(getActivity(), formOptions.getReference()) { @Override protected void onSuccess(List<FormOption> formOptions) throws Exception { options.addAll(formOptions); adapter.notifyDataSetChanged(); selectCurrentOption(); } }.execute(); } else if (formOptions.getRangeMin() != null && formOptions.getRangeMax() != null) { for (int i = formOptions.getRangeMax(); i >= formOptions.getRangeMin(); --i) { options.add(new FormOption(String.valueOf(i), String.valueOf(i))); } } else if (formOptions.getValues() != null && formOptions.getValues().size() > 0) { options.addAll(formOptions.getValues()); } if (!TextUtils.isEmpty(formField.getInstructions())) { final View instructionsContainer = LayoutInflater.from(view.getContext()) .inflate(R.layout.form_field_instructions_header, listView, false); final TextView instructions = (TextView) instructionsContainer.findViewById(R.id.instructions); final TextView subInstructions = (TextView) instructionsContainer.findViewById(R.id.sub_instructions); instructions.setText(formField.getInstructions()); if (TextUtils.isEmpty(formField.getSubInstructions())) { subInstructions.setVisibility(View.GONE); } else { subInstructions.setText(formField.getSubInstructions()); } listView.addHeaderView(instructionsContainer, null, false); } if (null != formField.getDataType()) { switch (formField.getDataType()) { case COUNTRY: { final Locale locale = Locale.getDefault(); addDetectedValueHeader( listView, R.string.edit_user_profile_current_location, "current_location", locale.getDisplayCountry(), locale.getCountry(), FontAwesomeIcons.fa_map_marker); break; } case LANGUAGE: { final Locale locale = Locale.getDefault(); addDetectedValueHeader( listView, R.string.edit_user_profile_current_language, "current_language", locale.getDisplayLanguage(), locale.getLanguage(), FontAwesomeIcons.fa_comment); break; } } } if (formField.getOptions().isAllowsNone()) { final TextView textView = (TextView) LayoutInflater.from(listView.getContext()) .inflate(R.layout.edx_selectable_list_item, listView, false); final String label = formField.getOptions().getNoneLabel(); textView.setText(label); listView.addHeaderView(textView, new FormOption(label, null), true); } listView.setAdapter(adapter); listView.setOnItemClickListener( new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { final FormOption item = (FormOption) parent.getItemAtPosition(position); getActivity() .setResult( Activity.RESULT_OK, new Intent() .putExtra(FormFieldActivity.EXTRA_FIELD, formField) .putExtra(FormFieldActivity.EXTRA_VALUE, item.getValue())); getActivity().finish(); } }); selectCurrentOption(); }