[cherrypick] Fix potential issue in I3d791ce1f536680a9ca0db2c387f3aad36eda17f

Bug 7164046

Change-Id: Ic03bd6151ba5ee91287b248fe295614aa816f25b
diff --git a/src/com/android/dialer/calllog/CallLogFragment.java b/src/com/android/dialer/calllog/CallLogFragment.java
index a59be85..af32ef8 100644
--- a/src/com/android/dialer/calllog/CallLogFragment.java
+++ b/src/com/android/dialer/calllog/CallLogFragment.java
@@ -546,15 +546,27 @@
      * Register a phone call filter to reset the call type when a phone call is place.
      */
     private void registerPhoneCallReceiver() {
+        if (mPhoneStateListener != null) {
+            return; // Already registered.
+        }
         mTelephonyManager = (TelephonyManager) getActivity().getSystemService(
                 Context.TELEPHONY_SERVICE);
         mPhoneStateListener = new PhoneStateListener() {
             @Override
             public void onCallStateChanged(int state, String incomingNumber) {
-                if (state == TelephonyManager.CALL_STATE_OFFHOOK ||
-                        state == TelephonyManager.CALL_STATE_RINGING) {
-                    updateFilterTypeAndHeader(CallLogQueryHandler.CALL_TYPE_ALL);
+                if (state != TelephonyManager.CALL_STATE_OFFHOOK &&
+                        state != TelephonyManager.CALL_STATE_RINGING) {
+                    return;
                 }
+                mHandler.post(new Runnable() {
+                    @Override
+                    public void run() {
+                        if (getActivity() == null || getActivity().isFinishing()) {
+                            return;
+                        }
+                        updateFilterTypeAndHeader(CallLogQueryHandler.CALL_TYPE_ALL);
+                    }
+                 });
             }
         };
         mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
@@ -566,6 +578,7 @@
     private void unregisterPhoneCallReceiver() {
         if (mPhoneStateListener != null) {
             mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
+            mPhoneStateListener = null;
         }
     }
 }