summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChiao Cheng <chiaocheng@google.com>2013-10-08 21:50:36 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-10-08 21:50:37 +0000
commitd7cc21592fee49dbe3e1c65a1968ce0f4e96d85f (patch)
tree0bba8a13dd942f653fd2b8de31a7eda9f930c79d /src
parent7d0513e001f7dd1e28d8f81373ef70d487582048 (diff)
parent643e78532e5d40ca62e6545855f847e26eaffa4e (diff)
Merge "Check for closed cursor to prevent crash." into klp-dev
Diffstat (limited to 'src')
-rw-r--r--src/com/android/dialer/calllog/CallLogAdapter.java33
-rw-r--r--src/com/android/dialer/calllog/IntentProvider.java12
2 files changed, 29 insertions, 16 deletions
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index b2e520632..9392410d1 100644
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -195,26 +195,27 @@ public class CallLogAdapter extends GroupingListAdapter
private ImageView mBadgeImageView;
private TextView mBadgeText;
- /** Listener for the primary action in the list, opens the call details. */
- private final View.OnClickListener mPrimaryActionListener = new View.OnClickListener() {
+ /** Listener for the primary or secondary actions in the list.
+ * Primary opens the call details.
+ * Secondary calls or plays.
+ **/
+ private final View.OnClickListener mActionListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
- IntentProvider intentProvider = (IntentProvider) view.getTag();
- if (intentProvider != null) {
- mContext.startActivity(intentProvider.getIntent(mContext));
- }
+ startActivityForAction(view);
}
};
- /** Listener for the secondary action in the list, either call or play. */
- private final View.OnClickListener mSecondaryActionListener = new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- IntentProvider intentProvider = (IntentProvider) view.getTag();
- if (intentProvider != null) {
- mContext.startActivity(intentProvider.getIntent(mContext));
+
+ private void startActivityForAction(View view) {
+ final IntentProvider intentProvider = (IntentProvider) view.getTag();
+ if (intentProvider != null) {
+ final Intent intent = intentProvider.getIntent(mContext);
+ // See IntentProvider.getCallDetailIntentProvider() for why this may be null.
+ if (intent != null) {
+ mContext.startActivity(intent);
}
}
- };
+ }
@Override
public boolean onPreDraw() {
@@ -497,8 +498,8 @@ public class CallLogAdapter extends GroupingListAdapter
private void findAndCacheViews(View view) {
// Get the views to bind to.
CallLogListItemViews views = CallLogListItemViews.fromView(view);
- views.primaryActionView.setOnClickListener(mPrimaryActionListener);
- views.secondaryActionView.setOnClickListener(mSecondaryActionListener);
+ views.primaryActionView.setOnClickListener(mActionListener);
+ views.secondaryActionView.setOnClickListener(mActionListener);
view.setTag(views);
}
diff --git a/src/com/android/dialer/calllog/IntentProvider.java b/src/com/android/dialer/calllog/IntentProvider.java
index 01ebf2f3e..da0c69de5 100644
--- a/src/com/android/dialer/calllog/IntentProvider.java
+++ b/src/com/android/dialer/calllog/IntentProvider.java
@@ -22,6 +22,7 @@ import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.CallLog.Calls;
+import android.util.Log;
import com.android.contacts.common.CallUtil;
import com.android.dialer.CallDetailActivity;
@@ -32,6 +33,9 @@ import com.android.dialer.CallDetailActivity;
* The intent is constructed lazily with the given information.
*/
public abstract class IntentProvider {
+
+ private static final String TAG = IntentProvider.class.getSimpleName();
+
public abstract Intent getIntent(Context context);
public static IntentProvider getReturnCallIntentProvider(final String number) {
@@ -66,6 +70,14 @@ public abstract class IntentProvider {
return new IntentProvider() {
@Override
public Intent getIntent(Context context) {
+ if (cursor.isClosed()) {
+ // There are reported instances where the cursor is already closed.
+ // b/10937133
+ // When causes a crash when it's accessed here.
+ Log.e(TAG, "getCallDetailIntentProvider() cursor is already closed.");
+ return null;
+ }
+
cursor.moveToPosition(position);
Intent intent = new Intent(context, CallDetailActivity.class);