diff options
author | Chiao Cheng <chiaocheng@google.com> | 2013-10-08 21:50:36 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-10-08 21:50:37 +0000 |
commit | d7cc21592fee49dbe3e1c65a1968ce0f4e96d85f (patch) | |
tree | 0bba8a13dd942f653fd2b8de31a7eda9f930c79d /src | |
parent | 7d0513e001f7dd1e28d8f81373ef70d487582048 (diff) | |
parent | 643e78532e5d40ca62e6545855f847e26eaffa4e (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.java | 33 | ||||
-rw-r--r-- | src/com/android/dialer/calllog/IntentProvider.java | 12 |
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); |