private void addTile(final QSTile<?> tile) { final TileRecord r = new TileRecord(); r.tile = tile; r.tileView = tile.createTileView(mContext); r.tileView.setVisibility(View.GONE); final QSTile.Callback callback = new QSTile.Callback() { @Override public void onStateChanged(QSTile.State state) { int visibility = state.visible ? VISIBLE : GONE; if (state.visible && !mGridContentVisible) { // We don't want to show it if the content is hidden, // then we just set it to invisible, to ensure that it gets visible again visibility = INVISIBLE; } setTileVisibility(r.tileView, visibility); r.tileView.onStateChanged(state); } @Override public void onShowDetail(boolean show) { QSPanel.this.showDetail(show, r); } @Override public void onToggleStateChanged(boolean state) { if (mDetailRecord == r) { fireToggleStateChanged(state); } } @Override public void onScanStateChanged(boolean state) { r.scanState = state; if (mDetailRecord == r) { fireScanStateChanged(r.scanState); } } @Override public void onAnnouncementRequested(CharSequence announcement) { announceForAccessibility(announcement); } }; r.tile.setCallback(callback); final View.OnClickListener click = new View.OnClickListener() { @Override public void onClick(View v) { r.tile.click(); vibrateTile(20); } }; final View.OnClickListener clickSecondary = new View.OnClickListener() { @Override public void onClick(View v) { r.tile.secondaryClick(); vibrateTile(20); } }; final View.OnLongClickListener clickLong = new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { r.tile.longClick(); vibrateTile(20); return true; } }; r.tileView.init(click, clickSecondary, clickLong); r.tile.setListening(mListening); callback.onStateChanged(r.tile.getState()); r.tile.refreshState(); mRecords.add(r); addView(r.tileView); }