summaryrefslogtreecommitdiffstats
path: root/packages/SystemUI/src/com/android/systemui/qs
diff options
context:
space:
mode:
authorRoman Birg <roman@cyngn.com>2016-01-25 16:28:52 -0800
committerRoman Birg <roman@cyngn.com>2016-01-27 13:31:44 -0800
commit805ef76e7caa025e9310f9e413f61752cbaad15c (patch)
tree7d93aff7947fcd2e5fb37269ad177075052f21bf /packages/SystemUI/src/com/android/systemui/qs
parentd3d5237207a06fc933dcaa7def300ca12cdb8fb2 (diff)
downloadframeworks_base-805ef76e7caa025e9310f9e413f61752cbaad15c.zip
frameworks_base-805ef76e7caa025e9310f9e413f61752cbaad15c.tar.gz
frameworks_base-805ef76e7caa025e9310f9e413f61752cbaad15c.tar.bz2
SystemUI: improve tile caching mechanism
- Always remove all tile views before setting new tiles - Save and restore the viewpager page when setting tiles as we need to reset this page when we're done (after re-setting the adapter) - Reset the pager adapter to force page removes and fix ghost scrolling to non existent pages. - No need to set tiles to 0 while recreating status bar or switching themes - Always recalculate heights after switching brightness slider, and explicitly set the visibility on the slider too Ref: CYNGNOS-1644 OPO-367 Change-Id: Id08fbbcd38f24c16ee044c0d63389b36845c81b9 Signed-off-by: Roman Birg <roman@cyngn.com>
Diffstat (limited to 'packages/SystemUI/src/com/android/systemui/qs')
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSDragPanel.java50
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSPanelTopView.java18
2 files changed, 42 insertions, 26 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSDragPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSDragPanel.java
index 63e97da..0c5b71b 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSDragPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSDragPanel.java
@@ -512,6 +512,8 @@ public class QSDragPanel extends QSPanel implements View.OnDragListener, View.On
+ tiles + "]");
}
+ int currentViewPagerPage = mViewPager.getCurrentItem();
+
if (mLastDragRecord != null && mRecords.indexOf(mLastDragRecord) == -1) {
// the last removed record might be stored in mLastDragRecord if we just shifted
// re-add it to the list so we'll clean it up below
@@ -527,6 +529,11 @@ public class QSDragPanel extends QSPanel implements View.OnDragListener, View.On
while (iterator.hasPrevious()) {
DragTileRecord dr = (DragTileRecord) iterator.previous();
+ if (dr.page >= 0) {
+ // clean up view
+ mPages.get(dr.page).removeView(dr.tileView);
+ }
+
if (tiles.contains(dr.tile)) {
if (DEBUG_TILES) {
Log.i(TAG, "caching tile: " + dr.tile);
@@ -536,8 +543,6 @@ public class QSDragPanel extends QSPanel implements View.OnDragListener, View.On
if (DEBUG_TILES) {
Log.i(TAG, "removing tile: " + dr.tile);
}
- // clean up view
- mPages.get(dr.page).removeView(dr.tileView);
// remove record
iterator.remove();
@@ -547,19 +552,21 @@ public class QSDragPanel extends QSPanel implements View.OnDragListener, View.On
final int childCount = mPages.get(dr.page).getChildCount();
if (childCount == 0) {
- // if current page is the current max page COUNT (off by 1) then move back
final int currentIndex = mViewPager.getCurrentItem();
- if (currentIndex == (getCurrentMaxPageCount()) + (mEditing ? 1 : 0)) {
- mViewPager.setCurrentItem(currentIndex - 1, false);
- mPagerAdapter.startUpdate(mViewPager);
- final int pageIndex = mEditing ? currentIndex - 1 : currentIndex;
- mPages.remove(pageIndex);
- mPagerAdapter.finishUpdate(mViewPager);
- mPagerAdapter.notifyDataSetChanged();
+ if (currentIndex > 0 && currentViewPagerPage == currentIndex) {
+ // if we are about to remove the page we are currently on, move back
+ currentViewPagerPage--;
}
+ final int pageIndex = dr.page + (mEditing ? 1 : 0);
+ mPagerAdapter.startUpdate(mViewPager);
+ mPagerAdapter.destroyItem(mViewPager, pageIndex, mPages.get(dr.page));
+ mPagerAdapter.finishUpdate(mViewPager);
+ mPagerAdapter.notifyDataSetChanged();
}
}
}
+ dr.page = -1;
+ dr.destinationPage = -1;
}
// at this point recordMap should have all retained tiles, no new or old tiles
@@ -568,8 +575,14 @@ public class QSDragPanel extends QSPanel implements View.OnDragListener, View.On
Log.i(TAG, "record map delta: " + delta);
}
mRecords.ensureCapacity(tiles.size());
+
mPagerAdapter.notifyDataSetChanged();
+ // even though we explicitly destroy old pages, without this call,
+ // the viewpager doesn't seem to want to pick up the fact that we have less pages
+ // and allows "empty" scrolls to the right where there is no page.
+ mViewPager.setAdapter(mPagerAdapter);
+
// add new tiles
for (int i = 0; i < tiles.size(); i++) {
QSTile<?> tile = tiles.get(i);
@@ -601,10 +614,8 @@ public class QSDragPanel extends QSPanel implements View.OnDragListener, View.On
}
Collections.swap(mRecords, indexOf, i);
- record.destinationPage = tileDestPage;
- ensureDestinationPage(record);
}
-
+ record.destinationPage = tileDestPage;
}
if (record.page == -1) {
// add the view
@@ -616,6 +627,9 @@ public class QSDragPanel extends QSPanel implements View.OnDragListener, View.On
}
}
+ // restore the visible page
+ mViewPager.setCurrentItem(currentViewPagerPage, false);
+
if (isShowingDetail()) {
mDetail.bringToFront();
}
@@ -625,16 +639,6 @@ public class QSDragPanel extends QSPanel implements View.OnDragListener, View.On
requestLayout();
}
- private void ensureDestinationPage(DragTileRecord record) {
- if (record.destinationPage != record.page) {
- if (record.page >= 0) {
- getPage(record.page).removeView(record.tileView);
- }
- getPage(record.destinationPage).addView(record.tileView);
- record.page = record.destinationPage;
- }
- }
-
private DragTileRecord makeRecord(final QSTile<?> tile) {
if (DEBUG_TILES) {
Log.d(TAG, "+++ makeRecord() called with " + "tile = [" + tile + "]");
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelTopView.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelTopView.java
index 900f87d..35cd929 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanelTopView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelTopView.java
@@ -34,6 +34,8 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.android.systemui.R;
import com.android.systemui.cm.UserContentObserver;
+import com.android.systemui.settings.ToggleSlider;
+
import cyanogenmod.providers.CMSettings;
public class QSPanelTopView extends FrameLayout {
@@ -317,12 +319,22 @@ public class QSPanelTopView extends FrameLayout {
boolean showSlider = CMSettings.System.getIntForUser(resolver,
CMSettings.System.QS_SHOW_BRIGHTNESS_SLIDER, 1, currentUserId) == 1;
if (showSlider != mHasBrightnessSliderToDisplay) {
+ if (mAnimator != null) {
+ mAnimator.cancel(); // cancel everything we're animating
+ mAnimator = null;
+ }
mHasBrightnessSliderToDisplay = showSlider;
- if (mAnimator == null && mBrightnessView != null) {
- // no animations, set the visibility manually
+ if (mBrightnessView != null) {
mBrightnessView.setVisibility(showSlider ? View.VISIBLE : View.GONE);
+
+ // as per showBrightnessSlider() in QSPanel.java, we look it up on-the-go
+ ToggleSlider brightnessSlider = (ToggleSlider) findViewById(R.id.brightness_slider);
+ if (brightnessSlider != null) {
+ brightnessSlider.setVisibility(showSlider ? View.VISIBLE : View.GONE);
+ }
+
}
- requestLayout();
+ getParent().requestLayout();
animateToState();
}
}