@Override
    protected View onCreateDialogView() {
      reload();
      Context context = getContext();
      if (activityRef.get() == null) {
        return null;
      }

      ScrollView view =
          (ScrollView)
              activityRef
                  .get()
                  .getLayoutInflater()
                  .inflate(R.layout.dialog_language_preference, null);

      resetButton = (Button) view.findViewById(R.id.reset_button);
      resetButton.setOnClickListener(
          new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              resetValues();
            }
          });

      engineSpinner = (Spinner) view.findViewById(R.id.engine_spinner);
      List<String> engines = Arrays.asList(AbsttsTextToSpeechService.DEFAULT_ENGINES);
      engineSpinner.setAdapter(
          new ArrayAdapter<String>(
              context, android.R.layout.simple_spinner_dropdown_item, engines));
      for (int i = 0; i < engines.size(); i++) {
        if (engines.get(i).equals(prefItem.getValueForEngine())) {
          engineSpinner.setSelection(i);
        }
      }

      enabledCheckBox = (CheckBox) view.findViewById(R.id.enabled_check_box);
      enabledCheckBox.setChecked(prefItem.getValueForEnable());

      volumeSeekBar = (SeekBar) view.findViewById(R.id.volume_seek_bar);
      volumeSeekBar.setProgress((int) (prefItem.getValueForVolume() * 100.f));

      rateSeekBar = (SeekBar) view.findViewById(R.id.rate_seek_bar);
      rateSeekBar.setProgress((int) (prefItem.getValueForSpeechRate() * 10.f));

      pitchSeekBar = (SeekBar) view.findViewById(R.id.pitch_seek_bar);
      pitchSeekBar.setProgress((int) (prefItem.getValueForSpeechRate() * 10.f));

      panSeekBar = (SeekBar) view.findViewById(R.id.pan_seek_bar);
      panSeekBar.setProgress((int) ((prefItem.getValueForPan() + 1.f) * 50.f));

      return view;
    }
    @Override
    protected void onDialogClosed(boolean positiveResult) {
      super.onDialogClosed(positiveResult);
      if (!positiveResult) {
        return;
      }

      reload();

      prefItem.setValueForEnable(enabledCheckBox.isChecked());
      prefItem.setValueForEngine((String) engineSpinner.getSelectedItem());
      prefItem.setValueForVolume(volumeSeekBar.getProgress() / 100.f);
      prefItem.setValueForPitch(pitchSeekBar.getProgress() / 10.f);
      prefItem.setValueForSpeechRate(rateSeekBar.getProgress() / 10.f);
      prefItem.setValueForPan((panSeekBar.getProgress() - 50) / 50.f);
      prefItem.commit(getSharedPreferences());

      reload();
    }
 @Override
 protected void onAttachedToHierarchy(PreferenceManager preferenceManager) {
   super.onAttachedToHierarchy(preferenceManager);
   prefItem.load(preferenceManager.getSharedPreferences());
   reload();
 }
 void reload() {
   String title = prefItem.getTitle();
   setTitle(title);
   setDialogTitle(title);
 }
 public LanguagePreference(Activity activity, AttributeSet attrs, String language) {
   super(activity, attrs);
   activityRef = new WeakReference<Activity>(activity);
   prefItem = new LanguagePrefItem(new Locale(language));
   setKey(prefItem.getKey());
 }