Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d7cc2159 authored by Chiao Cheng's avatar Chiao Cheng Committed by Android (Google) Code Review
Browse files

Merge "Check for closed cursor to prevent crash." into klp-dev

parents 7d0513e0 643e7853
Loading
Loading
Loading
Loading
+17 −16
Original line number Diff line number Diff line
@@ -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();

    private void startActivityForAction(View view) {
        final IntentProvider intentProvider = (IntentProvider) view.getTag();
        if (intentProvider != null) {
                mContext.startActivity(intentProvider.getIntent(mContext));
            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);
    }

+12 −0
Original line number Diff line number Diff line
@@ -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);