diff options
6 files changed, 98 insertions, 0 deletions
diff --git a/graphics/java/android/graphics/drawable/TransitionDrawable.java b/graphics/java/android/graphics/drawable/TransitionDrawable.java index 0122338a7255..3dfd68018a6b 100644 --- a/graphics/java/android/graphics/drawable/TransitionDrawable.java +++ b/graphics/java/android/graphics/drawable/TransitionDrawable.java @@ -118,6 +118,18 @@ public class TransitionDrawable extends LayerDrawable implements Drawable.Callba } /** + * Show the second layer on top of the first layer immediately + * + * @hide + */ + public void showSecondLayer() { + mAlpha = 255; + mReverse = false; + mTransitionState = TRANSITION_NONE; + invalidateSelf(); + } + + /** * Show only the first layer. */ public void resetTransition() { diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSDetailClipper.java b/packages/SystemUI/src/com/android/systemui/qs/QSDetailClipper.java index a318efcf4d50..c454048d0649 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSDetailClipper.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSDetailClipper.java @@ -100,4 +100,8 @@ public class QSDetailClipper { mAnimator = null; }; }; + + public void showBackground() { + mBackground.showSecondLayer(); + } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java index f9ccb50dfb41..4a91ee026953 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java @@ -89,6 +89,13 @@ public class QSFragment extends Fragment implements QS { if (savedInstanceState != null) { setExpanded(savedInstanceState.getBoolean(EXTRA_EXPANDED)); setListening(savedInstanceState.getBoolean(EXTRA_LISTENING)); + int[] loc = new int[2]; + View edit = view.findViewById(android.R.id.edit); + edit.getLocationInWindow(loc); + int x = loc[0] + edit.getWidth() / 2; + int y = loc[1] + edit.getHeight() / 2; + mQSCustomizer.setEditLocation(x, y); + mQSCustomizer.restoreInstanceState(savedInstanceState); } } @@ -105,6 +112,7 @@ public class QSFragment extends Fragment implements QS { super.onSaveInstanceState(outState); outState.putBoolean(EXTRA_EXPANDED, mQsExpanded); outState.putBoolean(EXTRA_LISTENING, mListening); + mQSCustomizer.saveInstanceState(outState); } @VisibleForTesting diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java index 30053e35ef05..6c95a8013108 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java @@ -20,6 +20,9 @@ import android.animation.Animator.AnimatorListener; import android.animation.AnimatorListenerAdapter; import android.content.Context; import android.content.res.Configuration; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.TransitionDrawable; +import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.support.v7.widget.DefaultItemAnimator; @@ -42,6 +45,7 @@ import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.plugins.qs.QS; import com.android.systemui.plugins.qs.QSTile; +import com.android.systemui.qs.QSContainerImpl; import com.android.systemui.qs.QSDetailClipper; import com.android.systemui.qs.QSTileHost; import com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer; @@ -60,6 +64,7 @@ import java.util.List; public class QSCustomizer extends LinearLayout implements OnMenuItemClickListener { private static final int MENU_RESET = Menu.FIRST; + private static final String EXTRA_QS_CUSTOMIZING = "qs_customizing"; private final QSDetailClipper mClipper; @@ -109,11 +114,16 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene DefaultItemAnimator animator = new DefaultItemAnimator(); animator.setMoveDuration(TileAdapter.MOVE_DURATION); mRecyclerView.setItemAnimator(animator); + updateNavBackDrop(getResources().getConfiguration()); } @Override protected void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); + updateNavBackDrop(newConfig); + } + + private void updateNavBackDrop(Configuration newConfig) { View navBackdrop = findViewById(R.id.nav_bar_background); if (navBackdrop != null) { boolean shouldShow = newConfig.smallestScreenWidthDp >= 600 @@ -154,6 +164,21 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene } } + + public void showImmediately() { + if (!isShown) { + setVisibility(VISIBLE); + mClipper.showBackground(); + isShown = true; + setTileSpecs(); + setCustomizing(true); + queryTiles(); + mNotifQsContainer.setCustomizerAnimating(false); + mNotifQsContainer.setCustomizerShowing(true); + Dependency.get(KeyguardMonitor.class).addCallback(mKeyguardCallback); + } + } + private void queryTiles() { mFinishedFetchingTiles = false; Runnable tileQueryFetchCompletion = () -> { @@ -227,6 +252,35 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene } } + + public void saveInstanceState(Bundle outState) { + if (isShown) { + Dependency.get(KeyguardMonitor.class).removeCallback(mKeyguardCallback); + } + outState.putBoolean(EXTRA_QS_CUSTOMIZING, mCustomizing); + } + + public void restoreInstanceState(Bundle savedInstanceState) { + boolean customizing = savedInstanceState.getBoolean(EXTRA_QS_CUSTOMIZING); + if (customizing) { + setVisibility(VISIBLE); + addOnLayoutChangeListener(new OnLayoutChangeListener() { + @Override + public void onLayoutChange(View v, int left, int top, int right, int bottom, + int oldLeft, + int oldTop, int oldRight, int oldBottom) { + removeOnLayoutChangeListener(this); + showImmediately(); + } + }); + } + } + + public void setEditLocation(int x, int y) { + mX = x; + mY = y; + } + private final Callback mKeyguardCallback = () -> { if (!isAttachedToWindow()) return; if (Dependency.get(KeyguardMonitor.class).isShowing() && !mOpening) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index 04bf10e8fb27..fed1dec5126e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -3497,6 +3497,11 @@ public class StatusBar extends SystemUI implements DemoMode, pw.print (" "); mNotificationPanel.dump(fd, pw, args); } + pw.println(" mStackScroller: "); + if (mStackScroller != null) { + pw.print (" "); + mStackScroller.dump(fd, pw, args); + } DozeLog.dump(pw); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java index 41cde9c7dd5e..2981b3992dab 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java @@ -91,6 +91,8 @@ import com.android.systemui.statusbar.policy.ScrollAdapter; import android.support.v4.graphics.ColorUtils; +import java.io.FileDescriptor; +import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -4257,6 +4259,19 @@ public class NotificationStackScrollLayout extends ViewGroup mShelf.setDarkOffsetX(shelfOffsetX); } + public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { + pw.println(String.format("[%s: pulsing=%s qsCustomizerShowing=%s visibility=%s" + + " alpha:%f scrollY:%d]", + this.getClass().getSimpleName(), + mPulsing != null ?"T":"f", + mAmbientState.isQsCustomizerShowing() ? "T":"f", + getVisibility() == View.VISIBLE ? "visible" + : getVisibility() == View.GONE ? "gone" + : "invisible", + getAlpha(), + mAmbientState.getScrollY())); + } + /** * A listener that is notified when some child locations might have changed. */ |