summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2015-04-20 09:11:33 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2015-04-20 09:11:33 -0700
commit77e9bb4ba4b9b49b95a26d80ead59aa37d016232 (patch)
tree42066b9a56cda3a77b93ab5b707f771c25421050
parent0b597cc753a3aeb3eda2f7a121e2972d638bea6d (diff)
parent78e1f922ade488d5f57dd415d4ac914b76713100 (diff)
downloadandroid_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"
-rwxr-xr-xsrc/com/android/dialer/calllog/CallLogAdapter.java39
-rw-r--r--src/com/android/dialer/calllog/CallLogAdapterHelper.java13
-rw-r--r--src/com/android/dialer/calllog/CallLogFragment.java1
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();