1fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler/* 2fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler * Copyright (C) 2011 The Android Open Source Project 3fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler * 4fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler * Licensed under the Apache License, Version 2.0 (the "License"); 5fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler * you may not use this file except in compliance with the License. 6fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler * You may obtain a copy of the License at 7fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler * 8fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler * http://www.apache.org/licenses/LICENSE-2.0 9fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler * 10fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler * Unless required by applicable law or agreed to in writing, software 11fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler * distributed under the License is distributed on an "AS IS" BASIS, 12fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler * See the License for the specific language governing permissions and 14fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler * limitations under the License. 15fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler */ 16fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler 17fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandlerpackage com.android.systemui.statusbar.policy; 18fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler 19eda110fdf13021704111c6939abfafdca3d16f9cChris Wrenimport android.app.Notification; 20fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandlerimport android.content.Context; 21fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandlerimport android.content.res.Configuration; 22fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandlerimport android.graphics.Rect; 23fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandlerimport android.util.AttributeSet; 24fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandlerimport android.util.Log; 25fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandlerimport android.view.MotionEvent; 26fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandlerimport android.view.View; 27fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandlerimport android.view.ViewConfiguration; 28fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandlerimport android.view.ViewGroup; 290f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wrenimport android.widget.FrameLayout; 30fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandlerimport android.widget.LinearLayout; 31fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler 3251c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wrenimport com.android.systemui.ExpandHelper; 33fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandlerimport com.android.systemui.R; 34fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandlerimport com.android.systemui.SwipeHelper; 35fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandlerimport com.android.systemui.statusbar.BaseStatusBar; 3651c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wrenimport com.android.systemui.statusbar.NotificationData; 37fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler 380f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wrenpublic class HeadsUpNotificationView extends FrameLayout implements SwipeHelper.Callback, ExpandHelper.Callback { 39157026f820f9ff08a63c78368f928a505cb11ec5Chris Wren private static final String TAG = "HeadsUpNotificationView"; 40fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler private static final boolean DEBUG = false; 416d15a364f26bd61122bfdd127eee225ca65206f5Chris Wren private static final boolean SPEW = DEBUG; 42fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler 43fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler Rect mTmpRect = new Rect(); 44fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler 4551c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren private final int mTouchSensitivityDelay; 46fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler private SwipeHelper mSwipeHelper; 47209bede6b9edb9171e5bee4077b48e35004a37b4John Spurlock 4851c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren private BaseStatusBar mBar; 4951c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren private ExpandHelper mExpandHelper; 5051c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren private long mStartTouchTime; 5151c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren 52fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler private ViewGroup mContentHolder; 530f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren private ViewGroup mContentSlider; 54209bede6b9edb9171e5bee4077b48e35004a37b4John Spurlock 5551c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren private NotificationData.Entry mHeadsUp; 56fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler 57157026f820f9ff08a63c78368f928a505cb11ec5Chris Wren public HeadsUpNotificationView(Context context, AttributeSet attrs) { 58fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler this(context, attrs, 0); 59fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler } 60fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler 61157026f820f9ff08a63c78368f928a505cb11ec5Chris Wren public HeadsUpNotificationView(Context context, AttributeSet attrs, int defStyle) { 62fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler super(context, attrs, defStyle); 6351c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren mTouchSensitivityDelay = getResources().getInteger(R.integer.heads_up_sensitivity_delay); 6451c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren if (DEBUG) Log.v(TAG, "create() " + mTouchSensitivityDelay); 65fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler } 66fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler 670f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren public void setBar(BaseStatusBar bar) { 680f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren mBar = bar; 690f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren } 700f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren 710f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren public ViewGroup getHolder() { 720f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren return mContentHolder; 730f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren } 740f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren 750f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren public boolean setNotification(NotificationData.Entry headsUp) { 760f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren mHeadsUp = headsUp; 770f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren mHeadsUp.row.setExpanded(false); 780f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren if (mContentHolder == null) { 790f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren // too soon! 800f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren return false; 810f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren } 820f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren mContentHolder.setX(0); 830f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren mContentHolder.setVisibility(View.VISIBLE); 840f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren mContentHolder.setAlpha(1f); 850f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren mContentHolder.removeAllViews(); 860f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren mContentHolder.addView(mHeadsUp.row); 874c91312d55d0521bc9944514f8a7c9b943fc4f2bChris Wren mSwipeHelper.snapChild(mContentSlider, 1f); 880f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren mStartTouchTime = System.currentTimeMillis() + mTouchSensitivityDelay; 890f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren return true; 900f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren } 910f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren 926d15a364f26bd61122bfdd127eee225ca65206f5Chris Wren public boolean isClearable() { 936d15a364f26bd61122bfdd127eee225ca65206f5Chris Wren return mHeadsUp == null || mHeadsUp.notification.isClearable(); 940f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren } 950f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren 960f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren public void setMargin(int notificationPanelMarginPx) { 976d15a364f26bd61122bfdd127eee225ca65206f5Chris Wren if (SPEW) Log.v(TAG, "setMargin() " + notificationPanelMarginPx); 980f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren if (mContentSlider != null) { 990f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) mContentSlider.getLayoutParams(); 1000f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren lp.setMarginStart(notificationPanelMarginPx); 1010f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren mContentSlider.setLayoutParams(lp); 1020f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren } 1030f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren } 1040f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren 1050f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren // LinearLayout methods 1060f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren 1070f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren @Override 1080f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren public void onDraw(android.graphics.Canvas c) { 1090f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren super.onDraw(c); 1100f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren if (DEBUG) { 1110f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren //Log.d(TAG, "onDraw: canvas height: " + c.getHeight() + "px; measured height: " 1120f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren // + getMeasuredHeight() + "px"); 1130f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren c.save(); 1140f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren c.clipRect(6, 6, c.getWidth() - 6, getMeasuredHeight() - 6, 1150f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren android.graphics.Region.Op.DIFFERENCE); 1160f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren c.drawColor(0xFFcc00cc); 1170f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren c.restore(); 1180f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren } 1190f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren } 1200f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren 1210f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren // ViewGroup methods 1220f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren 123fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler @Override 124fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler public void onAttachedToWindow() { 125fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler float densityScale = getResources().getDisplayMetrics().density; 126fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler float pagingTouchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop(); 127fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler mSwipeHelper = new SwipeHelper(SwipeHelper.X, this, densityScale, pagingTouchSlop); 128209bede6b9edb9171e5bee4077b48e35004a37b4John Spurlock 12951c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren int minHeight = getResources().getDimensionPixelSize(R.dimen.notification_row_min_height); 13051c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren int maxHeight = getResources().getDimensionPixelSize(R.dimen.notification_row_max_height); 13151c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren mExpandHelper = new ExpandHelper(mContext, this, minHeight, maxHeight); 13251c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren 1330f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren mContentHolder = (ViewGroup) findViewById(R.id.content_holder); 1340f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren mContentSlider = (ViewGroup) findViewById(R.id.content_slider); 1350f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren 136157026f820f9ff08a63c78368f928a505cb11ec5Chris Wren if (mHeadsUp != null) { 137fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler // whoops, we're on already! 13851c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren setNotification(mHeadsUp); 139fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler } 140fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler } 141209bede6b9edb9171e5bee4077b48e35004a37b4John Spurlock 142fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler @Override 143fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler public boolean onInterceptTouchEvent(MotionEvent ev) { 144fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler if (DEBUG) Log.v(TAG, "onInterceptTouchEvent()"); 14551c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren if (System.currentTimeMillis() < mStartTouchTime) { 14651c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren return true; 14751c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren } 14851c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren return mSwipeHelper.onInterceptTouchEvent(ev) 14951c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren || mExpandHelper.onInterceptTouchEvent(ev) 15051c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren || super.onInterceptTouchEvent(ev); 151fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler } 152fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler 1530f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren // View methods 1540f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren 155fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler @Override 156fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler public boolean onTouchEvent(MotionEvent ev) { 15751c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren if (System.currentTimeMillis() < mStartTouchTime) { 15851c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren return false; 15951c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren } 16051c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren mBar.resetHeadsUpDecayTimer(); 16151c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren return mSwipeHelper.onTouchEvent(ev) 16251c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren || mExpandHelper.onTouchEvent(ev) 16351c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren || super.onTouchEvent(ev); 164fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler } 165fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler 166fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler @Override 167fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler protected void onConfigurationChanged(Configuration newConfig) { 168fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler super.onConfigurationChanged(newConfig); 169fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler float densityScale = getResources().getDisplayMetrics().density; 170fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler mSwipeHelper.setDensityScale(densityScale); 171fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler float pagingTouchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop(); 172fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler mSwipeHelper.setPagingTouchSlop(pagingTouchSlop); 173fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler } 174fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler 1750f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren // ExpandHelper.Callback methods 17651c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren 17751c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren @Override 17851c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren public View getChildAtRawPosition(float x, float y) { 17951c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren return getChildAtPosition(x, y); 18051c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren } 18151c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren 18251c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren @Override 18351c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren public View getChildAtPosition(float x, float y) { 18451c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren return mHeadsUp == null ? null : mHeadsUp.row; 18551c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren } 18651c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren 18751c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren @Override 18851c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren public boolean canChildBeExpanded(View v) { 18951c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren return mHeadsUp != null && mHeadsUp.row == v && mHeadsUp.row.isExpandable(); 19051c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren } 19151c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren 19251c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren @Override 19351c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren public void setUserExpandedChild(View v, boolean userExpanded) { 19451c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren if (mHeadsUp != null && mHeadsUp.row == v) { 19551c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren mHeadsUp.row.setUserExpanded(userExpanded); 19651c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren } 19751c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren } 19851c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren 19951c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren @Override 20051c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren public void setUserLockedChild(View v, boolean userLocked) { 20151c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren if (mHeadsUp != null && mHeadsUp.row == v) { 20251c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren mHeadsUp.row.setUserLocked(userLocked); 20351c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren } 20451c7510e493680b4aca1ed7695b35c52d2cd63ffChris Wren } 205eda110fdf13021704111c6939abfafdca3d16f9cChris Wren 2060f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren // SwipeHelper.Callback methods 2070f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren 2080f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren @Override 2090f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren public boolean canChildBeDismissed(View v) { 2100f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren return true; 2110f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren } 2120f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren 2130f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren @Override 2140f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren public void onChildDismissed(View v) { 2150f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren Log.v(TAG, "User swiped heads up to dismiss"); 2160f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren mBar.onHeadsUpDismissed(); 2170f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren } 2180f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren 2190f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren @Override 2200f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren public void onBeginDrag(View v) { 2210f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren } 2220f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren 2230f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren @Override 2240f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren public void onDragCancelled(View v) { 2250f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren mContentHolder.setAlpha(1f); // sometimes this isn't quite reset 2260f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren } 2270f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren 2280f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren @Override 2290f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren public View getChildAtPosition(MotionEvent ev) { 2300f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren return mContentSlider; 2310f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren } 2320f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren 2330f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren @Override 2340f2aa68e3c8356b0adcd91a3156ce6934c8b85f2Chris Wren public View getChildContentView(View v) { 2354c91312d55d0521bc9944514f8a7c9b943fc4f2bChris Wren return mContentSlider; 236eda110fdf13021704111c6939abfafdca3d16f9cChris Wren } 237fa7887bebf57f3dcb8283d73e69ba1daa115225fDaniel Sandler}