Loading res/layout/phone_favorites_fragment.xml +1 −1 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> <com.android.dialer.list.SwipeableListView <com.android.dialer.list.PhoneFavoriteListView android:id="@+id/contact_tile_list" android:layout_width="match_parent" android:layout_height="match_parent" Loading src/com/android/dialer/list/PhoneFavoriteFragment.java +2 −2 Original line number Diff line number Diff line Loading @@ -145,7 +145,7 @@ public class PhoneFavoriteFragment extends Fragment implements OnItemClickListen private CallLogQueryHandler mCallLogQueryHandler; private TextView mEmptyView; private SwipeableListView mListView; private PhoneFavoriteListView mListView; private View mShowAllContactsButton; private final HashMap<Long, Integer> mItemIdTopMap = new HashMap<Long, Integer>(); Loading Loading @@ -206,7 +206,7 @@ public class PhoneFavoriteFragment extends Fragment implements OnItemClickListen final View listLayout = inflater.inflate( R.layout.phone_favorites_fragment, container, false); mListView = (SwipeableListView) listLayout.findViewById(R.id.contact_tile_list); mListView = (PhoneFavoriteListView) listLayout.findViewById(R.id.contact_tile_list); mListView.setItemsCanFocus(true); mListView.setOnItemClickListener(this); mListView.setVerticalScrollBarEnabled(false); Loading src/com/android/dialer/list/SwipeableListView.java→src/com/android/dialer/list/PhoneFavoriteListView.java +88 −16 Original line number Diff line number Diff line Loading @@ -19,10 +19,13 @@ package com.android.dialer.list; import android.content.Context; import android.content.res.Configuration; import android.os.Handler; import android.util.AttributeSet; import android.util.Log; import android.view.DragEvent; import android.view.MotionEvent; import android.view.View; import android.view.View.OnDragListener; import android.view.ViewConfiguration; import android.widget.ListView; Loading @@ -32,40 +35,75 @@ import com.android.dialer.list.SwipeHelper.OnItemGestureListener; import com.android.dialer.list.SwipeHelper.SwipeHelperCallback; /** * Copy of packages/apps/UnifiedEmail - com.android.mail.ui.Swipeable with changes. * The ListView composed of {@link ContactTileRow}. * This ListView handles both * - Swiping, which is borrowed from packages/apps/UnifiedEmail (com.android.mail.ui.Swipeable) * - Drag and drop */ public class SwipeableListView extends ListView implements SwipeHelperCallback { public class PhoneFavoriteListView extends ListView implements SwipeHelperCallback, OnDragListener { public static final String LOG_TAG = PhoneFavoriteListView.class.getSimpleName(); private SwipeHelper mSwipeHelper; private boolean mEnableSwipe = true; public static final String LOG_TAG = SwipeableListView.class.getSimpleName(); private OnItemGestureListener mOnItemGestureListener; public SwipeableListView(Context context) { private float mDensityScale; private float mTouchSlop; private int mTopScrollBound; private int mBottomScrollBound; private int mLastDragY; private Handler mScrollHandler; private final long SCROLL_HANDLER_DELAY_MILLIS = 5; private final int DRAG_SCROLL_PX_UNIT = 10; /** * {@link #mTopScrollBound} and {@link mBottomScrollBound} will be * offseted to the top / bottom by {@link #getHeight} * {@link #BOUND_GAP_RATIO} pixels. */ private final float BOUND_GAP_RATIO = 0.2f; private final Runnable mDragScroller = new Runnable() { @Override public void run() { if (mLastDragY <= mTopScrollBound) { smoothScrollBy(-DRAG_SCROLL_PX_UNIT, (int) SCROLL_HANDLER_DELAY_MILLIS); } else if (mLastDragY >= mBottomScrollBound) { smoothScrollBy(DRAG_SCROLL_PX_UNIT, (int) SCROLL_HANDLER_DELAY_MILLIS); } mScrollHandler.postDelayed(this, SCROLL_HANDLER_DELAY_MILLIS); } }; public PhoneFavoriteListView(Context context) { this(context, null); } public SwipeableListView(Context context, AttributeSet attrs) { public PhoneFavoriteListView(Context context, AttributeSet attrs) { this(context, attrs, -1); } public SwipeableListView(Context context, AttributeSet attrs, int defStyle) { public PhoneFavoriteListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); float densityScale = getResources().getDisplayMetrics().density; float pagingTouchSlop = ViewConfiguration.get(context).getScaledPagingTouchSlop(); mSwipeHelper = new SwipeHelper(context, SwipeHelper.X, this, densityScale, pagingTouchSlop); mDensityScale = getResources().getDisplayMetrics().density; mTouchSlop = ViewConfiguration.get(context).getScaledPagingTouchSlop(); mSwipeHelper = new SwipeHelper(context, SwipeHelper.X, this, mDensityScale, mTouchSlop); setItemsCanFocus(true); setOnDragListener(this); } @Override protected void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); float densityScale = getResources().getDisplayMetrics().density; mSwipeHelper.setDensityScale(densityScale); float pagingTouchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop(); mSwipeHelper.setPagingTouchSlop(pagingTouchSlop); mDensityScale= getResources().getDisplayMetrics().density; mTouchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop(); mSwipeHelper.setDensityScale(mDensityScale); mSwipeHelper.setPagingTouchSlop(mTouchSlop); } /** Loading Loading @@ -162,4 +200,38 @@ public class SwipeableListView extends ListView implements SwipeHelperCallback { // the chance to intercept events anymore requestDisallowInterceptTouchEvent(true); } @Override public boolean dispatchDragEvent(DragEvent event) { switch (event.getAction()) { case DragEvent.ACTION_DRAG_LOCATION: if (mScrollHandler == null) { mScrollHandler = getHandler(); } mLastDragY = (int) event.getY(); mScrollHandler.postDelayed(mDragScroller, SCROLL_HANDLER_DELAY_MILLIS); break; case DragEvent.ACTION_DRAG_ENTERED: final int boundGap = (int) (getHeight() * BOUND_GAP_RATIO); mTopScrollBound = (getTop() + boundGap); mBottomScrollBound = (getBottom() - boundGap); break; case DragEvent.ACTION_DRAG_EXITED: case DragEvent.ACTION_DRAG_ENDED: mScrollHandler.removeCallbacks(mDragScroller); break; case DragEvent.ACTION_DRAG_STARTED: // Not a receiver case DragEvent.ACTION_DROP: // Not a receiver default: break; } return super.dispatchDragEvent(event); } @Override public boolean onDrag(View v, DragEvent event) { return true; } } Loading
res/layout/phone_favorites_fragment.xml +1 −1 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> <com.android.dialer.list.SwipeableListView <com.android.dialer.list.PhoneFavoriteListView android:id="@+id/contact_tile_list" android:layout_width="match_parent" android:layout_height="match_parent" Loading
src/com/android/dialer/list/PhoneFavoriteFragment.java +2 −2 Original line number Diff line number Diff line Loading @@ -145,7 +145,7 @@ public class PhoneFavoriteFragment extends Fragment implements OnItemClickListen private CallLogQueryHandler mCallLogQueryHandler; private TextView mEmptyView; private SwipeableListView mListView; private PhoneFavoriteListView mListView; private View mShowAllContactsButton; private final HashMap<Long, Integer> mItemIdTopMap = new HashMap<Long, Integer>(); Loading Loading @@ -206,7 +206,7 @@ public class PhoneFavoriteFragment extends Fragment implements OnItemClickListen final View listLayout = inflater.inflate( R.layout.phone_favorites_fragment, container, false); mListView = (SwipeableListView) listLayout.findViewById(R.id.contact_tile_list); mListView = (PhoneFavoriteListView) listLayout.findViewById(R.id.contact_tile_list); mListView.setItemsCanFocus(true); mListView.setOnItemClickListener(this); mListView.setVerticalScrollBarEnabled(false); Loading
src/com/android/dialer/list/SwipeableListView.java→src/com/android/dialer/list/PhoneFavoriteListView.java +88 −16 Original line number Diff line number Diff line Loading @@ -19,10 +19,13 @@ package com.android.dialer.list; import android.content.Context; import android.content.res.Configuration; import android.os.Handler; import android.util.AttributeSet; import android.util.Log; import android.view.DragEvent; import android.view.MotionEvent; import android.view.View; import android.view.View.OnDragListener; import android.view.ViewConfiguration; import android.widget.ListView; Loading @@ -32,40 +35,75 @@ import com.android.dialer.list.SwipeHelper.OnItemGestureListener; import com.android.dialer.list.SwipeHelper.SwipeHelperCallback; /** * Copy of packages/apps/UnifiedEmail - com.android.mail.ui.Swipeable with changes. * The ListView composed of {@link ContactTileRow}. * This ListView handles both * - Swiping, which is borrowed from packages/apps/UnifiedEmail (com.android.mail.ui.Swipeable) * - Drag and drop */ public class SwipeableListView extends ListView implements SwipeHelperCallback { public class PhoneFavoriteListView extends ListView implements SwipeHelperCallback, OnDragListener { public static final String LOG_TAG = PhoneFavoriteListView.class.getSimpleName(); private SwipeHelper mSwipeHelper; private boolean mEnableSwipe = true; public static final String LOG_TAG = SwipeableListView.class.getSimpleName(); private OnItemGestureListener mOnItemGestureListener; public SwipeableListView(Context context) { private float mDensityScale; private float mTouchSlop; private int mTopScrollBound; private int mBottomScrollBound; private int mLastDragY; private Handler mScrollHandler; private final long SCROLL_HANDLER_DELAY_MILLIS = 5; private final int DRAG_SCROLL_PX_UNIT = 10; /** * {@link #mTopScrollBound} and {@link mBottomScrollBound} will be * offseted to the top / bottom by {@link #getHeight} * {@link #BOUND_GAP_RATIO} pixels. */ private final float BOUND_GAP_RATIO = 0.2f; private final Runnable mDragScroller = new Runnable() { @Override public void run() { if (mLastDragY <= mTopScrollBound) { smoothScrollBy(-DRAG_SCROLL_PX_UNIT, (int) SCROLL_HANDLER_DELAY_MILLIS); } else if (mLastDragY >= mBottomScrollBound) { smoothScrollBy(DRAG_SCROLL_PX_UNIT, (int) SCROLL_HANDLER_DELAY_MILLIS); } mScrollHandler.postDelayed(this, SCROLL_HANDLER_DELAY_MILLIS); } }; public PhoneFavoriteListView(Context context) { this(context, null); } public SwipeableListView(Context context, AttributeSet attrs) { public PhoneFavoriteListView(Context context, AttributeSet attrs) { this(context, attrs, -1); } public SwipeableListView(Context context, AttributeSet attrs, int defStyle) { public PhoneFavoriteListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); float densityScale = getResources().getDisplayMetrics().density; float pagingTouchSlop = ViewConfiguration.get(context).getScaledPagingTouchSlop(); mSwipeHelper = new SwipeHelper(context, SwipeHelper.X, this, densityScale, pagingTouchSlop); mDensityScale = getResources().getDisplayMetrics().density; mTouchSlop = ViewConfiguration.get(context).getScaledPagingTouchSlop(); mSwipeHelper = new SwipeHelper(context, SwipeHelper.X, this, mDensityScale, mTouchSlop); setItemsCanFocus(true); setOnDragListener(this); } @Override protected void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); float densityScale = getResources().getDisplayMetrics().density; mSwipeHelper.setDensityScale(densityScale); float pagingTouchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop(); mSwipeHelper.setPagingTouchSlop(pagingTouchSlop); mDensityScale= getResources().getDisplayMetrics().density; mTouchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop(); mSwipeHelper.setDensityScale(mDensityScale); mSwipeHelper.setPagingTouchSlop(mTouchSlop); } /** Loading Loading @@ -162,4 +200,38 @@ public class SwipeableListView extends ListView implements SwipeHelperCallback { // the chance to intercept events anymore requestDisallowInterceptTouchEvent(true); } @Override public boolean dispatchDragEvent(DragEvent event) { switch (event.getAction()) { case DragEvent.ACTION_DRAG_LOCATION: if (mScrollHandler == null) { mScrollHandler = getHandler(); } mLastDragY = (int) event.getY(); mScrollHandler.postDelayed(mDragScroller, SCROLL_HANDLER_DELAY_MILLIS); break; case DragEvent.ACTION_DRAG_ENTERED: final int boundGap = (int) (getHeight() * BOUND_GAP_RATIO); mTopScrollBound = (getTop() + boundGap); mBottomScrollBound = (getBottom() - boundGap); break; case DragEvent.ACTION_DRAG_EXITED: case DragEvent.ACTION_DRAG_ENDED: mScrollHandler.removeCallbacks(mDragScroller); break; case DragEvent.ACTION_DRAG_STARTED: // Not a receiver case DragEvent.ACTION_DROP: // Not a receiver default: break; } return super.dispatchDragEvent(event); } @Override public boolean onDrag(View v, DragEvent event) { return true; } }