private String getSearchHint(UriData data) {
   if (data.targetType == UriData.TYPE_MANUFACTURER) {
     return getString(R.string.db_search_hint_manufacturers);
   } else if (data.targetType == UriData.TYPE_IR_CODE) {
     return getString(R.string.db_search_hint_buttons);
   } else {
     return getString(R.string.db_search_hint_custom, data.getFullyQualifiedName(" "));
   }
 }
 @Override
 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
   GCBaseListable item = (GCBaseListable) mListView.getAdapter().getItem(position);
   if (item.getType() == UriData.TYPE_IR_CODE) {
     getProvider().transmit(((IrCode) item).getSignal());
   } else {
     UriData clone = mUriData.clone();
     select(clone, item);
     ((GCProviderActivity) getActivity()).addFragment(clone);
   }
 }
  private void queryServer(boolean showDialog) {
    mListView.setAdapter(null);

    if (showDialog) showDialog();

    if (mConnector != null) mConnector.cancelQuery();

    mConnector = new DBConnector(getActivity(), this);
    mConnector.setOnDataReceivedListener(this);
    mConnector.query(mUriData.clone());
  }
  @Override
  public View onCreateView(
      LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    setHasOptionsMenu(true);

    setCurrentType(mUriData.targetType);

    View rootView = inflater.inflate(R.layout.fragment_listable, container, false);
    mListView = (ListView) rootView.findViewById(R.id.lvElements);
    mListView.setOnItemClickListener(this);
    mListView.setOnItemLongClickListener(this);

    mConnector = new DBConnector(getActivity(), this);

    // Adapter stuff
    if (mCreated) {
      mListView.setAdapter(mAdapter);
      mAdapter.restoreOriginalDataSet();
    } else if (mUriData.isAvailableInCache(getActivity())) {
      queryServer(false);
    } else {
      queryServer(true);
    }

    explainSaveRemote();
    explainSelectCodesets();

    String title = mUriData.getFullyQualifiedName(" > ");
    if (title == null) {
      title = getString(R.string.db_select_manufacturer);
    }
    getActivity().setTitle(title);

    mCreated = true;
    return rootView;
  }
 private void select(UriData data, GCBaseListable listable) {
   data.targetType = UriData.TYPE_MANUFACTURER;
   if (listable != null) {
     if (listable.getType() == UriData.TYPE_MANUFACTURER) {
       data.manufacturer = (Manufacturer) listable;
       data.targetType = UriData.TYPE_DEVICE_TYPE;
     } else if (listable.getType() == UriData.TYPE_DEVICE_TYPE) {
       data.deviceType = (DeviceType) listable;
       data.targetType = UriData.TYPE_CODESET;
     } else if (listable.getType() == UriData.TYPE_CODESET) {
       data.codeset = (Codeset) listable;
       data.targetType = UriData.TYPE_IR_CODE;
     }
   }
 }
 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
   switch (item.getItemId()) {
     case R.id.menu_db_refresh:
       mUriData.removeFromCache(getActivity());
       queryServer(true);
       return true;
     case R.id.menu_db_save:
       if (mData != null) {
         String name = mUriData.manufacturer.Manufacturer + " " + mUriData.deviceType.DeviceType;
         Remote remote = IrCode.toRemote(getActivity(), name, (IrCode[]) mData);
         getProvider().saveRemote(remote);
       }
       return true;
   }
   return false;
 }