diff options
Diffstat (limited to 'packages/SystemUI/src/com/android')
3 files changed, 42 insertions, 30 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(); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 79aca86..41fd86a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -1230,9 +1230,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, Log.e(TAG, "Unable to unregister custom tile listener", e); } - // clear out old tile states and views - mQSPanel.setTiles(new ArrayList<QSTile<?>>()); - mQSTileHost.resetTiles(); // reregister service @@ -3741,7 +3738,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, } mQSPanel.getHost().setCustomTileListenerService(null); - mQSPanel.setTiles(new ArrayList<QSTile<?>>()); mQSPanel.setListening(false); makeStatusBarView(); |