private void updateHardKeyboards() {
    mHardKeyboardPreferenceList.clear();
    if (getResources().getConfiguration().keyboard == Configuration.KEYBOARD_QWERTY) {
      final int[] devices = InputDevice.getDeviceIds();
      for (int i = 0; i < devices.length; i++) {
        InputDevice device = InputDevice.getDevice(devices[i]);
        if (device != null && !device.isVirtual() && device.isFullKeyboard()) {
          final String inputDeviceDescriptor = device.getDescriptor();
          final String keyboardLayoutDescriptor =
              mIm.getCurrentKeyboardLayoutForInputDevice(inputDeviceDescriptor);
          final KeyboardLayout keyboardLayout =
              keyboardLayoutDescriptor != null
                  ? mIm.getKeyboardLayout(keyboardLayoutDescriptor)
                  : null;

          final PreferenceScreen pref = new PreferenceScreen(getActivity(), null);
          pref.setTitle(device.getName());
          if (keyboardLayout != null) {
            pref.setSummary(keyboardLayout.toString());
          } else {
            pref.setSummary(R.string.keyboard_layout_default_label);
          }
          pref.setOnPreferenceClickListener(
              new Preference.OnPreferenceClickListener() {
                @Override
                public boolean onPreferenceClick(Preference preference) {
                  showKeyboardLayoutDialog(inputDeviceDescriptor);
                  return true;
                }
              });
          mHardKeyboardPreferenceList.add(pref);
        }
      }
    }

    if (!mHardKeyboardPreferenceList.isEmpty()) {
      for (int i = mHardKeyboardCategory.getPreferenceCount(); i-- > 0; ) {
        final Preference pref = mHardKeyboardCategory.getPreference(i);
        if (pref.getOrder() < 1000) {
          mHardKeyboardCategory.removePreference(pref);
        }
      }

      Collections.sort(mHardKeyboardPreferenceList);
      final int count = mHardKeyboardPreferenceList.size();
      for (int i = 0; i < count; i++) {
        final Preference pref = mHardKeyboardPreferenceList.get(i);
        pref.setOrder(i);
        mHardKeyboardCategory.addPreference(pref);
      }

      getPreferenceScreen().addPreference(mHardKeyboardCategory);
    } else {
      getPreferenceScreen().removePreference(mHardKeyboardCategory);
    }
  }
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.settings);
    PreferenceManager.getDefaultSharedPreferences(getActivity());

    // find preferences
    final Preference generalPreference =
        findPreference(getString(PreferenceConstants.PREF_GENERAL));
    if (generalPreference != null) {
      generalPreference.setOnPreferenceClickListener(
          new Preference.OnPreferenceClickListener() {
            @Override
            public boolean onPreferenceClick(Preference preference) {
              startActivity(new Intent(getActivity(), GeneralSettingsActivity.class));
              return true;
            }
          });
    }

    final Preference lookAndFeelPreference =
        findPreference(getString(PreferenceConstants.PREF_LOOK_FEEL));
    if (lookAndFeelPreference != null) {
      lookAndFeelPreference.setOnPreferenceClickListener(
          new Preference.OnPreferenceClickListener() {
            @Override
            public boolean onPreferenceClick(Preference preference) {
              startActivity(new Intent(getActivity(), LookFeelSettingsActivity.class));
              return true;
            }
          });
    }

    final Preference passcodePreference =
        findPreference(getString(PreferenceConstants.PREF_SECURITY));
    if (passcodePreference != null) {
      passcodePreference.setOnPreferenceClickListener(
          new Preference.OnPreferenceClickListener() {
            @Override
            public boolean onPreferenceClick(Preference preference) {
              startActivity(new Intent(getActivity(), SecuritySettingsActivity.class));
              return true;
            }
          });
    }

    final Preference databasesPreference =
        findPreference(getString(PreferenceConstants.PREF_DATABASE));
    if (databasesPreference != null) {
      databasesPreference.setOnPreferenceClickListener(
          new Preference.OnPreferenceClickListener() {
            @Override
            public boolean onPreferenceClick(Preference preference) {
              startActivity(new Intent(getActivity(), DatabaseSettingsActivity.class));
              return true;
            }
          });
    }

    final Preference dropboxPreference =
        findPreference(getString(PreferenceConstants.PREF_DROPBOX_HOWITWORKS));
    if (dropboxPreference != null) {
      dropboxPreference.setOnPreferenceClickListener(
          new Preference.OnPreferenceClickListener() {
            @Override
            public boolean onPreferenceClick(Preference preference) {
              startActivity(new Intent(getActivity(), DropboxSettingsActivity.class));
              return true;
            }
          });
    }

    // donate
    final Preference pDonate = findPreference(getString(PreferenceConstants.PREF_DONATE));
    if (pDonate != null) {
      pDonate.setOnPreferenceClickListener(
          new Preference.OnPreferenceClickListener() {
            @Override
            public boolean onPreferenceClick(Preference preference) {
              startActivity(new Intent(getActivity(), DonateActivity.class));
              return false;
            }
          });
    }

    final Preference infoPreference =
        findPreference(getString(PreferenceConstants.PREF_VERSION_NAME));
    if (infoPreference != null) {
      infoPreference.setOnPreferenceClickListener(
          new Preference.OnPreferenceClickListener() {

            @Override
            public boolean onPreferenceClick(Preference preference) {
              startActivity(new Intent(getActivity(), AboutActivity.class));
              return true;
            }
          });
    }

    // manage intent
    if (getActivity().getIntent() != null) {
      if (!TextUtils.isEmpty(
          getActivity().getIntent().getStringExtra(Constants.INTENT_REQUEST_PREFERENCES_SCREEN))) {
        try {
          PreferenceScreen screen = getPreferenceScreen();
          Preference preference =
              findPreference(
                  getActivity()
                      .getIntent()
                      .getStringExtra(Constants.INTENT_REQUEST_PREFERENCES_SCREEN));
          if (preference != null) {
            screen.onItemClick(null, null, preference.getOrder(), 0);
          }
        } catch (Exception e) {
          Log.e(LOGCAT, e.getMessage());
        }
      }
    }
  }