diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2015-04-20 09:11:33 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2015-04-20 09:11:33 -0700 |
commit | 77e9bb4ba4b9b49b95a26d80ead59aa37d016232 (patch) | |
tree | 42066b9a56cda3a77b93ab5b707f771c25421050 /src/com | |
parent | 0b597cc753a3aeb3eda2f7a121e2972d638bea6d (diff) | |
parent | 78e1f922ade488d5f57dd415d4ac914b76713100 (diff) | |
download | android_packages_apps_Dialer-77e9bb4ba4b9b49b95a26d80ead59aa37d016232.tar.gz android_packages_apps_Dialer-77e9bb4ba4b9b49b95a26d80ead59aa37d016232.tar.bz2 android_packages_apps_Dialer-77e9bb4ba4b9b49b95a26d80ead59aa37d016232.zip |
Merge "Dialer: FPS is low when scrolling call logs"
Diffstat (limited to 'src/com')
-rwxr-xr-x | src/com/android/dialer/calllog/CallLogAdapter.java | 39 | ||||
-rw-r--r-- | src/com/android/dialer/calllog/CallLogAdapterHelper.java | 13 | ||||
-rw-r--r-- | src/com/android/dialer/calllog/CallLogFragment.java | 1 |
3 files changed, 47 insertions, 6 deletions
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java index e501931eb..01b07b68f 100755 --- a/src/com/android/dialer/calllog/CallLogAdapter.java +++ b/src/com/android/dialer/calllog/CallLogAdapter.java @@ -41,6 +41,8 @@ import android.view.ViewGroup; import android.view.ViewStub; import android.view.ViewTreeObserver; import android.view.accessibility.AccessibilityEvent; +import android.widget.AbsListView; +import android.widget.AbsListView.OnScrollListener; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; @@ -71,7 +73,8 @@ import java.util.LinkedList; * Adapter class to fill in data for the Call Log. */ public class CallLogAdapter extends GroupingListAdapter - implements CallLogAdapterHelper.Callback, CallLogGroupBuilder.GroupCreator { + implements CallLogAdapterHelper.Callback, CallLogGroupBuilder.GroupCreator, + OnScrollListener { private static final String TAG = CallLogAdapter.class.getSimpleName(); private static final int VOICEMAIL_TRANSCRIPTION_MAX_LINES = 10; @@ -470,7 +473,10 @@ public class CallLogAdapter extends GroupingListAdapter Calls.DURATION_TYPE_ACTIVE, subId, operator); } - mCallLogViewsHelper.setPhoneCallDetails(mContext, views, details); + if (!mAdapterHelper.isBusy()) { + // Only update views when ListView's scroll state is not SCROLL_STATE_FLING. + mCallLogViewsHelper.setPhoneCallDetails(mContext, views, details); + } int contactType = ContactPhotoManager.TYPE_DEFAULT; @@ -536,10 +542,8 @@ public class CallLogAdapter extends GroupingListAdapter * @return The day group for the call. */ private int getDayGroupForCall(long callId) { - if (mDayGroups.containsKey(callId)) { - return mDayGroups.get(callId); - } - return CallLogGroupBuilder.DAY_GROUP_NONE; + Integer result = mDayGroups.get(callId); + return result == null ? CallLogGroupBuilder.DAY_GROUP_NONE : result.intValue(); } /** * Determines if a call log row with the given Id is expanded. @@ -1155,4 +1159,27 @@ public class CallLogAdapter extends GroupingListAdapter DialerUtils.startActivityWithErrorToast(mContext, intent, R.string.add_contact_not_available); } + + @Override + public void onScrollStateChanged(AbsListView view, int scrollState) { + switch (scrollState) { + case OnScrollListener.SCROLL_STATE_IDLE: + mAdapterHelper.setBusy(false); + dataSetChanged(); + break; + case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: + mAdapterHelper.setBusy(false); + break; + case OnScrollListener.SCROLL_STATE_FLING: + // Do not update views when scroll state is SCROLL_STATE_FLING + mAdapterHelper.setBusy(true); + break; + } + } + + @Override + public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, + int totalItemCount) { + // no-op + } } diff --git a/src/com/android/dialer/calllog/CallLogAdapterHelper.java b/src/com/android/dialer/calllog/CallLogAdapterHelper.java index a16935cfe..90b458442 100644 --- a/src/com/android/dialer/calllog/CallLogAdapterHelper.java +++ b/src/com/android/dialer/calllog/CallLogAdapterHelper.java @@ -137,6 +137,9 @@ public class CallLogAdapterHelper implements ViewTreeObserver.OnPreDrawListener // Check if thread is finished, and if so return immediately. if (mDone) return; + // only update contact info when scroll state is not fling. + if (mBusy) continue; + // Obtain next request, if any is available. // Keep synchronized section small. ContactInfoRequest req = null; @@ -201,6 +204,8 @@ public class CallLogAdapterHelper implements ViewTreeObserver.OnPreDrawListener /** Can be set to true by tests to disable processing of requests. */ private volatile boolean mRequestProcessingDisabled = false; + private boolean mBusy; + /** * List of requests to update contact details. * <p> @@ -228,6 +233,14 @@ public class CallLogAdapterHelper implements ViewTreeObserver.OnPreDrawListener } }; + public void setBusy(boolean isBusy) { + mBusy = isBusy; + } + + public boolean isBusy(){ + return mBusy; + } + /** * Enqueues a request to look up the contact details for the given phone number. * <p> diff --git a/src/com/android/dialer/calllog/CallLogFragment.java b/src/com/android/dialer/calllog/CallLogFragment.java index fbde552ad..4dc168556 100644 --- a/src/com/android/dialer/calllog/CallLogFragment.java +++ b/src/com/android/dialer/calllog/CallLogFragment.java @@ -312,6 +312,7 @@ public class CallLogFragment extends AnalyticsListFragment public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); getListView().setEmptyView(view.findViewById(R.id.empty_list_view)); + getListView().setOnScrollListener(mAdapter); getListView().setItemsCanFocus(true); maybeAddFooterView(); |