diff options
Diffstat (limited to 'src/com/android/dialer/list/PhoneFavoriteFragment.java')
-rw-r--r-- | src/com/android/dialer/list/PhoneFavoriteFragment.java | 167 |
1 files changed, 28 insertions, 139 deletions
diff --git a/src/com/android/dialer/list/PhoneFavoriteFragment.java b/src/com/android/dialer/list/PhoneFavoriteFragment.java index f3787e5b8..ed6b5c810 100644 --- a/src/com/android/dialer/list/PhoneFavoriteFragment.java +++ b/src/com/android/dialer/list/PhoneFavoriteFragment.java @@ -49,7 +49,6 @@ import com.android.contacts.common.ContactPhotoManager; import com.android.contacts.common.ContactTileLoaderFactory; import com.android.contacts.common.GeoUtil; import com.android.contacts.common.list.ContactEntry; -import com.android.contacts.common.list.ContactListItemView; import com.android.contacts.common.list.ContactTileView; import com.android.contacts.common.list.OnPhoneNumberPickerActionListener; import com.android.dialer.DialtactsActivity; @@ -58,7 +57,6 @@ import com.android.dialer.calllog.CallLogAdapter; import com.android.dialer.calllog.CallLogQuery; import com.android.dialer.calllog.CallLogQueryHandler; import com.android.dialer.calllog.ContactInfoHelper; -import com.android.dialer.list.PhoneFavoritesTileAdapter.ContactTileRow; import com.android.dialerbind.ObjectFactory; import java.util.ArrayList; @@ -161,7 +159,7 @@ public class PhoneFavoriteFragment extends Fragment implements OnItemClickListen @Override public int getApproximateTileWidth() { - return getView().getWidth() / mContactTileAdapter.getColumnCount(); + return getView().getWidth(); } } @@ -233,9 +231,7 @@ public class PhoneFavoriteFragment extends Fragment implements OnItemClickListen // We don't construct the resultant adapter at this moment since it requires LayoutInflater // that will be available on onCreateView(). mContactTileAdapter = new PhoneFavoritesTileAdapter(activity, mContactTileAdapterListener, - this, - getResources().getInteger(R.integer.contact_tile_column_count_in_favorites), - PhoneFavoritesTileAdapter.NO_ROW_LIMIT); + this); mContactTileAdapter.setPhotoLoader(ContactPhotoManager.getInstance(activity)); } @@ -271,7 +267,6 @@ public class PhoneFavoriteFragment extends Fragment implements OnItemClickListen mParentView = inflater.inflate(R.layout.phone_favorites_fragment, container, false); mListView = (PhoneFavoriteListView) mParentView.findViewById(R.id.contact_tile_list); - mListView.setItemsCanFocus(true); mListView.setOnItemClickListener(this); mListView.setVerticalScrollBarEnabled(false); mListView.setVerticalScrollbarPosition(View.SCROLLBAR_POSITION_RIGHT); @@ -294,9 +289,10 @@ public class PhoneFavoriteFragment extends Fragment implements OnItemClickListen mAdapter = new PhoneFavoriteMergedAdapter(getActivity(), this, mContactTileAdapter, mCallLogAdapter, mPhoneFavoritesMenu, mTileInteractionTeaserView); + mTileInteractionTeaserView.setAdapter(mAdapter); - mListView.setAdapter(mAdapter); + mListView.setAdapter(mContactTileAdapter); mListView.setOnScrollListener(mScrollListener); mListView.setFastScrollEnabled(false); @@ -381,7 +377,6 @@ public class PhoneFavoriteFragment extends Fragment implements OnItemClickListen @Override public void onCallsFetched(Cursor cursor) { - animateListView(); mCallLogAdapter.setLoading(false); // Save the date of the most recent call log item @@ -412,7 +407,6 @@ public class PhoneFavoriteFragment extends Fragment implements OnItemClickListen * that slide views from their previous positions to their new ones, to give the appearance * that the views are sliding into their new positions. */ - @SuppressWarnings("unchecked") private void saveOffsets(int removedItemHeight) { final int firstVisiblePosition = mListView.getFirstVisiblePosition(); if (DEBUG) { @@ -421,114 +415,22 @@ public class PhoneFavoriteFragment extends Fragment implements OnItemClickListen for (int i = 0; i < mListView.getChildCount(); i++) { final View child = mListView.getChildAt(i); final int position = firstVisiblePosition + i; - final long itemId = mAdapter.getItemId(position); - final int itemViewType = mAdapter.getItemViewType(position); - if (itemViewType == PhoneFavoritesTileAdapter.ViewTypes.TOP && - child instanceof ContactTileRow) { - // This is a tiled row, so save horizontal offsets instead - saveHorizontalOffsets((ContactTileRow) child, (ArrayList<ContactEntry>) - mAdapter.getItem(position), - mAdapter.getAdjustedPositionInContactTileAdapter(position)); - } + final long itemId = mContactTileAdapter.getItemId(position); if (DEBUG) { Log.d(TAG, "Saving itemId: " + itemId + " for listview child " + i + " Top: " + child.getTop()); } mItemIdTopMap.put(itemId, child.getTop()); - } - - mItemIdTopMap.put(KEY_REMOVED_ITEM_HEIGHT, removedItemHeight); - } - - /** - * Saves the horizontal offsets for contacts that are displayed as tiles in a row. Saving - * these offsets allow us to animate tiles sliding left and right within the same row. - * See {@link #saveOffsets(int removedItemHeight)} - */ - private void saveHorizontalOffsets(ContactTileRow row, ArrayList<ContactEntry> list, - int currentRowIndex) { - for (int i = 0; i < list.size() && i < row.getChildCount(); i++) { - final View child = row.getChildAt(i); - if (child == null) { - continue; - } - final ContactEntry entry = list.get(i); - final long itemId = mContactTileAdapter.getAdjustedItemId(entry.id); - if (DEBUG) { - Log.d(TAG, "Saving itemId: " + itemId + " for tileview child " + i + " Left: " - + child.getTop()); - } - mItemIdTopMap.put(itemId, currentRowIndex); mItemIdLeftMap.put(itemId, child.getLeft()); } - } - - /* - * Performs a animations for a row of tiles - */ - private void performHorizontalAnimations(ContactTileRow row, ArrayList<ContactEntry> list, - long[] idsInPlace, int currentRow) { - if (mItemIdLeftMap.isEmpty()) { - return; - } - final AnimatorSet animSet = new AnimatorSet(); - final ArrayList<Animator> animators = new ArrayList<Animator>(); - for (int i = 0; i < list.size(); i++) { - final View child = row.getChildAt(i); - final ContactEntry entry = list.get(i); - final long itemId = mContactTileAdapter.getAdjustedItemId(entry.id); - - if (containsId(idsInPlace, itemId)) { - animators.add(ObjectAnimator.ofFloat( - child, "alpha", 0.0f, 1.0f)); - break; - } else { - Integer startLeft = mItemIdLeftMap.get(itemId); - int left = child.getLeft(); - - Integer startRow = mItemIdTopMap.get(itemId); - if (startRow != null) { - if (startRow > currentRow) { - // Item has shifted upwards to the previous row. - // It should now animate in from right to left. - startLeft = left + child.getWidth(); - } else if (startRow < currentRow) { - // Item has shifted downwards to the next row. - // It should now animate in from left to right. - startLeft = left - child.getWidth(); - } - // If the item hasn't shifted rows (startRow == currentRow), it either remains - // in the same position or has shifted left or right within its current row. - // Either way, startLeft has already been correctly saved and retrieved from - // mItemIdTopMap. - } - - if (startLeft != null) { - if (startLeft != left) { - int delta = startLeft - left; - if (DEBUG) { - Log.d(TAG, "Found itemId: " + itemId + " for tileview child " + i + - " Left: " + left + - " Delta: " + delta); - } - animators.add(ObjectAnimator.ofFloat( - child, "translationX", delta, 0.0f)); - } - } - } - } - if (animators.size() > 0) { - animSet.setDuration(mAnimationDuration).playTogether(animators); - animSet.start(); - } + mItemIdTopMap.put(KEY_REMOVED_ITEM_HEIGHT, removedItemHeight); } /* - * Performs animations for the list view. If the list item is a row of tiles, horizontal - * animations will be performed instead. + * Performs animations for the gridView */ - private void animateListView(final long... idsInPlace) { + private void animateGridView(final long... idsInPlace) { if (mItemIdTopMap.isEmpty()) { // Don't do animations if the database is being queried for the first time and // the previous item offsets have not been cached, or the user hasn't done anything @@ -536,8 +438,6 @@ public class PhoneFavoriteFragment extends Fragment implements OnItemClickListen return; } - final int removedItemHeight = mItemIdTopMap.get(KEY_REMOVED_ITEM_HEIGHT); - final ViewTreeObserver observer = mListView.getViewTreeObserver(); observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @SuppressWarnings("unchecked") @@ -550,16 +450,8 @@ public class PhoneFavoriteFragment extends Fragment implements OnItemClickListen for (int i = 0; i < mListView.getChildCount(); i++) { final View child = mListView.getChildAt(i); int position = firstVisiblePosition + i; - final int itemViewType = mAdapter.getItemViewType(position); - if (itemViewType == PhoneFavoritesTileAdapter.ViewTypes.TOP && - child instanceof ContactTileRow) { - // This is a tiled row, so perform horizontal animations instead - performHorizontalAnimations((ContactTileRow) child, ( - ArrayList<ContactEntry>) mAdapter.getItem(position), idsInPlace, - mAdapter.getAdjustedPositionInContactTileAdapter(position)); - } - final long itemId = mAdapter.getItemId(position); + final long itemId = mContactTileAdapter.getItemId(position); if (containsId(idsInPlace, itemId)) { animators.add(ObjectAnimator.ofFloat( @@ -567,35 +459,32 @@ public class PhoneFavoriteFragment extends Fragment implements OnItemClickListen break; } else { Integer startTop = mItemIdTopMap.get(itemId); + Integer startLeft = mItemIdLeftMap.get(itemId); final int top = child.getTop(); - int delta = 0; + final int left = child.getLeft(); + int deltaX = 0; + int deltaY = 0; + + if (startLeft != null) { + if (startLeft != left) { + deltaX = startLeft - left; + animators.add(ObjectAnimator.ofFloat( + child, "translationX", deltaX, 0.0f)); + } + } + if (startTop != null) { if (startTop != top) { - delta = startTop - top; - } - } else if (!mItemIdLeftMap.containsKey(itemId)) { - // Animate new views along with the others. The catch is that they did - // not exist in the start state, so we must calculate their starting - // position based on neighboring views. - - final int itemHeight; - if (removedItemHeight == 0) { - itemHeight = child.getHeight() + mListView.getDividerHeight(); - } else { - itemHeight = removedItemHeight; + deltaY = startTop - top; + animators.add(ObjectAnimator.ofFloat( + child, "translationY", deltaY, 0.0f)); } - startTop = top + (i > 0 ? itemHeight : -itemHeight); - delta = startTop - top; } + if (DEBUG) { Log.d(TAG, "Found itemId: " + itemId + " for listview child " + i + " Top: " + top + - " Delta: " + delta); - } - - if (delta != 0) { - animators.add(ObjectAnimator.ofFloat( - child, "translationY", delta, 0.0f)); + " Delta: " + deltaY); } } } @@ -624,7 +513,7 @@ public class PhoneFavoriteFragment extends Fragment implements OnItemClickListen @Override public void onDataSetChangedForAnimation(long... idsInPlace) { - animateListView(idsInPlace); + animateGridView(idsInPlace); } @Override |