private View buildQSTile(String tileType) {
    QSTileHolder item = QSTileHolder.from(getActivity(), tileType);
    if (item == null) {
      return null;
    }
    ColoringCardView qsTile =
        (ColoringCardView) getLayoutInflater(null).inflate(R.layout.qs_item, null);
    int defaultColor = getResources().getColor(R.color.qs_tile_default_background_color);
    qsTile.setColor(defaultColor);
    if (item.name != null) {
      ImageView icon = (ImageView) qsTile.findViewById(android.R.id.icon);
      Drawable d = Utils.getNamedDrawable(getSystemUIContext(getActivity()), item.resourceName);
      d.setColorFilter(
          getResources().getColor(R.color.qs_tile_tint_color), PorterDuff.Mode.SRC_ATOP);
      icon.setImageDrawable(d);
      TextView title = (TextView) qsTile.findViewById(android.R.id.title);
      title.setText(item.name);

      ImageView type = (ImageView) qsTile.findViewById(R.id.type);
      d =
          getActivity()
              .getDrawable(
                  QSUtils.isDynamicQsTile(tileType)
                      ? R.drawable.ic_qs_tile_dynamic_type
                      : R.drawable.ic_qs_tile_static_type);
      type.setImageDrawable(d);
    }
    qsTile.setTag(tileType);

    return qsTile;
  }
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
      ContentResolver resolver = getActivity().getContentResolver();

      // We load the added tiles and compare it to the list of available tiles.
      // We only show the tiles that aren't already on the grid.
      String order = Settings.Secure.getString(resolver, Settings.Secure.QS_TILES);

      List<String> savedTiles = Arrays.asList(order.split(","));

      final List<QSTileHolder> tilesList = new ArrayList<QSTileHolder>();
      for (String tile : QSUtils.getAvailableTiles(getActivity())) {
        // Don't count the already added tiles
        if (!savedTiles.contains(tile)) {
          QSTileHolder holder = QSTileHolder.from(getActivity(), tile);
          if (holder != null) {
            tilesList.add(holder);
          }
        }
      }

      final DialogInterface.OnClickListener selectionListener =
          new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
              dialog.dismiss();
              final QSTiles tiles = (QSTiles) getTargetFragment();
              if (tiles != null) {
                tiles.addTile(tilesList.get(which).value);
              }
            }
          };

      Collections.sort(
          tilesList,
          new Comparator<QSTileHolder>() {
            @Override
            public int compare(QSTileHolder lhs, QSTileHolder rhs) {
              return lhs.name.compareTo(rhs.name);
            }
          });

      final QSListAdapter adapter =
          new QSListAdapter(getActivity(), getSystemUIContext(getActivity()), tilesList);
      return new AlertDialog.Builder(getActivity())
          .setTitle(R.string.add_qs)
          .setSingleChoiceItems(adapter, -1, selectionListener)
          .setNegativeButton(R.string.cancel, null)
          .create();
    }