Loading packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java +51 −0 Original line number Original line Diff line number Diff line Loading @@ -31,6 +31,10 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout { private View mDecorGroup; private View mDecorGroup; private PageListener mPageListener; private PageListener mPageListener; private int mPosition; private boolean mOffPage; private boolean mListening; public PagedTileLayout(Context context, AttributeSet attrs) { public PagedTileLayout(Context context, AttributeSet attrs) { super(context, attrs); super(context, attrs); setAdapter(mAdapter); setAdapter(mAdapter); Loading @@ -48,6 +52,7 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout { public void onPageScrolled(int position, float positionOffset, public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { int positionOffsetPixels) { if (mPageIndicator == null) return; if (mPageIndicator == null) return; setCurrentPage(position, positionOffset != 0); mPageIndicator.setLocation(position + positionOffset); mPageIndicator.setLocation(position + positionOffset); if (mPageListener != null) { if (mPageListener != null) { mPageListener.onPageChanged(positionOffsetPixels == 0 && mPageListener.onPageChanged(positionOffsetPixels == 0 && Loading Loading @@ -77,6 +82,52 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout { super.setCurrentItem(item, smoothScroll); super.setCurrentItem(item, smoothScroll); } } @Override public void setListening(boolean listening) { if (mListening == listening) return; mListening = listening; if (mListening) { mPages.get(mPosition).setListening(listening); if (mOffPage) { mPages.get(mPosition + 1).setListening(listening); } } else { // Make sure no pages are listening. for (int i = 0; i < mPages.size(); i++) { mPages.get(i).setListening(false); } } } /** * Sets individual pages to listening or not. If offPage it will set * the next page after position to listening as well since we are in between * pages. */ private void setCurrentPage(int position, boolean offPage) { if (mPosition == position && mOffPage == offPage) return; if (mListening) { if (mPosition != position) { // Clear out the last pages from listening. mPages.get(mPosition).setListening(false); if (mOffPage) { mPages.get(mPosition + 1).setListening(false); } // Set the new pages to listening mPages.get(position).setListening(true); if (offPage) { mPages.get(position + 1).setListening(true); } } else if (mOffPage != offPage) { // Whether we are showing position + 1 has changed. mPages.get(mPosition + 1).setListening(offPage); } } // Save the current state. mPosition = position; mOffPage = offPage; } @Override @Override public boolean hasOverlappingRendering() { public boolean hasOverlappingRendering() { return false; return false; Loading packages/SystemUI/src/com/android/systemui/qs/QSContainer.java +4 −1 Original line number Original line Diff line number Diff line Loading @@ -60,6 +60,7 @@ public class QSContainer extends FrameLayout { private QSAnimator mQSAnimator; private QSAnimator mQSAnimator; private QSCustomizer mQSCustomizer; private QSCustomizer mQSCustomizer; private NotificationPanelView mPanelView; private NotificationPanelView mPanelView; private boolean mListening; public QSContainer(Context context, AttributeSet attrs) { public QSContainer(Context context, AttributeSet attrs) { super(context, attrs); super(context, attrs); Loading Loading @@ -209,6 +210,7 @@ public class QSContainer extends FrameLayout { public void setExpanded(boolean expanded) { public void setExpanded(boolean expanded) { if (DEBUG) Log.d(TAG, "setExpanded " + expanded); if (DEBUG) Log.d(TAG, "setExpanded " + expanded); mQsExpanded = expanded; mQsExpanded = expanded; mQSPanel.setListening(mListening && mQsExpanded); updateQsState(); updateQsState(); } } Loading @@ -227,8 +229,9 @@ public class QSContainer extends FrameLayout { public void setListening(boolean listening) { public void setListening(boolean listening) { if (DEBUG) Log.d(TAG, "setListening " + listening); if (DEBUG) Log.d(TAG, "setListening " + listening); mQSPanel.setListening(listening); mListening = listening; mHeader.setListening(listening); mHeader.setListening(listening); mQSPanel.setListening(mListening && mQsExpanded); } } public void setQsExpansion(float expansion, float headerTranslation) { public void setQsExpansion(float expansion, float headerTranslation) { Loading packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +6 −4 Original line number Original line Diff line number Diff line Loading @@ -57,7 +57,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback { private int mPanelPaddingBottom; private int mPanelPaddingBottom; private int mBrightnessPaddingTop; private int mBrightnessPaddingTop; private boolean mExpanded; private boolean mExpanded; private boolean mListening; protected boolean mListening; private Callback mCallback; private Callback mCallback; private BrightnessController mBrightnessController; private BrightnessController mBrightnessController; Loading Loading @@ -102,6 +102,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback { protected void setupTileLayout() { protected void setupTileLayout() { mTileLayout = (QSTileLayout) LayoutInflater.from(mContext).inflate( mTileLayout = (QSTileLayout) LayoutInflater.from(mContext).inflate( R.layout.qs_paged_tile_layout, this, false); R.layout.qs_paged_tile_layout, this, false); mTileLayout.setListening(mListening); addView((View) mTileLayout); addView((View) mTileLayout); } } Loading Loading @@ -228,8 +229,8 @@ public class QSPanel extends LinearLayout implements Tunable, Callback { public void setListening(boolean listening) { public void setListening(boolean listening) { if (mListening == listening) return; if (mListening == listening) return; mListening = listening; mListening = listening; for (TileRecord r : mRecords) { if (mTileLayout != null) { r.tile.setListening(mListening); mTileLayout.setListening(listening); } } mFooter.setListening(mListening); mFooter.setListening(mListening); if (mListening) { if (mListening) { Loading Loading @@ -341,7 +342,6 @@ public class QSPanel extends LinearLayout implements Tunable, Callback { } } }; }; r.tileView.init(click, longClick); r.tileView.init(click, longClick); r.tile.setListening(mListening); callback.onStateChanged(r.tile.getState()); callback.onStateChanged(r.tile.getState()); r.tile.refreshState(); r.tile.refreshState(); mRecords.add(r); mRecords.add(r); Loading Loading @@ -531,5 +531,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback { void removeTile(TileRecord tile); void removeTile(TileRecord tile); int getOffsetTop(TileRecord tile); int getOffsetTop(TileRecord tile); boolean updateResources(); boolean updateResources(); void setListening(boolean listening); } } } } packages/SystemUI/src/com/android/systemui/qs/QSTile.java +27 −1 Original line number Original line Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Handler; import android.os.Looper; import android.os.Looper; import android.os.Message; import android.os.Message; import android.util.ArraySet; import android.util.Log; import android.util.Log; import android.util.SparseArray; import android.util.SparseArray; import android.view.View; import android.view.View; Loading Loading @@ -63,7 +64,7 @@ import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; * handleUpdateState. Callbacks affecting state should use refreshState to trigger another * handleUpdateState. Callbacks affecting state should use refreshState to trigger another * state update pass on tile looper. * state update pass on tile looper. */ */ public abstract class QSTile<TState extends State> implements Listenable { public abstract class QSTile<TState extends State> { protected final String TAG = "Tile." + getClass().getSimpleName(); protected final String TAG = "Tile." + getClass().getSimpleName(); protected static final boolean DEBUG = Log.isLoggable("Tile", Log.DEBUG); protected static final boolean DEBUG = Log.isLoggable("Tile", Log.DEBUG); Loading @@ -71,6 +72,7 @@ public abstract class QSTile<TState extends State> implements Listenable { protected final Context mContext; protected final Context mContext; protected final H mHandler; protected final H mHandler; protected final Handler mUiHandler = new Handler(Looper.getMainLooper()); protected final Handler mUiHandler = new Handler(Looper.getMainLooper()); private final ArraySet<Object> mListeners = new ArraySet<>(); private final ArrayList<Callback> mCallbacks = new ArrayList<>(); private final ArrayList<Callback> mCallbacks = new ArrayList<>(); protected TState mState = newTileState(); protected TState mState = newTileState(); Loading @@ -97,6 +99,24 @@ public abstract class QSTile<TState extends State> implements Listenable { mHandler = new H(host.getLooper()); mHandler = new H(host.getLooper()); } } /** * Adds or removes a listening client for the tile. If the tile has one or more * listening client it will go into the listening state. */ public void setListening(Object listener, boolean listening) { if (listening) { if (mListeners.add(listener) && mListeners.size() == 1) { if (DEBUG) Log.d(TAG, "setListening " + true); mHandler.obtainMessage(H.SET_LISTENING, 1, 0).sendToTarget(); } } else { if (mListeners.remove(listener) && mListeners.size() == 0) { if (DEBUG) Log.d(TAG, "setListening " + false); mHandler.obtainMessage(H.SET_LISTENING, 0, 0).sendToTarget(); } } } public String getTileSpec() { public String getTileSpec() { return mTileSpec; return mTileSpec; } } Loading Loading @@ -279,6 +299,8 @@ public abstract class QSTile<TState extends State> implements Listenable { handleRefreshState(null); handleRefreshState(null); } } protected abstract void setListening(boolean listening); protected void handleDestroy() { protected void handleDestroy() { setListening(false); setListening(false); mCallbacks.clear(); mCallbacks.clear(); Loading Loading @@ -312,6 +334,7 @@ public abstract class QSTile<TState extends State> implements Listenable { private static final int DESTROY = 10; private static final int DESTROY = 10; private static final int CLEAR_STATE = 11; private static final int CLEAR_STATE = 11; private static final int REMOVE_CALLBACKS = 12; private static final int REMOVE_CALLBACKS = 12; private static final int SET_LISTENING = 13; private H(Looper looper) { private H(Looper looper) { super(looper); super(looper); Loading Loading @@ -364,6 +387,9 @@ public abstract class QSTile<TState extends State> implements Listenable { } else if (msg.what == CLEAR_STATE) { } else if (msg.what == CLEAR_STATE) { name = "handleClearState"; name = "handleClearState"; handleClearState(); handleClearState(); } else if (msg.what == SET_LISTENING) { name = "setListening"; setListening(msg.arg1 != 0); } else { } else { throw new IllegalArgumentException("Unknown msg: " + msg.what); throw new IllegalArgumentException("Unknown msg: " + msg.what); } } Loading packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java +13 −0 Original line number Original line Diff line number Diff line Loading @@ -55,6 +55,7 @@ public class QuickQSPanel extends QSPanel { removeView((View) mTileLayout); removeView((View) mTileLayout); } } mTileLayout = new HeaderTileLayout(context); mTileLayout = new HeaderTileLayout(context); mTileLayout.setListening(mListening); addView((View) mTileLayout, 1 /* Between brightness and footer */); addView((View) mTileLayout, 1 /* Between brightness and footer */); } } Loading Loading @@ -146,6 +147,7 @@ public class QuickQSPanel extends QSPanel { private static class HeaderTileLayout extends LinearLayout implements QSTileLayout { private static class HeaderTileLayout extends LinearLayout implements QSTileLayout { protected final ArrayList<TileRecord> mRecords = new ArrayList<>(); protected final ArrayList<TileRecord> mRecords = new ArrayList<>(); private boolean mListening; public HeaderTileLayout(Context context) { public HeaderTileLayout(Context context) { super(context); super(context); Loading @@ -155,6 +157,15 @@ public class QuickQSPanel extends QSPanel { setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); } } @Override public void setListening(boolean listening) { if (mListening == listening) return; mListening = listening; for (TileRecord record : mRecords) { record.tile.setListening(this, mListening); } } @Override @Override public void addTile(TileRecord tile) { public void addTile(TileRecord tile) { if (getChildCount() != 0) { if (getChildCount() != 0) { Loading @@ -163,6 +174,7 @@ public class QuickQSPanel extends QSPanel { } } addView(tile.tileView, getChildCount(), generateLayoutParams()); addView(tile.tileView, getChildCount(), generateLayoutParams()); mRecords.add(tile); mRecords.add(tile); tile.tile.setListening(this, mListening); } } private LayoutParams generateSpaceParams() { private LayoutParams generateSpaceParams() { Loading Loading @@ -190,6 +202,7 @@ public class QuickQSPanel extends QSPanel { removeViewAt(childIndex); removeViewAt(childIndex); } } mRecords.remove(tile); mRecords.remove(tile); tile.tile.setListening(this, false); } } private int getChildIndex(QSTileBaseView tileView) { private int getChildIndex(QSTileBaseView tileView) { Loading Loading
packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java +51 −0 Original line number Original line Diff line number Diff line Loading @@ -31,6 +31,10 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout { private View mDecorGroup; private View mDecorGroup; private PageListener mPageListener; private PageListener mPageListener; private int mPosition; private boolean mOffPage; private boolean mListening; public PagedTileLayout(Context context, AttributeSet attrs) { public PagedTileLayout(Context context, AttributeSet attrs) { super(context, attrs); super(context, attrs); setAdapter(mAdapter); setAdapter(mAdapter); Loading @@ -48,6 +52,7 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout { public void onPageScrolled(int position, float positionOffset, public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { int positionOffsetPixels) { if (mPageIndicator == null) return; if (mPageIndicator == null) return; setCurrentPage(position, positionOffset != 0); mPageIndicator.setLocation(position + positionOffset); mPageIndicator.setLocation(position + positionOffset); if (mPageListener != null) { if (mPageListener != null) { mPageListener.onPageChanged(positionOffsetPixels == 0 && mPageListener.onPageChanged(positionOffsetPixels == 0 && Loading Loading @@ -77,6 +82,52 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout { super.setCurrentItem(item, smoothScroll); super.setCurrentItem(item, smoothScroll); } } @Override public void setListening(boolean listening) { if (mListening == listening) return; mListening = listening; if (mListening) { mPages.get(mPosition).setListening(listening); if (mOffPage) { mPages.get(mPosition + 1).setListening(listening); } } else { // Make sure no pages are listening. for (int i = 0; i < mPages.size(); i++) { mPages.get(i).setListening(false); } } } /** * Sets individual pages to listening or not. If offPage it will set * the next page after position to listening as well since we are in between * pages. */ private void setCurrentPage(int position, boolean offPage) { if (mPosition == position && mOffPage == offPage) return; if (mListening) { if (mPosition != position) { // Clear out the last pages from listening. mPages.get(mPosition).setListening(false); if (mOffPage) { mPages.get(mPosition + 1).setListening(false); } // Set the new pages to listening mPages.get(position).setListening(true); if (offPage) { mPages.get(position + 1).setListening(true); } } else if (mOffPage != offPage) { // Whether we are showing position + 1 has changed. mPages.get(mPosition + 1).setListening(offPage); } } // Save the current state. mPosition = position; mOffPage = offPage; } @Override @Override public boolean hasOverlappingRendering() { public boolean hasOverlappingRendering() { return false; return false; Loading
packages/SystemUI/src/com/android/systemui/qs/QSContainer.java +4 −1 Original line number Original line Diff line number Diff line Loading @@ -60,6 +60,7 @@ public class QSContainer extends FrameLayout { private QSAnimator mQSAnimator; private QSAnimator mQSAnimator; private QSCustomizer mQSCustomizer; private QSCustomizer mQSCustomizer; private NotificationPanelView mPanelView; private NotificationPanelView mPanelView; private boolean mListening; public QSContainer(Context context, AttributeSet attrs) { public QSContainer(Context context, AttributeSet attrs) { super(context, attrs); super(context, attrs); Loading Loading @@ -209,6 +210,7 @@ public class QSContainer extends FrameLayout { public void setExpanded(boolean expanded) { public void setExpanded(boolean expanded) { if (DEBUG) Log.d(TAG, "setExpanded " + expanded); if (DEBUG) Log.d(TAG, "setExpanded " + expanded); mQsExpanded = expanded; mQsExpanded = expanded; mQSPanel.setListening(mListening && mQsExpanded); updateQsState(); updateQsState(); } } Loading @@ -227,8 +229,9 @@ public class QSContainer extends FrameLayout { public void setListening(boolean listening) { public void setListening(boolean listening) { if (DEBUG) Log.d(TAG, "setListening " + listening); if (DEBUG) Log.d(TAG, "setListening " + listening); mQSPanel.setListening(listening); mListening = listening; mHeader.setListening(listening); mHeader.setListening(listening); mQSPanel.setListening(mListening && mQsExpanded); } } public void setQsExpansion(float expansion, float headerTranslation) { public void setQsExpansion(float expansion, float headerTranslation) { Loading
packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +6 −4 Original line number Original line Diff line number Diff line Loading @@ -57,7 +57,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback { private int mPanelPaddingBottom; private int mPanelPaddingBottom; private int mBrightnessPaddingTop; private int mBrightnessPaddingTop; private boolean mExpanded; private boolean mExpanded; private boolean mListening; protected boolean mListening; private Callback mCallback; private Callback mCallback; private BrightnessController mBrightnessController; private BrightnessController mBrightnessController; Loading Loading @@ -102,6 +102,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback { protected void setupTileLayout() { protected void setupTileLayout() { mTileLayout = (QSTileLayout) LayoutInflater.from(mContext).inflate( mTileLayout = (QSTileLayout) LayoutInflater.from(mContext).inflate( R.layout.qs_paged_tile_layout, this, false); R.layout.qs_paged_tile_layout, this, false); mTileLayout.setListening(mListening); addView((View) mTileLayout); addView((View) mTileLayout); } } Loading Loading @@ -228,8 +229,8 @@ public class QSPanel extends LinearLayout implements Tunable, Callback { public void setListening(boolean listening) { public void setListening(boolean listening) { if (mListening == listening) return; if (mListening == listening) return; mListening = listening; mListening = listening; for (TileRecord r : mRecords) { if (mTileLayout != null) { r.tile.setListening(mListening); mTileLayout.setListening(listening); } } mFooter.setListening(mListening); mFooter.setListening(mListening); if (mListening) { if (mListening) { Loading Loading @@ -341,7 +342,6 @@ public class QSPanel extends LinearLayout implements Tunable, Callback { } } }; }; r.tileView.init(click, longClick); r.tileView.init(click, longClick); r.tile.setListening(mListening); callback.onStateChanged(r.tile.getState()); callback.onStateChanged(r.tile.getState()); r.tile.refreshState(); r.tile.refreshState(); mRecords.add(r); mRecords.add(r); Loading Loading @@ -531,5 +531,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback { void removeTile(TileRecord tile); void removeTile(TileRecord tile); int getOffsetTop(TileRecord tile); int getOffsetTop(TileRecord tile); boolean updateResources(); boolean updateResources(); void setListening(boolean listening); } } } }
packages/SystemUI/src/com/android/systemui/qs/QSTile.java +27 −1 Original line number Original line Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Handler; import android.os.Looper; import android.os.Looper; import android.os.Message; import android.os.Message; import android.util.ArraySet; import android.util.Log; import android.util.Log; import android.util.SparseArray; import android.util.SparseArray; import android.view.View; import android.view.View; Loading Loading @@ -63,7 +64,7 @@ import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; * handleUpdateState. Callbacks affecting state should use refreshState to trigger another * handleUpdateState. Callbacks affecting state should use refreshState to trigger another * state update pass on tile looper. * state update pass on tile looper. */ */ public abstract class QSTile<TState extends State> implements Listenable { public abstract class QSTile<TState extends State> { protected final String TAG = "Tile." + getClass().getSimpleName(); protected final String TAG = "Tile." + getClass().getSimpleName(); protected static final boolean DEBUG = Log.isLoggable("Tile", Log.DEBUG); protected static final boolean DEBUG = Log.isLoggable("Tile", Log.DEBUG); Loading @@ -71,6 +72,7 @@ public abstract class QSTile<TState extends State> implements Listenable { protected final Context mContext; protected final Context mContext; protected final H mHandler; protected final H mHandler; protected final Handler mUiHandler = new Handler(Looper.getMainLooper()); protected final Handler mUiHandler = new Handler(Looper.getMainLooper()); private final ArraySet<Object> mListeners = new ArraySet<>(); private final ArrayList<Callback> mCallbacks = new ArrayList<>(); private final ArrayList<Callback> mCallbacks = new ArrayList<>(); protected TState mState = newTileState(); protected TState mState = newTileState(); Loading @@ -97,6 +99,24 @@ public abstract class QSTile<TState extends State> implements Listenable { mHandler = new H(host.getLooper()); mHandler = new H(host.getLooper()); } } /** * Adds or removes a listening client for the tile. If the tile has one or more * listening client it will go into the listening state. */ public void setListening(Object listener, boolean listening) { if (listening) { if (mListeners.add(listener) && mListeners.size() == 1) { if (DEBUG) Log.d(TAG, "setListening " + true); mHandler.obtainMessage(H.SET_LISTENING, 1, 0).sendToTarget(); } } else { if (mListeners.remove(listener) && mListeners.size() == 0) { if (DEBUG) Log.d(TAG, "setListening " + false); mHandler.obtainMessage(H.SET_LISTENING, 0, 0).sendToTarget(); } } } public String getTileSpec() { public String getTileSpec() { return mTileSpec; return mTileSpec; } } Loading Loading @@ -279,6 +299,8 @@ public abstract class QSTile<TState extends State> implements Listenable { handleRefreshState(null); handleRefreshState(null); } } protected abstract void setListening(boolean listening); protected void handleDestroy() { protected void handleDestroy() { setListening(false); setListening(false); mCallbacks.clear(); mCallbacks.clear(); Loading Loading @@ -312,6 +334,7 @@ public abstract class QSTile<TState extends State> implements Listenable { private static final int DESTROY = 10; private static final int DESTROY = 10; private static final int CLEAR_STATE = 11; private static final int CLEAR_STATE = 11; private static final int REMOVE_CALLBACKS = 12; private static final int REMOVE_CALLBACKS = 12; private static final int SET_LISTENING = 13; private H(Looper looper) { private H(Looper looper) { super(looper); super(looper); Loading Loading @@ -364,6 +387,9 @@ public abstract class QSTile<TState extends State> implements Listenable { } else if (msg.what == CLEAR_STATE) { } else if (msg.what == CLEAR_STATE) { name = "handleClearState"; name = "handleClearState"; handleClearState(); handleClearState(); } else if (msg.what == SET_LISTENING) { name = "setListening"; setListening(msg.arg1 != 0); } else { } else { throw new IllegalArgumentException("Unknown msg: " + msg.what); throw new IllegalArgumentException("Unknown msg: " + msg.what); } } Loading
packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java +13 −0 Original line number Original line Diff line number Diff line Loading @@ -55,6 +55,7 @@ public class QuickQSPanel extends QSPanel { removeView((View) mTileLayout); removeView((View) mTileLayout); } } mTileLayout = new HeaderTileLayout(context); mTileLayout = new HeaderTileLayout(context); mTileLayout.setListening(mListening); addView((View) mTileLayout, 1 /* Between brightness and footer */); addView((View) mTileLayout, 1 /* Between brightness and footer */); } } Loading Loading @@ -146,6 +147,7 @@ public class QuickQSPanel extends QSPanel { private static class HeaderTileLayout extends LinearLayout implements QSTileLayout { private static class HeaderTileLayout extends LinearLayout implements QSTileLayout { protected final ArrayList<TileRecord> mRecords = new ArrayList<>(); protected final ArrayList<TileRecord> mRecords = new ArrayList<>(); private boolean mListening; public HeaderTileLayout(Context context) { public HeaderTileLayout(Context context) { super(context); super(context); Loading @@ -155,6 +157,15 @@ public class QuickQSPanel extends QSPanel { setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); } } @Override public void setListening(boolean listening) { if (mListening == listening) return; mListening = listening; for (TileRecord record : mRecords) { record.tile.setListening(this, mListening); } } @Override @Override public void addTile(TileRecord tile) { public void addTile(TileRecord tile) { if (getChildCount() != 0) { if (getChildCount() != 0) { Loading @@ -163,6 +174,7 @@ public class QuickQSPanel extends QSPanel { } } addView(tile.tileView, getChildCount(), generateLayoutParams()); addView(tile.tileView, getChildCount(), generateLayoutParams()); mRecords.add(tile); mRecords.add(tile); tile.tile.setListening(this, mListening); } } private LayoutParams generateSpaceParams() { private LayoutParams generateSpaceParams() { Loading Loading @@ -190,6 +202,7 @@ public class QuickQSPanel extends QSPanel { removeViewAt(childIndex); removeViewAt(childIndex); } } mRecords.remove(tile); mRecords.remove(tile); tile.tile.setListening(this, false); } } private int getChildIndex(QSTileBaseView tileView) { private int getChildIndex(QSTileBaseView tileView) { Loading