diff options
author | Joe Onorato <joeo@google.com> | 2010-02-23 19:20:22 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-02-23 19:20:22 -0800 |
commit | 0e93b562f41759f05a449f68da5c4c14fb461a8f (patch) | |
tree | f98b2474f82906828ba205298ddaab85095d58e8 | |
parent | a439e52725c0dcd52cbd1673df37c76fa5c7d349 (diff) | |
parent | f0fda925e6e82a7ceaf580718c1f8de2c2b8dadc (diff) | |
download | frameworks_base-0e93b562f41759f05a449f68da5c4c14fb461a8f.zip frameworks_base-0e93b562f41759f05a449f68da5c4c14fb461a8f.tar.gz frameworks_base-0e93b562f41759f05a449f68da5c4c14fb461a8f.tar.bz2 |
Merge "Make the notification windowshade work properly with overscroll."
4 files changed, 36 insertions, 56 deletions
diff --git a/core/res/res/layout/status_bar_expanded.xml b/core/res/res/layout/status_bar_expanded.xml index a0cd11d..30138a7 100644 --- a/core/res/res/layout/status_bar_expanded.xml +++ b/core/res/res/layout/status_bar_expanded.xml @@ -20,9 +20,9 @@ <com.android.server.status.ExpandedView xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" - android:background="@drawable/status_bar_background" android:focusable="true" - android:descendantFocusability="afterDescendants"> + android:descendantFocusability="afterDescendants" + > <LinearLayout android:layout_width="match_parent" @@ -79,19 +79,18 @@ <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_weight="1" > <ScrollView android:id="@+id/scroll" android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_weight="1" + android:layout_height="match_parent" android:fadingEdge="none" > <com.android.server.status.NotificationLinearLayout android:id="@+id/notificationLinearLayout" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_weight="1" android:orientation="vertical" > @@ -136,7 +135,7 @@ <ImageView android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="match_parent" android:src="@drawable/title_bar_shadow" android:scaleType="fitXY" /> diff --git a/services/java/com/android/server/status/ExpandedView.java b/services/java/com/android/server/status/ExpandedView.java index d0f14cb..33ac8c1 100644 --- a/services/java/com/android/server/status/ExpandedView.java +++ b/services/java/com/android/server/status/ExpandedView.java @@ -11,17 +11,11 @@ import android.util.Log; public class ExpandedView extends LinearLayout { - final Display mDisplay; StatusBarService mService; - boolean mTracking; - int mStartX, mStartY; - int mMaxHeight = 0; int mPrevHeight = -1; public ExpandedView(Context context, AttributeSet attrs) { super(context, attrs); - mDisplay = ((WindowManager)context.getSystemService( - Context.WINDOW_SERVICE)).getDefaultDisplay(); } @Override @@ -36,12 +30,6 @@ public class ExpandedView extends LinearLayout { } @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, - MeasureSpec.makeMeasureSpec(mMaxHeight, MeasureSpec.AT_MOST)); - } - - @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); int height = bottom - top; @@ -51,11 +39,4 @@ public class ExpandedView extends LinearLayout { mService.updateExpandedViewPos(StatusBarService.EXPANDED_LEAVE_ALONE); } } - - void setMaxHeight(int h) { - if (h != mMaxHeight) { - mMaxHeight = h; - requestLayout(); - } - } } diff --git a/services/java/com/android/server/status/StatusBarService.java b/services/java/com/android/server/status/StatusBarService.java index 493bd93..3f77291 100644 --- a/services/java/com/android/server/status/StatusBarService.java +++ b/services/java/com/android/server/status/StatusBarService.java @@ -187,8 +187,9 @@ public class StatusBarService extends IStatusBar.Stub TextView mSpnLabel; TextView mPlmnLabel; TextView mClearButton; + View mExpandedContents; CloseDragHandle mCloseView; - int[] mCloseLocation = new int[2]; + int[] mPositionTmp = new int[2]; boolean mExpanded; boolean mExpandedVisible; @@ -198,7 +199,7 @@ public class StatusBarService extends IStatusBar.Stub // the tracker view TrackingView mTrackingView; WindowManager.LayoutParams mTrackingParams; - int mTrackingPosition; + int mTrackingPosition; // the position of the top of the tracking view. // ticker private Ticker mTicker; @@ -274,6 +275,7 @@ public class StatusBarService extends IStatusBar.Stub mExpandedDialog = new ExpandedDialog(context); mExpandedView = expanded; + mExpandedContents = expanded.findViewById(R.id.notificationLinearLayout); mOngoingTitle = (TextView)expanded.findViewById(R.id.ongoingTitle); mOngoingItems = (LinearLayout)expanded.findViewById(R.id.ongoingItems); mLatestTitle = (TextView)expanded.findViewById(R.id.latestTitle); @@ -1530,20 +1532,11 @@ public class StatusBarService extends IStatusBar.Stub /// ---------- Expanded View -------------- pixelFormat = PixelFormat.TRANSLUCENT; - bg = mExpandedView.getBackground(); - if (bg != null) { - pixelFormat = bg.getOpacity(); - if (pixelFormat != PixelFormat.TRANSLUCENT) { - // we want good-looking gradients, so we force a 8-bits per - // pixel format. - pixelFormat = PixelFormat.RGBX_8888; - } - } final int disph = mDisplay.getHeight(); lp = mExpandedDialog.getWindow().getAttributes(); lp.width = ViewGroup.LayoutParams.MATCH_PARENT; - lp.height = ViewGroup.LayoutParams.WRAP_CONTENT; + lp.height = getExpandedHeight(); lp.x = 0; mTrackingPosition = lp.y = -disph; // sufficiently large negative lp.type = WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL; @@ -1562,10 +1555,10 @@ public class StatusBarService extends IStatusBar.Stub mExpandedDialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); mExpandedDialog.setContentView(mExpandedView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.WRAP_CONTENT)); + ViewGroup.LayoutParams.MATCH_PARENT)); + mExpandedDialog.getWindow().setBackgroundDrawable(null); mExpandedDialog.show(); FrameLayout hack = (FrameLayout)mExpandedView.getParent(); - hack.setForeground(null); } void setDateViewVisibility(boolean visible, int anim) { @@ -1630,11 +1623,15 @@ public class StatusBarService extends IStatusBar.Stub mTrackingParams.height = disph-h; WindowManagerImpl.getDefault().updateViewLayout(mTrackingView, mTrackingParams); - mCloseView.getLocationInWindow(mCloseLocation); - if (mExpandedParams != null) { + mCloseView.getLocationInWindow(mPositionTmp); + final int closePos = mPositionTmp[1]; + + mExpandedContents.getLocationInWindow(mPositionTmp); + final int contentsBottom = mPositionTmp[1] + mExpandedContents.getHeight(); + mExpandedParams.y = pos + mTrackingView.getHeight() - - (mTrackingParams.height-mCloseLocation[1]) - mExpandedView.getHeight(); + - (mTrackingParams.height-closePos) - contentsBottom; int max = h; if (mExpandedParams.y > max) { mExpandedParams.y = max; @@ -1644,13 +1641,13 @@ public class StatusBarService extends IStatusBar.Stub mExpandedParams.y = min; } - /* - Log.d(TAG, "mTrackingPosition=" + mTrackingPosition - + " mTrackingView.height=" + mTrackingView.getHeight() - + " diff=" + (mTrackingPosition + mTrackingView.getHeight()) - + " h=" + h); - */ - panelSlightlyVisible((mTrackingPosition + mTrackingView.getHeight()) > h); + boolean visible = (mTrackingPosition + mTrackingView.getHeight()) > h; + if (!visible) { + // if the contents aren't visible, move the expanded view way off screen + // because the window itself extends below the content view. + mExpandedParams.y = -disph; + } + panelSlightlyVisible(visible); mExpandedDialog.getWindow().setAttributes(mExpandedParams); } @@ -1658,16 +1655,19 @@ public class StatusBarService extends IStatusBar.Stub Log.d(TAG, "updateExpandedViewPos after expandedPosition=" + expandedPosition + " mTrackingParams.y=" + mTrackingParams.y + " mTrackingPosition=" + mTrackingPosition - + " mExpandedParams.y=" + mExpandedParams.y); + + " mExpandedParams.y=" + mExpandedParams.y + + " mExpandedParams.height=" + mExpandedParams.height); } } - void updateAvailableHeight() { + int getExpandedHeight() { + return mDisplay.getHeight() - mStatusBarView.getHeight() - mCloseView.getHeight(); + } + + void updateExpandedHeight() { if (mExpandedView != null) { - int disph = mDisplay.getHeight(); - int h = mStatusBarView.getHeight(); - int max = disph - (mCloseView.getHeight() + h); - mExpandedView.setMaxHeight(max); + mExpandedParams.height = getExpandedHeight(); + mExpandedDialog.getWindow().setAttributes(mExpandedParams); } } diff --git a/services/java/com/android/server/status/TrackingView.java b/services/java/com/android/server/status/TrackingView.java index 722d10c..886d66d 100644 --- a/services/java/com/android/server/status/TrackingView.java +++ b/services/java/com/android/server/status/TrackingView.java @@ -23,7 +23,7 @@ public class TrackingView extends LinearLayout { @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); - mService.updateAvailableHeight(); + mService.updateExpandedHeight(); } @Override |