From e7b2801cda823c63322b3291021677acfb8d33ef Mon Sep 17 00:00:00 2001 From: Makoto Onuki Date: Thu, 20 Sep 2012 16:48:56 -0700 Subject: [cherrypick] Fix potential issue in I3d791ce1f536680a9ca0db2c387f3aad36eda17f Bug 7164046 Change-Id: Ic03bd6151ba5ee91287b248fe295614aa816f25b --- src/com/android/dialer/calllog/CallLogFragment.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/com/android/dialer/calllog/CallLogFragment.java b/src/com/android/dialer/calllog/CallLogFragment.java index a59be8546..af32ef8f4 100644 --- a/src/com/android/dialer/calllog/CallLogFragment.java +++ b/src/com/android/dialer/calllog/CallLogFragment.java @@ -546,15 +546,27 @@ public class CallLogFragment extends ListFragment * 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 @@ public class CallLogFragment extends ListFragment private void unregisterPhoneCallReceiver() { if (mPhoneStateListener != null) { mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE); + mPhoneStateListener = null; } } } -- cgit v1.2.3