Validate that Handler being cleared is the one currently registered.

The BaseCommands.unsetOnXXX(Handler h) cleared the current singleton
registrant without validating that it was the same Handler used in the
argument. Out-of-order set/unset would cause a problem.

Bug: 17436226
Change-Id: I53a264e517f7cbef9e243c628102817a376da29d
diff --git a/src/java/com/android/internal/telephony/BaseCommands.java b/src/java/com/android/internal/telephony/BaseCommands.java
index 795ecba..bccabda 100644
--- a/src/java/com/android/internal/telephony/BaseCommands.java
+++ b/src/java/com/android/internal/telephony/BaseCommands.java
@@ -279,7 +279,10 @@
 
     @Override
     public void unSetOnNewGsmSms(Handler h) {
-        mGsmSmsRegistrant.clear();
+        if (mGsmSmsRegistrant != null && mGsmSmsRegistrant.getHandler() == h) {
+            mGsmSmsRegistrant.clear();
+            mGsmSmsRegistrant = null;
+        }
     }
 
     @Override
@@ -289,7 +292,10 @@
 
     @Override
     public void unSetOnNewCdmaSms(Handler h) {
-        mCdmaSmsRegistrant.clear();
+        if (mCdmaSmsRegistrant != null && mCdmaSmsRegistrant.getHandler() == h) {
+            mCdmaSmsRegistrant.clear();
+            mCdmaSmsRegistrant = null;
+        }
     }
 
     @Override
@@ -299,7 +305,10 @@
 
     @Override
     public void unSetOnNewGsmBroadcastSms(Handler h) {
-        mGsmBroadcastSmsRegistrant.clear();
+        if (mGsmBroadcastSmsRegistrant != null && mGsmBroadcastSmsRegistrant.getHandler() == h) {
+            mGsmBroadcastSmsRegistrant.clear();
+            mGsmBroadcastSmsRegistrant = null;
+        }
     }
 
     @Override
@@ -309,7 +318,10 @@
 
     @Override
     public void unSetOnSmsOnSim(Handler h) {
-        mSmsOnSimRegistrant.clear();
+        if (mSmsOnSimRegistrant != null && mSmsOnSimRegistrant.getHandler() == h) {
+            mSmsOnSimRegistrant.clear();
+            mSmsOnSimRegistrant = null;
+        }
     }
 
     @Override
@@ -319,7 +331,10 @@
 
     @Override
     public void unSetOnSmsStatus(Handler h) {
-        mSmsStatusRegistrant.clear();
+        if (mSmsStatusRegistrant != null && mSmsStatusRegistrant.getHandler() == h) {
+            mSmsStatusRegistrant.clear();
+            mSmsStatusRegistrant = null;
+        }
     }
 
     @Override
@@ -329,7 +344,10 @@
 
     @Override
     public void unSetOnSignalStrengthUpdate(Handler h) {
-        mSignalStrengthRegistrant.clear();
+        if (mSignalStrengthRegistrant != null && mSignalStrengthRegistrant.getHandler() == h) {
+            mSignalStrengthRegistrant.clear();
+            mSignalStrengthRegistrant = null;
+        }
     }
 
     @Override
@@ -339,7 +357,10 @@
 
     @Override
     public void unSetOnNITZTime(Handler h) {
-        mNITZTimeRegistrant.clear();
+        if (mNITZTimeRegistrant != null && mNITZTimeRegistrant.getHandler() == h) {
+            mNITZTimeRegistrant.clear();
+            mNITZTimeRegistrant = null;
+        }
     }
 
     @Override
@@ -349,7 +370,10 @@
 
     @Override
     public void unSetOnUSSD(Handler h) {
-        mUSSDRegistrant.clear();
+        if (mUSSDRegistrant != null && mUSSDRegistrant.getHandler() == h) {
+            mUSSDRegistrant.clear();
+            mUSSDRegistrant = null;
+        }
     }
 
     @Override
@@ -359,7 +383,10 @@
 
     @Override
     public void unSetOnSuppServiceNotification(Handler h) {
-        mSsnRegistrant.clear();
+        if (mSsnRegistrant != null && mSsnRegistrant.getHandler() == h) {
+            mSsnRegistrant.clear();
+            mSsnRegistrant = null;
+        }
     }
 
     @Override
@@ -369,7 +396,10 @@
 
     @Override
     public void unSetOnCatSessionEnd(Handler h) {
-        mCatSessionEndRegistrant.clear();
+        if (mCatSessionEndRegistrant != null && mCatSessionEndRegistrant.getHandler() == h) {
+            mCatSessionEndRegistrant.clear();
+            mCatSessionEndRegistrant = null;
+        }
     }
 
     @Override
@@ -379,7 +409,10 @@
 
     @Override
     public void unSetOnCatProactiveCmd(Handler h) {
-        mCatProCmdRegistrant.clear();
+        if (mCatProCmdRegistrant != null && mCatProCmdRegistrant.getHandler() == h) {
+            mCatProCmdRegistrant.clear();
+            mCatProCmdRegistrant = null;
+        }
     }
 
     @Override
@@ -389,7 +422,10 @@
 
     @Override
     public void unSetOnCatEvent(Handler h) {
-        mCatEventRegistrant.clear();
+        if (mCatEventRegistrant != null && mCatEventRegistrant.getHandler() == h) {
+            mCatEventRegistrant.clear();
+            mCatEventRegistrant = null;
+        }
     }
 
     @Override
@@ -399,7 +435,10 @@
 
     @Override
     public void unSetOnCatCallSetUp(Handler h) {
-        mCatCallSetUpRegistrant.clear();
+        if (mCatCallSetUpRegistrant != null && mCatCallSetUpRegistrant.getHandler() == h) {
+            mCatCallSetUpRegistrant.clear();
+            mCatCallSetUpRegistrant = null;
+        }
     }
 
     @Override
@@ -409,7 +448,10 @@
 
     @Override
     public void unSetOnIccSmsFull(Handler h) {
-        mIccSmsFullRegistrant.clear();
+        if (mIccSmsFullRegistrant != null && mIccSmsFullRegistrant.getHandler() == h) {
+            mIccSmsFullRegistrant.clear();
+            mIccSmsFullRegistrant = null;
+        }
     }
 
     @Override
@@ -443,7 +485,10 @@
 
     @Override
     public void unSetOnCallRing(Handler h) {
-        mRingRegistrant.clear();
+        if (mRingRegistrant != null && mRingRegistrant.getHandler() == h) {
+            mRingRegistrant.clear();
+            mRingRegistrant = null;
+        }
     }
 
     @Override
@@ -475,7 +520,10 @@
 
     @Override
     public void unSetOnRestrictedStateChanged(Handler h) {
-        mRestrictedStateRegistrant.clear();
+        if (mRestrictedStateRegistrant != null && mRestrictedStateRegistrant.getHandler() != h) {
+            mRestrictedStateRegistrant.clear();
+            mRestrictedStateRegistrant = null;
+        }
     }
 
     @Override
@@ -511,7 +559,10 @@
     }
 
     public void unSetOnUnsolOemHookRaw(Handler h) {
-        mUnsolOemHookRawRegistrant.clear();
+        if (mUnsolOemHookRawRegistrant != null && mUnsolOemHookRawRegistrant.getHandler() == h) {
+            mUnsolOemHookRawRegistrant.clear();
+            mUnsolOemHookRawRegistrant = null;
+        }
     }
 
     @Override